C1/C1/C2 カバレッジについて


■いつも忘れてしまうカバレッジの違いについて


C0/C1/C2

検査網羅率(テストカバレージ) ── どれだけテストしたか、の指標。

例:

void function(...) {
    if ( 条件A || 条件B ) {
      処理1
    } else {
     処理2
    }
    if ( 条件C ) {
      処理3
    } else {
      処理4
    }
}

C0: 命令網羅 ステートメント・カバレージ
通っていない処理がなくなればC0は100%となる。
この例では 処理1,2,3,4 を少なくとも1度通るべきであるということ。
つまり

  • 処理1, 処理3 を通るケース
  • 処理2, 処理4 を通るケース

のふたつ。

 

C1:分岐網羅 ブランチ・カバレージ
分岐の全組み合わせをテストすればC1は100%となる。
この例では

  • 処理1, 処理3 を通るケース
  • 処理1, 処理4 を通るケース
  • 処理2, 処理3 を通るケース
  • 処理2, 処理4 を通るケース

の4つ。

 

C2:条件網羅 コンディション・カバレージ
条件式の全組み合わせをテストすればC2は100%となる。
この例では、条件A,B,C があるので

  • 条件A = false, 条件B= false, 条件C= false となるケース
  • 条件A = false, 条件B= false, 条件C= true となるケース
  • 条件A = false, 条件B= true, 条件C= false となるケース
  • 条件A = false, 条件B= true, 条件C= true となるケース
  • 条件A = true, 条件B= DC, 条件C= false となるケース
  • 条件A = true, 条件B= DC, 条件C= true となるケース

の6つ。
※ (DC: Don't Care = どうでもいいということ)

実コードでは条件式の数がかなり大きくなると思われるので、
C2カバレッジは現実的ではないかも。

 


条件式が10個あったらC2を100%にしようとすれば、
最大1024通りのテストケースが必要となってしまう
しかしたとえば条件式5つずつの二本のコードに分割できるなら、
C2を100%にするには32通りをふたつで
64通りのテストケースとなり、これなら全件テストも現実的になってきた?

関数を分割するメリットがここにも出てくる。

 

ソフトウェアテスト入門 押さえておきたい<<要点・重点>>/著者不明
¥2,079
Amazon.co.jp