2009-05-25 4 views
0

ブランチカバレッジを100%とすると想定されるテストケースを作成する場合、2つのブランチをカバーするケースと、それをカバーするケースを持つことは問題ありません。ブランチカバレッジ

注:コードには3つのブランチしかないと仮定しています。

編集:3つの分岐は、コードの本体内で互いに独立した3つの基本的な文を意味します。例えば

input (x, y) 
if (x<0) 
    something 
if (x==y) 
    something 
if (x > y) 
    something 
output (x) 

I持って最初の分岐と他の二つの枝

+0

これは、例を使って答えるのがはるかに簡単です。そうでなければ、異なる人が「3つの枝」を異なる方法で解釈するかもしれません。 3つのオプション? 3つの分岐点にそれぞれ2つのオプションがありますか? –

+0

私はそれが '枝'によって、あなたが '円弧'と同じことを意味すると仮定します。 1つのエントリポイントと1つの出口ポイントしか持たない機械命令の線形シーケンス。 –

+0

実際にx、y、何かの場合は、 '何か'がxやyを変更できるかどうかを調べるのが面白いです。その場合は、おそらく2つの 'somethings'もちろん、これは実際の例ではありませんが、私はテスタが持つべき考え方を実証したいだけです。 –

答えて

2

100%の分岐カバレッジをカバーして一つのテストケースをカバーして一つのテストケース?そのようなものを求めている人は、実世界のテストカバレッジ経験を持っていますか?私の経験上、合理的に複雑なプロジェクトの場合、75-80%コードと約60-70%の支店範囲を得ることが最善の方法です。これらの数字は通常、未加工の分析前の数値です。 Asserts、デフォルトのスイッチケース、「徹底的な防御」コードパスなどのように、到達不可能なスニペットが排除された後、それらは上がります(~92-95%のコードと80-85%の分岐)。 あなたの質問については、テストケースが少なくて済みます。テストには、開発するだけでなく、障害を実行して分析するための時間も必要であることを忘れないでください。テストスイート全体が完了するまでに4日待って初めて待ってから、テストケース数を最小限に減らしてカバレッジに自信を持たせるという価値をすぐに知ることができます。

+0

基本的には、基本的には、より良いケースが少ないほど、あなたは有効なポイントだと理解しましたが、現実の世界ではないので、この状況には当てはまりません。それは私の方法で投げられた理論的な質問です。私は「100%カバレッジ!あなたは夢中だ」と答えることはできません。-_- –

+2

私の答えは厳密に実用的なものでした。実世界では、テストを開発して実行するには問題はなく、実践するとすぐにテスト行列の指数関数的な爆発が逃げることはできません。ディスカッションが学術的なものであれば、誰かが「しかし、それはすべての可能なケースをカバーしているわけではない」という議論を勝ち取ることができます、あなたの貴重な入力に感謝して、あなたに話をしてください... –

3

個人的には、コードの動作に焦点を当てます。このように、3つのテストがあるべきであるようにコードを実行するための3つの異なる可能な方法が存在する。

このように考えると、2つのブランチのいずれかが壊れても、テストはまだ実行されています(他のブランチがまだ動作しているため)。理想的ではない。

はい、それは時間がかかりますが、場合によってはそれは価値があります。すべて100%?極端なレベルにはならないかもしれません。

+0

良い点、ありがとう。 –

+0

もう一度、ブランチの1つが失敗した場合、テストが失敗することはできませんでしたか?分岐が失敗したテストcoudlレコード? –

+0

あなたのテストには、それがカバーしているものの真の意図を隠すかもしれない追加のロジックが含まれています。 –

4

テストは製品に関する質問です。 1つの(書かれた)ブランチに対して1つのテストを行うというアイデアは、役に立つかもしれません。

私は場合は、

入力(x、y)は
場合(X < 0)

何か(のx == y)の場合

何かを与える例についていくつか質問があります(X> Y)
何か
出力(X)

xが0より大きい場合はどうなりますか? となりますか? xがyより小さければ何が起こるはずですか?何か?何もない?

ここでは、コード(および分岐)(および状態)のカバレッジは素晴らしいアイデアです。しかし、線や枝や条件を「覆う」ことは何を意味しますか?プログラムは、が動作することを確認してください - つまり、クラッシュすることなく与えられた行/分岐/条件を実行しますか?またはそのプログラムになることを確認することですか?

---マイケルB.

関連する問題