12

私は多くの依存関係を持つ Delphi アプリケーションを持っており、DUnit を使用するようにリファクタリングするのは難しい (それは巨大です) ため、AutomatedQA の TestComplete のようなものを使用してフロントエンド UI からテストを行うことを考えていました。

私の主な問題は、バグ修正または新機能によって、以前に (手動で) テストされ、以前は機能していた古いコードが壊れることがあることです。

コマンド ライン スイッチを使用してテスト可能な特定のフォームを開くようにアプリケーションをセットアップし、必要な値とクリックのセットを作成できます。

しかし、抜本的なことをする前に (そして何かを購入する前に) いくつか質問があります。

  1. その価値はありますか?
  2. これはテストする良い方法でしょうか?
  3. テストの結果は私のデータベース (Oracle) にあるはずですが、testcomplete でこれらの値 (複数のテーブルの複数のフィールド) を確認する簡単な方法はありますか?
  4. すべての自動テストを実行するには、テスト データベースをセットアップする必要があります。テスト データベースの再設定を自動化する簡単な方法はありますか? ユーザーカスケードのドロップ以外に、ユーザーの作成、...、impdp。
  5. testcomplete で exe のコマンドライン パラメータを指定する方法はありますか?
  6. 似たような経験をした人はいますか。
4

7 に答える 7

14

それぞれ目的が異なるため、DUnit と TestComplete などの両方を使用することをお勧めします。

DUnit は単体テストには最適ですが、アプリケーション全体のテストや UI テストには使いにくいです。

TestComplete は、Delphi を実際にサポートしている数少ない自動テスト製品の 1 つであり、QA エンジニアによると、サポートは非​​常に優れているとのことです。

ただし、自動テストの設定は大規模で時間のかかる作業であることに注意してください。単体テストと自動化された UI テストを厳密に適用すると、製品コードよりも多くのテスト コードが簡単に作成される可能性があります。

大規模な (既存の) アプリケーションでは、自動テストの実装に関して困難な状況に陥っています。

自動化されたビルド サーバーと組み合わせて、最初に単体テストをセットアップすることをお勧めします。誰かがソース管理に何かをチェックインするたびに、単体テストが自動的に実行されます。すべての単体テストをまっすぐにセットアップしようとしないでください。既存のアプリケーションにとってはあまりにも大きな労力です。新しい機能を追加するとき、および変更を加えようとしているときはいつでも、単体テストを作成することを忘れないでください。また、バグが報告された場合は、バグを修正する前にバグを再現する単体テストを作成することを強くお勧めします。

于 2009-02-12T10:04:16.857 に答える
10

私も似たような状況です。(多くの依存関係を持つ大規模なアプリ)。自動テストはほとんどありません。しかし、この問題を解決したいという大きな願望があります。そのため、新しいリリースごとにいくつかの問題に取り組む予定です。

新製品の最初のバージョンをリリースしようとしています。そして、最初の兆候は良好です。しかし、それは大変な作業でした。したがって、次のリリースでは、テスト プロセスを自動化する何らかの方法が必要です。そのため、すでに単体テストを導入しています。依存関係があるため、これらは実際の単体テストではありませんが、どこかから始める必要があります。

私たちが行ったこと:

  • コードの大部分がまだ手続き型であったため、よりオブジェクト指向のアプローチを導入しました。
  • ファイル間で物を移動しました。
  • 可能であれば依存関係を排除しました。

しかし、退職までチーム全体に十分な仕事を確保するために、要件のリストにはさらに多くの要件があります。

私は少し変わっているかもしれませんが、コードをクリーンアップするのは楽しいことです。単体テストを行わずにリファクタリングすることは、特に多くの副作用がある場合、危険な作業です。愚かな間違いを避けるために、ペアプログラミングを使用しました。そして、たくさんのテストセッション。しかし、最終的にはよりクリーンなコードになり、導入された新しいバグの量は非常に少なくなりました。

ああ、これは高価なプロセスであることを知っておいてください. 時間がかかります。そして、複数の問題に連続して取り組む傾向と戦わなければなりません。

于 2009-02-12T09:58:15.017 に答える
3

testcomplete を使用したことがないため、すべてにお答えすることはできませんが、いくつかはお答えできます。

1 - はい。回帰テストは価値があります。以前は機能していたものを壊したときにクライアントが戻ってきたとき、開発者としては非常に恥ずかしいことです。以前は機能していたすべての機能が引き続き機能することを確認することを常にお勧めします。

4 - Oracle には、データベースに復元ポイントを作成できるFlashbackと呼ばれるものがあります。テストが完了したら、この復元ポイントに戻ることができます。それを使用するスクリプトを作成することもできますFLASHBACK DATABASE TO TIMESTAMP (FEB-12-2009, 00:00:00);

于 2009-02-12T09:44:23.537 に答える
3

VMWare を使用して、テストの一部を分離することを検討しています。

保存されたスナップショットから開始できるため、一貫した環境とローカル データベースの状態を常に維持できます。

VMWare アクションはスクリプト化できるため、ネットワークの場所から最新のビルドを自動的にインストールし、テストを開始して、その後シャットダウンすることができます。

于 2009-02-12T13:27:13.547 に答える
3
  1. その価値はありますか?

おそらく。テストのセットアップと保守は大変な作業になる場合がありますが、テストがあれば、非常に簡単かつ一貫してテストを実行できます。プロジェクトが進化している場合、ある種のテスト スイートが非常に役立ちます。

  1. これはテストする良い方法でしょうか?

最初のステップとしては、適切な DUnit テスト スイートの方が優れていると言えます。ただし、テスト用に設計されていない大規模なコードベースがある場合、機能テストのセットアップは、GUI テストのセットアップよりもさらに大きな苦痛になります。

  1. テストの結果はデー​​タベース (Oracle) にあるはずですが、testcomplete でこれらの値 (複数のテーブルの複数のフィールド) を確認する簡単な方法はありますか?

TestComplete には ADO および BDE インターフェースがあります。または、VBScript で OLE インターフェイスを使用して、利用可能なすべてのものにアクセスできます。

  1. testcomplete で exe のコマンドライン パラメータを指定する方法はありますか?

はい。

于 2009-02-13T08:01:03.010 に答える
0

(古い) アプリケーションに単体テストを導入する方法の 1 つは、「データベースの開始」(Rich Adams が説明した「フラッシュバック」機能など) を使用することです。プログラム som unittest は、DUnit を使用して GUI を制御します。http://delphixtreme.com/wordpress/?p=181の「DUnit を使用した GUI テスト」を参照してください。

既知のデータセットを使用できるため、「開始データベース」に復元してテストを開始するたびに。

于 2009-02-12T10:24:52.160 に答える
0

すべての自動テストを実行するには、テスト データベースをセットアップする必要があります。テスト データベースの再設定を自動化する簡単な方法はありますか?

トランザクションを使用する: テストが完了したらロールバックを実行します。これにより、すべてが初期状態に戻ります。

推奨読書:

http://xunitpatterns.com/

于 2009-03-21T18:15:12.957 に答える