6

Visual Basic 6.0で作成され、その後 .NET に移植された大規模なレガシ アプリケーションをリファクタリングしたいと考えています。自信を持ってこれを行うために、既存のコードの前後で単体テストを行い、前後を比較できるようにしたいと考えています。これを行う最も簡単で効果的な方法は何ですか?

「レガシーコードを効果的に使用する」という本があり、役に立ちそうです。ただし、オブジェクト指向言語のみを扱っているようで、Visual Basic 6.0 は必ずしもオブジェクト指向ではありません。この本はまだ役に立ちますか?読んだ人が保証してくれるといいのですが。

具体的には、このアプリケーションはフォーム自体以外のクラスを使用しません。フォームから直接データベースにアクセスしますが、一貫性はありません。このプロジェクトに取り組んでいる人は何人かいて、全員が独自のスタイルを使用しており、標準はまったくありません。

前述のとおり、このプロジェクトは VB.NET に移植されています。ただし、Visual Studio 2008 でコンパイルされるという意味でのみ移植されています。コーディングの概念はすべて Visual Basic 6.0 です。

4

7 に答える 7

7

オブジェクト指向(OO)言語を扱うだけではありません。大きなセクションでは、Cでレガシーコードを処理する方法について説明します。

そうです、それを購入してください!


次のような章全体(第19章)があります。

私のプロジェクトはオブジェクト指向ではありません。安全な変更を行うにはどうすればよいですか?

また、 VisualBasic6.0TDDを使用するのに役立つxUnit実装であるvbUnitもあります。

実際、私は質問を読み間違えて、あなたがすでに移植しているのではなく、あなたが移植しようとしていると思いました。この場合、これが完全にあなたのための本である「レガシー」VB.NETコードがたくさんあります。VB.NETのOO機能を利用して、本の残りの部分を使用できます。

私は本当にこの本をこれ以上お勧めすることはできません。

于 2009-06-22T21:34:30.900 に答える
1

はい; この本の概念は素晴らしく強力で、OOP を超えて拡張されています。また、VB6はオブジェクト指向にすることができますが、一部の言語ほど完全にオブジェクト指向ではありません。

この本の中で最も強力な概念の 1 つに「継ぎ目」があります。これは本質的に、コードを分割してテストを挿入したり、機能の一部を分離または抽象化したりできる場所です。これは、手続き型コードにも当てはまる概念の 1 つにすぎません。

于 2009-06-22T21:37:50.270 に答える
1

いくつかの作業が必要になることは間違いありませんが、.NET 作業を行う前に検討すべき戦略を次に示します。

基礎となる FORM コードを可能な限りクラスに移動します。フォームごとに 1 つのクラス ファイルを開始します。本質的に、フォーム イベント ハンドラーは、基になるクラス インスタンス内のメソッドへのプロキシ呼び出し以外は何も実行しない必要があります。すべてのカスタム メソッドは、明らかにクラス ファイルに移行できます。

Microsoft などによるベスト プラクティス ガイド (など) を読んで .NET 移行の準備に役立てれば、基本的には、再コード化/リファクタリングを行う必要がある小さな地獄に取り掛かることができます。イベントの順序付け、レイト バインド オブジェクト/バリアント、コレクションなど。

エラー処理コードについて一言: スパゲッティ オン エラーを複製するのは特に困難です。特に、平均的な Visual Basic コーダーは、フロー制御ロジックとしてそれを使用するのが苦手だったからです。ルーチンに 2 つ以上ある場合は、各 On Error ブロックを個別のサブルーチンに分割する価値があります。

コードがクリーンアップされたら、Visual Basic コードを合理的な抽象化 (たとえば、単一のデータ アダプター クラスと接続など) にリファクタリングすることも検討できますが、それを判断するのはあなた次第です。

このアプローチは気に入らないかもしれませんので、必ず 1 つのフォームで水域をテストしてください。

于 2009-06-23T02:48:12.030 に答える
1

質問をより具体的にしたい場合があります。

VB6 自体は純粋な OO 言語ではありませんが、慣れ親しんでおくべき十分な OO の要素があります。また、VB6 IDE 用のユニット テスト プラグインも多数あります。

しかし、高レベルの VB6 コンポーネントのいくつかを考えてみましょう。

  • フォームはオブジェクトです (新しいインスタンスを作成できます)。
  • モジュールは、静的メソッドのみを持つクラスのように動作します。
  • クラスと UserControls は、取得するオブジェクトに限りなく近いものです。コンストラクターの欠如は物事を大まかにしますが、元の開発者が Initialize にとどまるか、一貫した Init サブルーチンを作成することを願っています。
  • VB のイベントは奇妙です。それはまた、おそらくあなたを最もつまずかせるものでもあります. イベントの特定の順序に依存する非表示のステートフル コードは、間違いなくあちこちに散らばっています。
  • プロパティ ページ。まあ、それはそれが何であるかです。

VB のベスト プラクティスから始めます。アプリがベスト プラクティス コードを念頭に置いて作成されていない場合は、その手順を実行することで、今後の多くの問題を回避できると思います。

于 2009-06-22T21:44:12.533 に答える
1

私は、C/C++ プロジェクトを制御するために購入したコピーを所有しています。C#/ . NETが提供しなければならない機能を見逃してしまったので。

本は非常に C/C++ っぽいですが、John が言うように、オブジェクトを使用しない作業の章があります。

しかし、おっしゃる通り、コードが .NET に移植された場合、それはもはや Visual Basic 6.0 コードではありません。.NET には、コードにフックしてテストできる Visual Basic/C# の方法が多数あります。とはいえ、この本は、アプリケーションに接続するさまざまな方法と、大規模な古いプロジェクトを管理下に置くための戦略の概要を説明します。

于 2009-06-23T03:06:00.403 に答える
0

特性評価テストが最も有益であることがわかると思います。自動化する必要があります。特性評価テストがなければ、アプリケーション/コードを実際に実行して手動でテストする必要があります。新しいコードを追加するときに、重要な機能のテストを見逃しがちです。これは私自身の経験から来ています。

Sprout Method と Sprout Class は、新しいコードを追加するときに重要です。

于 2009-06-23T17:46:53.787 に答える
0

Martin Fowler のRefactoring: Improving the design of existing code をご覧になることをお勧めします。これは必読です。

Professional Refactoring in Visual Basicに沿ったものを探しているかもしれません。読んだことはありませんが、当てはまりそうです。

于 2009-06-22T21:44:50.660 に答える