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


10

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

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

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

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

回答:


4

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

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

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

編集: OK、私はあなたが求めているものを取得します。答えは「はい」です。テスターの仕事は、テストデータを生成することではなく、単にアプリケーションをテストすることです。メンテナンスを容易にし、有効なデータが挿入されるようにスクリプトを構築する必要があります。テストデータがなければ、テスターはテストする必要がありません。ただし、テスト環境にアクセスできる場合、スクリプトを使用せずに手動でテストデータを挿入できない理由はわかりません。


たぶん私はユニットテストとテストデータに言及することによって私の質問を間違って述べました。検証は単体テストと同じではないことを理解しています。ここでの問題は、スクリプトを使用して作成しているテストデータを、UIを介して5分で作成できることです。プログラミングを知る必要のないアプリケーションにこのデータを挿入するには、テストケースに従うだけです。
クリスチャンP

@ christian.p質問の明確化に関する更新を確認してください。
AJC、2011年

だからあなたの解決策はスクリプトを放棄し、UIを介して手動でテストデータを追加することですか?P.Brian.Mackeyが提供した答えと、データをUIと結合することに対する彼の答えはどうですか?
クリスチャンP

@ christian.pええと、私はあなたがスクリプトを使うべきであることに同意します。しかし、正式なものや、あなたがしなければならないというルールはありません。スクリプトを使用してモックデータを生成する主な理由は、速度(自動化)とアクセス(テスト環境へのアクセス)です。アクセス権があり、手動で行う方が速くて簡単な場合は、アクセスできない理由はありません。(ただし、テストしたデータのログを保持してください)。
AJC

すべてのテスターに​​は独自のテスト環境があり、テスターは1日に数回データベースを完全に削除しているため、手動でテストデータを追加することは現実的ではありませんが、テスト用のデータを追加するよう丁寧に依頼することもできます。
クリスチャンP

6

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

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

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

最後に、TDDを調べて、チームで機能するかどうかを確認します。TDDは、すべてのコードがテスト可能であること(最初にテストを作成するため)を保証し、テストに合格するだけの十分なコードを作成して(エンジニアリングを最小限に抑えて)無駄のない状態を保つのに役立ちます。

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


「テストデータを単純に変更するとバグが発生する」-アプリケーションの問題ではありません-データが有効な場合、アプリは正常に動作します(無効なデータを手動で追加することはできません)。 。ここでの問題は、無効なテストデータがそのデータを処理しようとしたときにエラーを生成する可能性があることです。テストデータもテストする必要がありますか?
クリスチャンP

赤いニシンの誤りにつまずかないでください。テストデータにバグが発生するという事実は、全体として別の問題です。テストの削除は修正ではなく、「政府の統治」もまったく別のことです。問題はコードです。あなたは物事を壊さないテストを書くことができないと私たちに言っているので、それはテスト可能ではありません。そのため、コードを改善する必要があります。
P.Brian.Mackey

多分あなたは私の質問を誤解しました。機能する単体テストがあり、作成するすべての新しい機能には単体テストがあります。合格していないテストを削除したり、テストをまったく作成したりしないことはお勧めしません。手動テスターが同じことをしているので、データベースでモックデータを作成するためにスクリプトを使用しないことをお勧めします。
Christian P

「スクリプトでテストデータを維持する意味が本当にわかりません」<-テストのサポートを中止するということです。古いテストは削除されません。その悪い考え。再現性を低下させ、UIに自分自身を結び付けます。UIは、テストしようとしているものの一部であり、変化に適応できるようになります。UIから切り離してください。データの自動化を維持します。
P.Brian.Mackey、2011年

しかし、無効なモックデータの問題にどのように取り組むのでしょうか。データベースのモックデータを作成し続ける場合、モックデータに問題がないかどうかをどのように確認しますか?ビジネスルールがその値X = 2を必要とし、データベースがX = 100を受け入れる場合、ビジネスルールが複雑な場合にテストデータの整合性をチェックする方法は?
クリスチャンP

1

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.