1

そのようなifステートメントがある場合、私はそれを知っています...

if (x == y) {
   foobar++;
} else {
   if (x == z) {
     foobar++;
   }
}

100% のブランチ カバレッジを取得するには、4 つのブランチをトラバースする必要があります。外側の if - else から 2 つ、内側の if ステートメントから 1 つ、内側の if ステートメントに入らない場合にもう 1 つ。

しかし、このようなもののために...

if (x == y) {
   foobar++;
} else {
   while (x < z) {
     x++;
   }
}

100% のブランチ カバレッジを実現するには、まだ 4 つのブランチが必要ですか? つまり、else ステートメントから while ループに入ることは別の分岐としてカウントされませんか?

ありがとうございました。

4

1 に答える 1

5

まず第一に、if ループはありません。いわゆるif文です。

あなたの質問について: 最初の例には 3 つのブランチしかありません。1つ目ifは 2 つのブランチを作成します。内部でelseさらに 2 つのブランチが作成されますが、これらは you の子ブランチであるため、合計 4 つにはなりませんelse

  if
 /  \
1   else
     |
     if
    /  \
   2    3

ループの分岐範囲についてはwhile、少し複雑になります。理論的には、ループが実行される頻度または実行される頻度がわからないため、ループは無限の数の分岐を作成する可能性があります。ループのカバレッジを測定するための実用的なアプローチがいくつかあります。最も単純なものは、2 つのブランチを持つことです。ループ ブロックが実行される場所と実行されない場所。この場合、例にはまだ 3 つのブランチがあります。ループの 3 つの分岐を考慮する可能性もあります: 実行されていない、1 回実行されている、複数回実行されている。このようなカバレッジ測定を使用する場合、2 番目の例では 4 つの分岐があります。

于 2013-08-28T15:55:44.783 に答える