10

非常に大規模でデータ集約型のレガシー アプリケーションに取り組んでいます。コードベースとデータベースの両方が大規模です。ビジネス ロジックの大部分は、ストアド プロシージャを含むすべての層に分散しています。

「単体」テスト (ほぼすべての特定のプロセスの単一の側面について層全体でテストする必要があるため、技術的に統合テスト) を効率的な方法でアプリケーションに適用する方法について、誰か提案はありますか? 現在のアーキテクチャは、どのタイプのインジェクションやモックも簡単にはサポートできません。テストを容易にするために新しいコードが作成されていますが、レガシー コードはどうでしょうか。データベース内のデータ自体とビジネス ロジックに大きく依存しているため、現在インライン SQL を使用してテストに使用するデータを検索していますが、これには時間がかかります。ビューやストアド プロシージャを作成するだけでは十分ではありません。

どのようなアプローチをとったか (該当する場合)? 何がうまくいきましたか?何ができなかったのか、その理由は? 任意の提案をいただければ幸いです。ありがとう。

4

3 に答える 3

12

Michael Feathers 著のWorking Effectively with Legacy Codeのコピーを入手してください。テストされていない大規模なコードベースを操作するための有益なアドバイスが満載です。

別の良い本はObject Oriented Reengineering Patternsです。本の大部分は、オブジェクト指向ソフトウェアに固有のものではありません。全文はPDF形式で無料でダウンロードできます。

私自身の経験から:試してみてください...

  • ビルドとデプロイを自動化する
  • データベース スキーマをバージョン管理に入れます (まだ行っていない場合)。通常、データベースには、トランザクション コードが機能する前に存在する必要がある参照データが含まれています。これもバージョン管理下に置いてください。dbdeployなどのツールを使用すると、一連のデルタからスキーマと参照データを簡単に再構築できます。
  • データベースのバージョン (およびその他のインフラストラクチャ サービス) を開発ワークステーションにインストールします。これにより、継続的に DBA を経由することなく、データベースで作業できます。また、リモート データセンターの共有サーバーでスキーマを使用するよりも高速です。すべての主要な商用データベース サーバーには、Windows で動作する無料の (ビールのように) 開発バージョンがあります (Windows で開発し、Unix にデプロイするという好ましくない状況に陥っている場合)。
  • コードのある領域で作業を開始する前に、作業している領域の動作を大まかにカバーするエンド ツー エンドのテストを作成します。エンド ツー エンド テストでは、ユーザー インターフェイスを制御したり、ネットワーク サービスを介してやり取りしたりして、外部からシステムを実行する必要があるため、コードを変更して配置する必要はありません。これは (不完全な) 回帰テストとして機能し、システムの内部を単体テストしやすい構造にリファクタリングする自信を与えてくれます。
  • 手動のテスト計画がある場合は、それらを読み、自動化できるものを確認してください。ほとんどの手動テスト計画はほぼ完全にスクリプト化されており、自動化の簡単な成果もそうです
  • エンド ツー エンドのテスト カバレッジを取得したら、コードを変更または拡張するときに、コードをより疎結合のユニットにリファクタリングします。それらのユニットを単体テストで囲みます。

避けるべきこと:

  • 自動テストに使用する環境に本番データベースからデータをコピーします。これにより、テストが予測不能になります。確かに、運用データのコピーに対してシステムを実行しますが、回帰テストではなく探索的テストに使用してください。
  • テストの最後にトランザクションをロールバックして、テストを相互に分離します。これにより、トランザクションがコミットされたときにのみ発生する動作はテストされず、テストの失敗を診断するのに役立つデータが破棄されます。代わりに、テストでは、開始時にデータベースが既知の初期状態であることを確認する必要があります。
  • テストを実行するための「小さな」データセットを作成します。これにより、テストを 1 つの単位として読み取ることができないため、テストを理解しにくくなります。さまざまなシナリオのテストを追加すると、「小さな」データ セットはすぐに非常に大きくなります。代わりに、テストはデータベースにデータを挿入して、テスト フィクスチャをセットアップできます。
于 2009-06-18T21:24:09.197 に答える
0

「レガシー アプリケーションのモダナイゼーションのテスト」では、次の点が強調されています。

  1. AscentialTest でテストを作成する方法の概要

  2. 従来のオブジェクトを新しいプラットフォームに変換する方法 オブジェクト定義のコンポーネント

  3. 最新バージョンのアプリケーションで同じ結果が得られるようにする方法

レガシー アプリケーションのテストの使用方法の詳細については、こちらを確認してください。

http://application-management.cioreview.com/whitepaper/testing-legacy-application-modernization-wid-529.html

于 2016-11-22T06:42:33.813 に答える