言語Aから言語Bへのコードの移植に関連するコストを見積もる最良の方法は?


8

プロジェクトを言語Aから言語Bに移植するコストを見積もることをクライアントに考えさせます。これを行うための提案の要求をまとめる最良の方法は何ですか?


3
なぜそれをする必要があるのですか?それが良い選択だと想像するのは難しいです。
Anto

+1 @Anto:言語AはPerlであり、クライアントはリモートサーバーで実行されているコードベースのセキュリティを懸念しています。ありがとう!
失敗

「コストを見積もる最良の方法は?」同様に答えることは不可能です。
S.Lott

2
@blunders:50によってコードベースの完全なセキュリティ監査を行うための推定後処理、次いで多重その
Carson63000

1
それは6〜8週間かかるはずです。または、このツールを使用します:cznp.com/6to8weeks/index.php
JohnFx

回答:


10

目的が単に1つのアプリケーションを新しい言語に正確に再現することである場合、そのことについてクライアントに説明することをお勧めします。言語Aで実装されたために生じたこれらすべての癖はエンドユーザーに依存している可能性があり、突然言語Bで再作成する必要があるため、移植は実行できる最も危険なことの1つです。嫌なもの。ポーティングは完全に埋没しており、回復を望めないことは言うまでもありません。

プロジェクトを他のプロジェクトと同様に扱い、要件を収集して、オリジナルが存在しないかのように見積もることをお勧めします。エンドユーザーは、製品を使用して以来、製品に新しい視点を持っていることに気付くでしょう。あなたがそれを書き直すつもりなら、それもより良くするかもしれません。


3
TDDはかなり健全なアプローチです。いくつかのユースケースを要約します。既存のコードがパスするユースケースのテストをいくつか定義します。テストに合格する新しいコードを記述します。エッジケースについて質問がある場合は、古いコードを一種の「審判」または「審判」として使用してください。
S.Lott、2011年

@ S.Lott:エンドユーザーのエクスペリエンスをTDDするのはかなり難しいです。
クエンティンスターリン

@ S.Lott:ここでの問題は、言語には癖があるということです。Perlで自然な方法で何かを行うと、コーナーケースで奇妙な動作が発生する可能性が高く、たとえば、Common Lispでこの正確な動作を再構築するのは厄介です。ユーザーがこの動作に依存しているかどうかを知らない限り、何をテストすればよいかわかりません。
David Thornley、2011年

@qes:テストできない場合は存在しません。真剣に。エンドユーザーは何かを「行う」必要があります。そして、その何かをテストする必要があります。テストなしで、それが「完了」したとどのように主張しますか?
S.Lott、2011年

1
@ S.Lott:これは、IBMが以前の7094コンピュータ(IIRC)のIBM 360エミュレーションで実行したかったことです。彼らは、一部の顧客が7094実装の偶発的な文書化されていない機能に依存しており、不要と思われる12個または2個の動作の複製に巻き込まれたことを発見しました。
David Thornley、2011年

4

すでにPerlコードベースがある場合は、コード行数(LOC)がわかっています。Perlと言語Bの表現力の比較を見つけることができるかどうかを確認してください。以下に例を示します。

言語BはJavaだとしましょう。その場合、ポートの推定LOCは元のLOCの約4倍になります(表現力6対1.5)。

次に、Construx EstimateソフトウェアのようなものをLOCモードで使用して、所要時間(および所要人数)を推定します。

これにより、概算のコストと時間の見積もり、およびオーバーシュートする可能性がどの程度あるかがわかります。

言語Bにすでに精通していて、その中でいくつかの測定プロジェクトを実行したことがある場合は、Construx Estimateソフトウェアを使用して、チームの調整を行うことができます。


1
ええ、その見積もりに2または3を掛けて、避けられない反則、わからないこと、購入する必要のあるより強力なサーバー、追加のコーヒー、頭痛の鎮痛剤などを考慮に入れます。
quick_now

@quickly_now:同意しましたが、Construx Estimateは、それらの変動の一部を説明する可能な時間の範囲を提供します。それは私がそれについて好きなことの一部です:それはTHE見積もりを与えません。それは範囲を与えます。
Peter K.

2

Joelsの最も人気のある記事、「すべきでないこと」はそれを最もよく述べています。

彼らはコードを一から書き直すことにしました。

書き直してしまった場合は、正しく書き直してください。移植するだけではありません。

  • プログラムのどの部分が使用されなくなりましたか?これらの部分はスキップしてください。
  • プログラムのどの部分が最も重要ですか?これらを最初に移植します。
  • 新しいプログラム、GUIを更新し、使いやすく、より「セクシー」にする時間。
  • 古いコードに機能を追加するだけでは、莫大な時間を費やした方がいいのではないでしょうか。

2
「ゼロから書き直す」と「コードを別の言語に移植する」には大きな違いがあります。

2

