2

優れたソフトウェアアーキテクトなら誰でも、誰かが新しいプロジェクトを最初から構築するとき、最初は境界線(データベース、GUI、外部サービスなど)を持ち歩いてはならないことに同意するでしょう。実際、彼はソフトウェアの心臓部を独立して構築する必要があります。バックエンドは、アプリケーションへの単なる「プラグイン」と考えてください。

TDDと受け入れテストは、新機能ごとにそれを促進します。

  1. 機能の不合格の受け入れテスト(エンドツーエンド)を作成します
  2. いくつかの単体テストのおかげで、コード設計を推進して完了します
  3. 検収試験に合格するとすぐに終了します。

ただし、多くの記事では、受け入れテストは、GUI(ブラウザー(たとえば、Seleniumを使用)またはその他のインターフェース)を含む実際のエンドツーエンドのテストであると説明しています。

受け入れテストは、アプリケーションのHEARTに基づいており、境界に依存しないようにする必要がありますか?たとえば、GUIについて考える必要があります...:s

良い習慣は何ですか?機能ごとに2種類の受け入れテストを作成しますか?1つはビジネスロジック用で、もう1つはGUIが正常に機能することを確認しますか?

4

1 に答える 1

4

まず、SteveFreemanとNatPryceによるテストに基づいて、成長するオブジェクト指向ソフトウェアを読むことをお勧めします。これは私がこれまで読んだ中で断然最高のソフトウェアテストの本です。それの素晴らしいところは、作成者がクラスのようなダミーのユースケースやTDDを使用してメソッドCalculatorをテストすることに焦点を当てていないことです。add(int, int)これはばかげています。代わりに、Swingインターフェイス、XMPPを介したネットワーク接続、および非常に多くのビジネスロジックを備えた完全に機能するアプリケーションを構築します。それは私たちをあなたの質問に戻します。

上記の本の著者はさまざまな技術とツールを使用していますが、彼らは常にTDDの実践を続けています。単体テストの場合はを使用しますが、受け入れテストと統合テストの場合は、実際にはアプリケーション(GUI)とXMPPテストサーバーの起動を自動化します。

彼らは、テストとGUIを高度に分離することにより、GUIテストを試運転することに成功しました。ユーザーインターフェイス(Web、デスクトップ、SOAP Webサービスなど)をドライバーと呼ばれる抽象化の背後に隠す必要があります。テストは、などの高レベルのメソッドを使用してドライバーとのみ対話しますplaceOrder("Foo")。各ドライバー(BrowserDriverSwingDriver)は、それが何を意味するかを理解し、Webページを参照するか、ファットGUIのボタンをクリックします。

テストを変更せずに、基盤となるドライバーを変更するだけでGUIを変更できる場合は、正しく機能します。

も参照してください

于 2013-01-20T15:04:16.937 に答える