JAVA

テスト・カバレッジ(テスト網羅率)

テストケースの網羅性を評価する基準をテスト・カバレッジ(テスト網羅率)と呼ぶ。テストの実施に当たっては,このテスト・カバレッジを事前に決めておく必要がある。

テスト・カバレッジにはモジュール・レベルの基準と,システム・レベルの基準がある。

モジュール・レベルの基準としては,C0,C1,C2,C3kの4つがある。各モジュールのすべての命令文を少なくとも1回実行した場合は 「C0=100%」となる。すべての分岐を少なくとも1回実行した場合は「C1=100%」,すべての分岐命令における条件を少なくとも1回実行した場合 は「C2=100%」,すべてのループを指定された最大回数(k回)実行した場合は「C3k=100%」となる。単体テストではC1=100%を目指すの が現実的だ。

C1/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つ。

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

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

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