10

2002 年に、クライアント向けにかなり大きな VB6 アプリを作成しました。多くの UserControls とサード パーティのメニュー コントロール (メニュー名の横にアイコンを配置するため) を使用しました。動的に「分割可能な」パネル、複数状態のチェックボックスを備えた TreeView などを備えていました。非常にリッチな UI です。このプロジェクトに費やした合計時間は約 500 時間で、クライアントは快くそれを1 か月に分散させてくれました。(ええ、それはそのような仕事でした。)しかし、彼らは非常に満足していました。

そのため、何年も連絡を取っていなかった後、突然電話がかかってきて、アプリを .Net に更新できないかと尋ねてきました。私は VB.Net を使用していないので、私の最初の反応は辞退することです。そして、移植の難しさなどについてSOに関するたくさんの投稿を読んだので、いわば辞退する傾向がさらに強くなっています。

それでも、彼らにノーと言う前に、それにかかる労力を大まかに数値化することに興味があります. このようなことをしたことがあり、それがどれほどの仕事であるかを感じている人から聞いてみたい. でしたか:

  • オリジナルで使用した労力よりも大幅に少ないですか?
  • オリジナルで使用した労力よりもいくらか少ないですか?
  • オリジナルで使った努力と同じですか?
  • もっと?
  • もっとたくさん?

実際にこの種のポートを行ったことがある場合のみ回答してください。答えは正確である必要はありません. 私の感じでは、努力は少なくともオリジナルにかかったのと同じくらい、あるいはそれ以上になるだろう. しかし、私は間違っている可能性があります。助けてくれてありがとう。

4

7 に答える 7

9

私はあなたが頼まれたことをしました。私の場合、それは (アマチュア) ボウリング トーナメント管理システムでした: メンバー データベース管理 (個人情報、IRS/賞金情報、メーリング リストなど)、トーナメント管理 (プレーヤーの割り当て、スコアリング、レーン チケット生成、賞金のチェック レジスター、サイドポットなど)、および特定の年のすべての勝者の IRS EDI 生成。さらに、約 50 の画面/サブ画面に散在する約 10 億の小さなアイテム。

重要なのはクライアントの理解です。これは些細なことではないことをクライアントが理解していることを明確にする必要があります。これはあなたの両方にとって新しい冒険です (特にあなたが VB.Net の初心者の場合)。彼らが以前にあなたの仕事を気に入っていた場合、彼らはあなたに VB.Net を学ぶ余裕/自由を与えてくれるかもしれません。

以前の回答のいくつかを読んで、いくつかの提案をすることができます (ソフトウェア開発者としての 30 年の経験に基づいており、最後の 20 年間はコンサルタントとして....)

  1. 彼らが提供する場合は、彼らのお金を受け取ります。自分のスキルセットを 20 世紀に持ち込む必要があります。彼らにお金を払わせてください (彼らが同意するならもう一度。) 彼ら雑誌をサーフィンしていて、「最新のもの」を望んでいるのに正当な理由がないかもしれませんが、このポートによって (あなたの) アプリケーションの寿命を延ばすことができることに気付いているかもしれません。本質的に、彼らはそれを行うためのあらゆる種類のばかげた理由を持っている可能性があります...彼らがあなたを雇って、この移植が良い考えであるかどうかを決定しない場合. 次に、良好な顧客関係構築のプロセスからの決定についての落胆を表明することができます。しかし、彼らがこれをやりたいのなら、それはあなたの仕事でもあります.

  2. C# と VB.Net の比較を大まかに見てみましょう。私は創業以来、VB.Net / ASPX.net (vs C#) で独占的に働いてきましたが、VB.Net で達成できない機能にはまだ遭遇していません。VB.Net をただのおもちゃと見なす「純粋主義者」もいます。まあ、私はアセンブラー、次に C、次に C++ (そして、Fortran、PL1 を投入することもできます)、次に VB5、次に 6、そして VB.Net ... そして NOW Java for Android で書いていた時代から来ました。そのすべての楽しい...そしてそれぞれに長所と短所があります。C# と VB.Net は基本的に、メタ言語の中間体を実現するための単なる GUI であることを思い出してください。ひどい (効率やメモリ使用量、または選択した任意のメトリックによって測定される) プログラムを C# で作成し、VB.Net で優れたプログラムを作成することができます (逆もまた同様です)。(... C# は "

  3. 私は、Visual Studio が最初のパスの面倒な作業のほとんどを実行できるようにすることにしました。次に、膨大な数のエラーを調べてクリーンアップします。それはかなり速く進みます。

  4. ただし、VB6 で手作業でコーディングしたフレームワークの利点を活用するかどうかを決定する必要があります。特定の文字を見つけるために文字列をループする EG は、The_String.IndexOf("c") と同じくらい簡単になりましたオブジェクト指向) と、私が慣れてきたフレームワークの利点... これにより、開発時間が長くなります (CLIENT UNDERSTANDING マントラを参照)。エラーを取り除くために単純に移植することができ、フレームワークから必ずしも利点を得る必要はありません。

  5. サードパーティの Active-X コントロールに関する問題は見つかりませんでした。FRAMEWORK オブジェクト、COM オブジェクトなどへの参照を追加できます。コントロール ベンダーが .Net (マネージ コード) バージョンを持っている可能性もあります... または、VB6 で記述したため、適切な代替手段がある可能性があります。(クライアント理解マントラを参照)

