2017-06-10 7 views
0

テストピラミッドでは、エンドツーエンドテストよりも単体テストが多くなるはずです。Webアプリケーションでユニットテストとエンドツーエンドテストの比率を決定する方法は?

しかし、適切な比率を得るにはどうすればよいですか?

エンド・ツー・エンド・テストが49%、ユニット・テストが51%であれば良いですか?

私は、Webアプリケーションのapiエンドポイントがcodeceptionとphpunitでテストされていることに注意しています。

また、10%のエンドツーエンドテストと90%の単体テストを目指してください。

これらのパーセントは、エンドツーエンドテストでx%をカバーした場合、単体テストで同じコードをカバーしないことを意味します。

しかし、私はMartin Fowler氏は、ここに書き込んとして多分私達は、彼らはテストをエンドツーエンドでカバーされている場合でも、ユニットテストと同じラインをカバーする必要があり、間違っている可能mihgt:

https://martinfowler.com/bliki/TestPyramid.html

私はいつも高レベルのテストは、 テストディフェンスの第2ラインとしてそこにあると主張する。高水準のテストでエラーが発生した場合は、機能コードにバグがあります。 には、ユニットテストである がありません。したがって、私は、 で公開されているバグを高レベルのテストに修正する前に、そのバグをユニットテストで再現することをお勧めします。その後、 ユニットテストでは、バグが確実に死んでいることが保証されます。

開発時間を節約するためにエンドツーエンドテストでカバーされている場合、通常はユニットテストで同じコードをカバーしません。

単体テストで同じコードを記述する必要がある場合は、できるだけエンドツーエンドではなく、単体テストでカバーする必要があるため、少なくとも1つのAPIエンドポイントの基本呼び出しをカバーする必要があることを意味します。

答えて

0

テストでは、同じコードをカバーしていても、目的が異なります。それらの比率は特に意味がありません。

ユニットテストは個々の機能ユニットをカバーします。エンドツーエンドのテストは論理フローをカバーします。単体テストは、分離されたコードが期待通りに機能することを示しています。フローテストは、コードがアプリケーションとして一緒に機能することを伝えています。

両方でカバレッジを最大限にすることを目指してください。単体テストですべてのコードをカバーし、すべてのフロー(コードの大部分を占める)をカバーするフローテストを行うことを目指してください。

本当に、それは完全にあなたのアプリケーションに依存しています。経験則として、フローテストよりも少なくとも10倍以上の単体テストが期待されます。どちらもコードベースの100%カバレッジに近づいているはずです。しかし、私が言ったように、私はそれが意味のある基準だとは思わない。

+0

約100%カバレッジ:データベースクエリテストを含めるか?たとえば、条件がビジネスロジックの場合です。しかし、条件に合致しない場合は返されないことをカバーするのに時間がかかります。次に、コードが変更され、以前に削除された条件が削除されます。バグは導入されますが、テストによって表示されません。なぜなら、新たに導入されたconditiinによって項目が見つからず、テストがうまくいくと思うからです。 –

+0

エンドツーエンドのテストではデータベースを使用する必要があります。私はハード/不可能でほとんどの場合に多くの価値を与えないので、単体テストDBクエリーに傾向はありません –

0

ターゲットを設定すると、100:1の比率になります。もちろん、プロジェクトは異なり、プロジェクトの段階も重要です。

私の経験則は、ユニットテストでロジックをカバーすることができれば、ユニットテストでカバーする必要があります。マーティン・ファウラーとは、ユニットテストで論理をカバーすることができれば、それではシステムテストを書いているのはなぜですか?

  • より高いレベルのテストは、ロジックが
  • これを起動されていることを確認ロジックをチェック

    • ユニットテスト:

      あなたは2つのカテゴリにそれらを分割することができます書くためにどのテストを見つけ出すために、ロジックは最小限のハイレベルテストの数を維持します。システムテストが書かれている場合は、単体テストを書くことができないため、書かれています。

      しかし、ユニットとシステム(e2e)のテストの他に、コンポーネント間(a.k.a統合)のテストもあります。彼らは(それはユニットではない)アプリの大きなチャンクを初期化しますが、アプリ全体が実行されている必要はありません(システムではありません)。多くの小切手はこのようにすることができ、システムテストよりもずっと速く、信頼性が高いです。

      this articleで実際にこのロジックをどのように適用できるかを確認できます。

    関連する問題