2009-06-18 15 views
9

私は非常に大規模でデータ集約型のレガシーアプリケーションを開発中です。両方のコードベース&データベースは大規模です。大量のビジネスロジックがストアドプロシージャを含むすべての層に分散されています。データ集約型のレガシーアプリケーションをテストするためのヒント

効率的な方法で、アプリケーションに「ユニット」テストを適用する方法(技術的には統合テスト)を提案する人はいませんか?現在のアーキテクチャでは、どのようなタイプの注入や模擬も容易にサポートされません。テストを容易にするために新しいコードが書かれていますが、レガシーコードはどうですか?データベース内のデータ自体やビジネスロジックへの依存度が高いため、現在はインラインSQLを使用してテストに使用するデータを検索していますが、これらは時間がかかります。ビューやストアドプロシージャを作成するだけでは不十分です。

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

答えて

11

Michael FeathersのWorking Effectively with Legacy Codeのコピーを入手してください。これは、テストされていない大規模なコードベースでの作業に役立つアドバイスが満載です。

もう1つの良い本はObject Oriented Reengineering Patternsです。本書のほとんどは、オブジェクト指向ソフトウェアに特有のものではありません。全文はPDF形式で無料でダウンロードできます。私自身の経験から

:それはまだない場合は

  • ビルドおよび展開を自動化

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

    絞り込みを避けるために:本番データベースから

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

    。このようなシナリオでは、非常に貴重です。 – itowlson

    +0

    +1。それは素晴らしいです。 –

    +1

    本のミニバージョン:http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf –

    0

    「テストレガシーアプリケーションの近代化、」ハイライト:

    1. テストがAscentialTest

      にオブジェクトの新しいプラットフォームのコンポーネントに従来のオブジェクトを変換する
    2. 方法を作成する方法のハイレベルの概要定義

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

    テストのレガシーアプリケーションの使用方法の詳細については、こちらをご確認ください:私は強く秒アドバイスは、羽の本を手に入れるだろう

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

    関連する問題