メインコンテンツへ
開発技術ソフトウェア開発

ホワイトボックステストのカバレッジ(網羅率)の種類に関する記述として、適切なものはどれか。

ア.命令網羅(C0)はすべての判定条件の真偽組み合わせを少なくとも1回実行することを目標とする。
イ.判定網羅(C1)は、プログラム中のすべての命令文を少なくとも1回実行することを目標とする。
ウ.条件網羅(C2)は各判定条件の部分条件(個々のbool式)が真・偽の両方になることを目標とするが、必ずしも判定網羅を包含しない。正解
エ.命令網羅(C0)を達成すれば、自動的に判定網羅(C1)と条件網羅(C2)も達成される。

解説

ホワイトボックステストは「プログラムの中身を見ながらテストする」方式。命令網羅はすべての行を通るだけ、判定網羅はすべての分岐を通る、条件網羅は複合条件の各部品を個別にチェックします。面白いのは「条件網羅≠判定網羅を包含しない」点です。

なぜ ウ が正解か

条件網羅(MC/DC等の厳密版の前身)は、複合条件式(A AND B)の各部分条件(A、B)が独立して真・偽になるテストケースを要求します。しかし「A=真、B=偽」と「A=偽、B=真」は個々の条件を真偽両方テストしますが、判定全体(A AND B)が偽にしかなりません。つまり条件網羅のみでは判定網羅(分岐の真側)を保証しない場合があります。

なぜ ア は間違いか

命令網羅(C0)はすべての命令文(行)を少なくとも1回実行することを目標とします。「すべての判定条件の真偽組み合わせ」は複数条件網羅(C3/MC-DC)の説明に近く、C0の定義として誤りです。

なぜ イ は間違いか

すべての命令文を少なくとも1回実行するのは命令網羅(C0)の定義です。判定網羅(C1)はすべての分岐(判定条件が真の場合と偽の場合)を少なくとも1回実行することを目標とします。C0とC1の定義を取り違えた誤りです。

なぜ エ は間違いか

命令網羅(C0)を達成しても判定網羅や条件網羅は達成されません。C0はすべての行を通るだけなので、if文をtrueのルートだけで通ってもC0達成です。C1を達成するにはfalseルートも必要です。網羅レベルはC0⊂C1⊂C2の関係ではなく、C0⊂C1 かつ C1⊄C2 が成立します。

出典: AI生成問題(学習用)