したがって、まだ読んでいる場合は、VB6 から VB.Net CONVERTED/PORTED での私のアプリケーションでの 2 回目の試みは、動作するモデルに到達するのに元の時間の約 1/3 であったことを最後にお伝えします...そして私はフレームワークも学びます。(自分のスキル セットに自信があり、何年にもわたっていくつかの言語を学習している場合は、VB.Net の要点をすぐに理解できます --- そのサブトルティーにはしばらく時間がかかります。)

クライアントの理解を十分に説教しないと、彼らが移植中に変更を加えたがっている場合、本当にあなたを殺す可能性があることを警告する必要があります (そして、彼らはそれをしばらく使用しているので、これは非常に可能性が高いです. .. 私の場合も非常に真実でした。

ここには厳格なルールはありません。変更がフレームワークをより早く理解するのに実際に役立つか、または変更が本当に苦痛になる可能性があります。それらがどのフレーバーであるかを判断できるのはあなただけです。そして、それらが痛みを伴うタイプであると思われる場合-機能を確実に再現するために、最初に変換を行うように依頼する場合があります-その後、戻ってコードを確認し、変更を加え、必要に応じてフレームワークを利用します. しかし、私が言ったように、ここには厳格な規則はありません - そして、純粋主義者に別の言い方をさせないでください - 彼らはおそらく、PASCAL が世界を支配しようとしていると言ったのと同じ人だということを覚えておいてください!

于 2010-03-13T15:19:10.663 に答える
4

そのため、何年も連絡がなかった後、突然電話があり、アプリを.Netに更新できるかどうか疑問に思いました。

あなたは彼らがこれをしたい理由を尋ねる必要があります。

クライアントが気まぐれで技術的な決定を下すのは悪い計画(tm)です。ソリューションを適用する前に、彼らのニーズと問題を完全に理解してください。問題を理解した後でのみ、推奨事項を作成する必要があります。

彼らが流行語に夢中になっていて、最新のものを使いたいと思っている可能性があります。あるいは、他の何百万ものもののいずれかである可能性があります。彼らの問題の解決策は本当に簡単なものかもしれませんが、彼らの問題が何であるかを知らなければ、その問題を解決するための最良の方法を知ることはできません。

于 2010-03-12T19:19:26.760 に答える
3

そもそも作成にかかった時間と労力の約 50% を使用する予定です。

私は、およそ 500 kloc で構成される商用ソフトウェア製品について、あなたが求めていることを正確に実行しました。リファクタリングへの欲求と、何かを機能させてできるだけ早くリリースしたいという欲求とのバランスを取りました。

チームのほぼ全員がそれを完成させるのに約 1 年かかりました...最初に作成するのに 4 年かかった製品の場合。それは巨大な事業でした..過小評価してはいけません。

于 2010-08-30T19:06:00.720 に答える
2

私たちは今まさにそれをやっていますが、それは少し異なります。1 つの巨大なアプリケーションの代わりに、多数の小さなアプリケーションがあります。ただし、リストにはいくつかの大きなものがあります。わかったことは、当初考えていたよりも作業が大幅に減ったということです。しかし...最大の未知数は、私たちが持っていたサードパーティのコントロールに関係していました. 基本的に再設計するものがたくさんある場合は、おそらくより多くの作業が必要になるでしょう。

私が持っている良い提案の 1 つは、変換に Visual Studio 2008 を使用することです (VS 2005 ではありません)。VS 2008 でビルトイン コンバーターを使用すると、VS 2005 よりも問題がはるかに少なくなりました。理由はわかりません。

ですから、あなたが再び 500 時間を費やさないとは言えませんが、そうではない可能性が高いです。ほとんどの時間をテストに費やして、失われた機能がないことを確認する必要があります。

于 2010-03-12T19:10:19.770 に答える
2

私の意見では、

Visual Basic 6 と Visual Basic .NET は非常に異なるため、名前の一致を忘れて、これを .NET =P への移行として扱う必要があります。

あなたには 1 つの大きな利点と 1 つの欠点があると思います。

  • 利点:アプリケーションが何をしなければならないかを既に知っています。おそらく、いくつかの変更や新機能を追加するために、クライアントとミーティングを行うことになるでしょうが、要件の大部分は非常に明確です。あなたやあなたのチームがコーディングしている間に、古い作業アプリケーションを確認することさえできます。

  • 短所:新しい言語を学ばなければなりません。所要時間は非常に主観的なものです。新しい言語を学ぶことは問題ではなく、大きな問題はプログラミングを学ばなければならないといつも思っていました!. しかし、あなたはプログラミングを知っています。何をしたいのかがわかるので、新しい言語でそれを行う方法を検索するだけで済みます。

.NETを学ばなければならないので、見積もるなら、せめて前回の申請と同じか、それ以上かかると考えたほうがいいと思います。

私のアドバイスは、この新しい言語を学ぶチャンスをつかむことです. そして、あなたがプロジェクトを断る傾向があるなら、別のアイデアを教えてください...おそらく、あなたのアプリケーションの小さなモジュールを見積もって、そのモジュールをやろうとクライアントに伝えて、それがどれくらいかを見ることができます。あなたにかかります。続行しないことにした場合でも、クライアントはこの小さなモジュールを支払う必要があります.

すべての要件を知っていることをクライアントに伝えることはできないため、クライアントは何らかの方法でお金を節約しています. そして、彼らはこの小さなリスクを負うべきです (私たちは小さなモジュールについて話しているのです)。なぜなら、プロジェクトを作成するのにあなたよりも優れている人は誰でも、あなたは古いアプリケーションを完全に知っているからです!

クライアントがこれに同意する場合は、より多くの引数を使用して決定を下すことができます。そして、最終的に続行することに決めた場合、この小さなモジュールが完成したので、プロジェクト全体を以前よりも正確に見積もることができます。

申し訳ありませんが、私の英語はあまり上手ではなく、おそらく文法上の誤りをたくさん犯してしまいました。

EDIT文法ミス... =P

于 2010-03-12T19:37:36.643 に答える
1

今回は2ヶ月行きます。

しかし、真面目な話、クライアントにはポートを完了する必要がある何らかの理由があるため、それはおそらくそれほど遠くないし、低くもないでしょう。それはただの移植ではなく、プロジェクト全体を吹き飛ばすような「ちょっとした機能強化」が必要になるでしょう。

さらに、サードパーティのコントロールについても少し心配です。残りのほとんどは正常に変換されるはずですが、.Net でサードパーティ製のコントロールに適切なアナログを見つける際に問題が発生することがあります。

また、あなたが vb.net を使用していないことも心配です。あなたが ac# ユーザーであり、その方法で再実装したい場合は問題ありませんが、そうでなければ、これは初心者ではありません。VB.Net は vb6 とは大きく異なるため、問題が発生する可能性があります。

それを除けば、今回は前回よりも作業が少ないと思います。なぜなら、目の前に非常に明確な設計があり、それに従う必要があるからです。

于 2010-03-12T19:09:11.503 に答える
1

これは大きなトピックです。

MS の Free Book - Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic .NET を参照してください。

以前のアプリケーションを単に試して移植するのではなく、最初から書き直したとしても、それほど時間はかからないはずです。VB.Net には、新しいアプリケーションのビルドにかかる時間を短縮するいくつかの機能があります。あなたはまだ VB.Net を知らないようですが、最も時間がかかるのは、新しい方法(tm)で物事を行う方法を学ぶことです。

于 2010-03-12T19:09:55.000 に答える