テストケースの網羅性を評価する基準をテスト・カバレッジ(テスト網羅率)と呼ぶ。テストの実施に当たっては,このテスト・カバレッジを事前に決めておく必要がある。
テスト・カバレッジにはモジュール・レベルの基準と,システム・レベルの基準がある。
モジュール・レベルの基準としては,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通りのテストケースとなり、これなら全件テストも現実的になってきた?
関数を分割するメリットがここにも出てくる。