🐸

すぐ忘れるカバレッジ

2022/12/30に公開

0.概要

ソフトウェアテストの論理網羅の話です。
論理網羅は4種類が有名ですが記憶に残らず、何度もググってしまいます。

本記事は、論理網羅の違いを記憶に定着させるため、下記の観点で並べて比較します。

  1. 略語、英語、日本語の対応
  2. 短いサンプル
  3. 包含関係

同じ症状をお持ち方へ処方箋となれば幸いです。

1.略語、英語、日本語の対応

略語 英語名 日本語 基準
C0 statement coverage 命令網羅 全ステートメントを少なくとも1回実行
C1 decision coverage 判定条件網羅 判定結果が少なくとも一度ずつ実行
C2 condition coverage 条件網羅 各条件が少なくとも一度ずつ実行
MCC multiple-condition coverage 複数条件網羅 各条件のすべての組合せを実行

2.短いサンプル

以下の関数のテストケースを考えてみます。

void Func(bool a, bool b)
{
  if (a || b)
    printf("hello\n");
}

入力a,bの全ての組合せは以下です。

id a b
0 F F
1 F T
2 T F
3 T T

この例ではdecision(判定)はa || bを意味し、condition(条件)はaおよびbを意味すると考えれば、C0、C1、C2、MCCの最小テストケースはそれぞれ以下となります。

最小テストケース
C0 id=1(id=2でも可。id=3でも可)
C1 id=0,1(id=0,2でも可。id=0,3でも可)
C2 id=0,3(id=1,2でも可)
MCC id=0,1,2,3

3.包含関係

一般的に最小テストケースの包含間関係は、下記のようになります。

C0 C1 C2 MCC
C0 - Yes Yes Yes
C1 No - No Yes
C2 No No - Yes
MCC No No No -

表の読み方は、横軸のテストケースは縦軸のテストケースを含むか です。

例えば表中にある太字のNo(2行3列目)は、C2のテストケースはC1のテストケースを完全には含まないと読みます。

4.まとめ

C0、C1、C2、MCCの違いを簡単にまとめました。

今回紹介しなかったその他の網羅基準に、MC/DC(Modified Condition/Decision Coverage)あり、バグが人命にかかわるような高い安全性が求められるソフトウェアで利用されるようです。

5.参考文献

[1] Gelord J.Myers, ソフトウェアテストの技法第二版, p44-p52

[2] テキサス大の宿題答案

Discussion