web-dev-qa-db-ja.com

テストデータが必要ですか、それとも単体テストと手動テストに依存できますか?

現在、中規模/大規模のPHP/MySQLプロジェクトに取り組んでいます。 PHPUnitとQUnitでユニットテストを行っており、アプリケーションを手動でテストする2人のフルタイムテスターがいます。テスト(モック)データは現在、SQLスクリプトを使用して作成されています。

テストデータ用のスクリプトの管理に問題があります。ビジネスロジックはかなり複雑で、テストデータの1つの「単純な」変更によって、アプリケーションにいくつかのバグが発生することがよくあります(これは実際のバグではなく、無効なデータの産物です)。私たちは常にテーブルを作成して変更しているため、これはチーム全体にとって大きな負担になっています。

UIを使用して約5分ですべてをアプリケーションに手動で追加できるため、スクリプトでテストデータを維持する意味は本当にわかりません。私たちのPMは同意せず、テストデータで展開できないプロジェクトがあることは悪い習慣であると述べています。

テストデータを含むスクリプトのメンテナンスを中止し、テスターがデータなしでアプリケーションをテストできるようにする必要がありますか?ベストプラクティスは何ですか?

10
Christian P

2つの異なる概念が混在しています。 1つはverificationで、これは単体テストとピアレビューに基づいています。これは、テストデータがなくても開発者自身が行うことができ、その目的は、一連の要件が満たされていることを確認することです。

2つ目は検証で、これはQA(テスター)が行います。テスターはアプリケーションのプログラミングに関する知識を必要とせず、その意図されたユースケースのみを持っているため、このステップではテストデータが必要です。その目的は、アプリケーションが本番環境で意図したとおりに動作することを検証することです。

どちらのプロセスも、顧客に高品質の製品を提供するために重要かつ必要です。単体テストだけに依存することはできません。理解する必要があるのは、テストデータを処理して有効であることを確認するための信頼できる方法です。

編集:わかりました。答えはイエスです。テスターの仕事は、テストデータを生成することではなく、単にアプリケーションをテストすることです。メンテナンスが簡単になり、有効なデータが挿入されるようにスクリプトを作成する必要があります。テストデータがないと、テスターはテストする必要がありません。ただし、テスト環境にアクセスできる場合の場合、スクリプトを使用せずに手動でテストデータを挿入できない理由はわかりません。

4
AJC

はい、単体テストとデータのモックアップを用意することがベストプラクティスです。プロジェクトマネージャーは正しいです。テストデータで「単純な」変更を行うとバグが発生することが多いため、それが問題の核となります。

コードを改善する必要があります。そうしないと(テストは必要ないと言って)修正ではなく、単に 技術的な負債 を追加するだけです。破損しないとユニットを識別できないのが問題なので、コードをより小さなテスト可能なユニットに分割します。

リファクタリングを開始します。改善を小さくして、管理しやすくします。神のクラス/方法のようなアンチパターンを探してください。DRY、単一の責任などに従っていません...

最後に、 [〜#〜] tdd [〜#〜] を調べて、チームで機能するかどうかを確認します。 TDDは、すべてのコードがテスト可能であることを保証し(最初にテストを作成するため)、テストに合格するのに十分なコードを作成することによって lean を維持するために適切に機能します(エンジニアリングを最小限に抑えます)。

一般に、一連の複雑なビジネスロジックプロセスが一連のデータを生成する場合、これをレポートと見なします。レポートをカプセル化します。レポートを実行し、結果のオブジェクトを次のテストへの入力として使用します。

6
P.Brian.Mackey

これは非常に一般的な問題であり、非常に難しい問題でもあります。データベース( [〜#〜] hsqldb [〜#〜] などのメモリ内データベースも含む)に対して実行される自動テストは、通常、低速で非決定的であり、テストの失敗のみであるためコードまたはデータのどこかに問題があることを示します、それらはあまり有益ではありません。

私の経験では、最良の戦略はビジネスロジックの単体テストに焦点を当てることです。コアドメインコードをできる限りカバーするようにしてください。この部分を正しく行うことは、それ自体が非常に困難ですが、自動テストの費用対効果が最も優れた関係を実現できます。永続層については、私は通常、自動テストに費やす労力を大幅に減らし、専任の手動テスターに​​任せています。

しかし、永続化テストを自動化したい(または必要がある)場合は、 Growing Object-Oriented Software、Guided by Tests 。この本には、永続性テストに特化した章全体が含まれています。

1
Otavio Macedo