かなりの時間がかかると思います。あなたはそれがそれの価値があることを確かめるべきです。コードの一部を取り、移植してみてください。かかった時間に、移植したコードの行数とコードの合計行数の比率を掛けます。それはあなたに大まかな数字を与えます、本当の数はおそらくいくつかの複数の人によって高くなります。

事実上、最初からアプリを再度作成しているが、要件が別の言語で指定されている場合、それは簡単ではありません。


+1 @Alb:同意します。コードの一部をテストすることについてです。私の計画は、RFPにPerlコードのチャンク(200行)を含め、応答する入札でポートを必要とすることでした。これにより、オファー間でコードを比較することもできます。すべてのオファーが同じコードを取得するためです。
失敗

1

私は何よりもまず、これが良い選択であるかどうかを本当に考慮すべきです。言語Aの代わりに言語Bを使用する利点は何ですか?

IBMが調査したところ、プログラマーは平均して1時間に100LOCを書き込むとのことです。それよりもまだ開発が進んでいますが、古いアーキテクチャはまだ計画されています。それ以外の点ではプログラムはまだかなり計画されているので、50%がコードを書くとしましょう。(構造化されたプログラムがあり、オブジェクト指向のプログラムが必要な場合や、より大きなタスクになる可能性があります)。

しかし、100LOC /時と書く場合、システム内の現在のLOCの量を割り、プログラマーの平均売上高で乗算し、それに2を掛けます。これは、大まかな見積もりを与える可能性があります。取得した数値を真剣に受け止めないでください。(さらに、真剣に受け止めないでください)。あなたが何をしたいかは、次のような単純に測定する多くの事柄への道に依存します:

  • 新しい言語でのプログラマーの能力
  • 古いプロジェクトはどれほど文書化されているか
  • どの言語から変換され、どの言語に変換されますか?

2
最後に私が知っていたこれらの数値(LOC /日)は低かった-その約30。これは設計、コード化、文書化、およびテストされたものです。すべてのスーパースタープログラマーは、1日あたり1000行のコードをスローできることを知っているため、これらの数値に本当に腹を立てています。彼らは都合の良いことに、設計、文書化、テストにかかる時間を少し忘れています。(そして、進行中の会議、
失敗の

2
追加する必要があります-このLOC /日のマジックナンバーは、過去30〜40年間、ほぼ一定に保たれているようです。つまり、アセンブラの30奇数行... FORTRANの30奇数行... c#の30奇数行。これらのコード行は今やもっと多くのことをするかもしれませんが、LOC /日で測定された全体的な生産性率は非常に長い間かなり頑固に変更されていません。
quick_now 2011年

私の投稿で、コードは50%だけになると言ったので、推測を2倍にする必要があります。現実には、私はコードがちょうど〜10%になると思いますが、プログラムが既に設計されているとして、それはそう長くはかからないでしょう(あるいは、それは二つの言語がどのように異なるによって異なります)
ANTO

1

それはあなたが利用できる時間に依存します。いくつかのオプション:

  • まったく時間はありません、それを成し遂げるだけです -ナプキンの裏を取り、それに行きます。それは、そもそもそれを作成するのに要した時間よりも少なく、単に別の構文でそれを再入力するだけではないようなものです。
  • 1〜3日 -どのアーキテクチャの再設計が必要になるかを把握し、見積もりを試してください。どれだけのロジックを移植する必要があるかを考え、何らかの比率を考えます。プロセスのセキュリティを強化したことを期待できる、セキュリティ関連のタスクのための時間を追加します。作業の複雑さとアーキテクチャの単純さに基づいて、統合テストの時間を追加します。
  • 1か月間 -いくつか試してください-テストアーキテクチャをステージングし、何かを移植してみてください。移植したコードの割合を把握し、さらに見積もります。新しい言語ではまったく不可能だったいくつかのことも理解できる可能性が高く、移行を行うために必要な実際の作業のより良い基礎を提供します。

理想的な世界では、クライアントに、1か月の作業をカバーするための調査タスクに費用をかけて、自分がしたいことだけをプロトタイプ化できるようにすることを提案します。これにより、コストが高すぎる場合に停止して続行しないという選択肢が与えられます。そして、あなたはまだあなたがやった仕事の報酬を受け取ります。


+1調査タスクは良い考えです。演習のリスクを軽減する、より優れたスコープを許可します。数週間で厄介なものを見つけることの危険は、はるかに少なくなります。
quick_now

1

ソフトウェアタスクの適切な見積もりを取得する方法は1つだけです。タスクの小さな、しかしテスト可能な部分を完全に実行するために、利用可能なスタッフを割り当てて、どのくらい時間がかかるかを確認してください。残りの作業をできるだけ多くのユースケースに分割し、同じスタッフが、すでに行われた作業と比較して各反復を推定するようにします。時間を見積もるように依頼するのではなく、最初の反復との比較を説明するように依頼してください。これにより、プロジェクトの残りの部分について可能な限りの最適な見積もりが得られます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.