それはシステムへの信頼の高いレベルを確保するのにかかるように私はできるだけ多くのテストケースを持っているでしょう。
テーブル、ルール、コード行などの数は実際には重要ではありません。
ドメインオブジェクトとビジネスルールが正しく実行されるためには、適切な単体テストが必要です。クエリが適切に実行されるようにするためのテストが必要です(これはより困難です)。
ソフトウェアを使用してパスのテストケースを作成することもできます。つまり、ここをクリックしてこのページを取得し、そこをクリックしてフィールドを編集し、ページを保存して戻る...このタイプは、通常テストが記録され、ページが変更されたときに再記録する必要があります。 :フィールドが追加または削除されます)。
一般的に言えば、のカバレッジについては、テストの数より多いです。あなたのテストでは、アプリケーションの機能の多くがの実現可能性をカバーするようにしたいと考えています。私は可能ではないと言いました。テストケースではアプリケーション全体(100%)をカバーすることができますが、小さな変更、バグ修正などのために、それらのテストを再コードする必要があります。これは、成熟したアプリにとってより望ましいものです。任意のシステムのためにあなたは、彼らはユニットテストの変更/固定時の法外な金額を費やすとして、あなたの開発者やQAチームその方法を骨抜きにしたくない、新しいアプリを...
について、あなたは簡単のように過ごすことができシステム自体を行うときに自動化されたテストを開発するのに多くの時間を費やします。いくつかのケースでは、さらに。
私たちのグループでは、単体テストがたくさんある傾向があります。しかし、システムを通るパスをテストするために、特定のエリアが「メンテナンス」タイプのモードに移行したときにのみ、パスをテストします。私たちは、その地域ではかなりの間変化はほとんどないと考えています。パステストは誰もそれを断念しないようにすることだけです。
UPDATE:
は少しさらに行く:ここでのコメントは、以下に私を導いたのは、コードの1つの小片を調べてみましょう:それの顔に
Int32 AddNumbers(Int32 a, Int32 b) {
return a+b;
}
ます単一のテストで逃げることができます:
Int32 result = AddNumbers(1,2);
Assert.Equals(result, 3);
しかし、それだけでは不十分です。
Int32 result = AddNumbers(Int32.MaxValue, 1);
Assert.Equals(result, (Int32.MaxValue+1));
ここではエラーが発生しました。別のものがあります:
Int32 result = AddNumbers(Int32.MinValue, -1);
Assert.Equals(result, (Int32.MinValue-1));
したがって、少なくとも3回のテストが必要な非常に簡単な方法があります。任意の結果を与えることができるかどうかを確認するためのイニシャル、次に境界チェックのための2。これは本質的に2行のコード(メソッド定義と1行計算)の3つのテストです。
あなたのコードはより複雑になるにつれて、物事は本当にdicey取得:DIVIDEBYZERO:
Decimal DivideThis(Decimal a, Decimal b) {
result = Decimal.Divide(a,b);
}
このわずかな変化は境界を越えてさらに別の例外条件を紹介します。これで、2行のコードに対して最大4つのテストが必要になりました。
さて、それを少し単純化してみましょう。ここ
String AppendData(String data, String toAppend) {
return String.Format("{0}{1}", data, toAppend);
}
当社のテストケースは次のとおりです。
String result = AppendData("Hello", "World");
Assert.Equals(result, "HelloWorld");
本当に必要がない他の人と、コードブロックのためのただ一つのテストケースだこと。
これは何を意味していますか:まず2行のコードで、1〜4個のテストケースが必要になることがあります。あなたは50k行について言及しました...その論理を使用すると、50,000〜200,000のテストケースが必要になります...
もちろん、人生はそれほど単純ではありません。あなたが持っている50k行のコードでは、入力が非常に制限された大きなコードブロックが存在するでしょう。たとえば、住宅ローン金利計算機は3つのパラメータをとり、1つの値(APR)を返します。コードそのものは100行ほど走っているかもしれません(しばらく私と一緒に働いています)。このためのテストケースの数は、丸め処理を適切に行うことを確実にするための線に沿ったエッジケースによって決定されます。
だから、5つのケースがあるとしましょう。これによって、20行のコード= 1件になります。 50k行を計算すると、2,500テストケースになる可能性があります。明らかに私たちが上で予想したよりもはるかに小さい。
最後に、別のシワをミックスに送ります。一部のテストシステムでは、データファイルからの入力とアサーションを処理できます。私たちが最初に検討したのは、テストしたい各パラメータの組み合わせのための行を持つデータファイルを持つことができるということです。このシナリオでは、3つ(またはそれ以上)の可能な条件をカバーするために1つのテストケースしか必要としません。
テストケースは、(擬似コード)のようになります。その機能により
read input file.
parse expected result, parameter 1, parameter 2
run method
assert method result = parsed result
repeat for each line of the file
、我々はダウンあたりシナリオ 1のテストケースにしています。私はメソッドごとに1と言っていますが、実際にはほとんどのメソッドはほとんどスタンドアロンではなく、多数のメソッドが他のメソッドを明示的にテストして暗黙的にテストされる可能性があります。したがって、独自の個別テストは必要ありません。
これは、これに私をリード:あなたのコードベースを完全に理解することなく、テストケースの右側数を決定することは不可能です。 UIレベルの5つのケースでは、テストの複雑さによっては完全なカバレッジに十分な場合があります。それは何千もかかるかもしれません。したがって、コードカバレッジに基く方がはるかに優れています。コードの何パーセントと分岐ロジックがテストしていますか?
それぞれが3つのテストを持つ合計420のテストケースが必要です。これを正解にして、これを投票してChris Livelyの答えを受け入れてください。 ;-) –
調査の価値のあるトピックだと思うので+1しますが、雇用マネージャーがこれを尋ねると、a)彼は実際にテストを理解していないか、b)それはトリック質問です「コードカバレッジ」というフレーズを含むレスポンスを引き出すように設計されています。私は空腹のコンサルタントであることを理解していますが、このタイプの質問には良い整数の答えはありません。 –
誰も私の投稿を実際に読んだことはないと思う。私は正確な数字ではなく、ボールパークの数字を求めています。また、コードカバレッジケースではなく、基本的なテストケースについて質問しています。クライアントがあなたにいくつかの合理的な見積もりを求めていて、それを思い付くことさえできないなら、あなたは戻ってくることはありません。あなたが車を買っていて、セールス・マンがあなたにコストの球場を知らせることさえできないと想像してください。あなたはどこかに行くだろう。 –