各条件式の真と偽の両方を実行することを確認するテスト網羅基準。
条件網羅(コンディションカバレッジ)とは、複合条件(=ANDやORで複数つないだ条件)を構成する個々の条件式について、それぞれ真と偽の両方を最低1回ずつ実行することを目指すテスト基準です。プログラムの内部構造を見て設計するホワイトボックステストの一種です。
身近な例で考えると、テーマパークの入場ゲートのチェック項目に似ています。「年齢制限を満たすか」「チケットを持っているか」という各チェックを、満たす場合・満たさない場合の両方できちんと試しておく、というイメージです。
上のツールで▶ボタンを押すと、「age >= 18」と「hasTicket」の2つの条件について、真・偽がそれぞれ実行されて条件網羅が100%になる流れを確認できます。
分岐網羅は「分岐(条件式全体)が真になるルートと偽になるルートの両方を通る」基準、条件網羅は「複合条件を構成する個々の条件の真偽をそろえる」基準です。注目するレベルが違います。
| 項目 | 分岐網羅 | 条件網羅 |
|---|---|---|
| 注目する対象 | 分岐(式全体)の真偽 | 個々の条件の真偽 |
| 例での網羅 | 合格ルート/不合格ルート | a の真偽・b の真偽 |
| 包含関係 | 必ずしも条件網羅を満たさない | 必ずしも分岐網羅を満たさない |
重要なのは、条件網羅を満たしても分岐網羅を満たすとは限らないという点です。たとえば (a真,b偽) と (a偽,b真) の2件は各条件の真偽をすべて満たすので条件網羅100%ですが、AND条件ではどちらも式全体は偽になるため、真ルートを一度も通らず分岐網羅は満たしません。観点が別物だと意識しましょう。
条件網羅を満たす最小のテストケースを考える問題はよく登場します。条件式 if (a AND b) について、a・b それぞれの真・偽をすべて満たす組合せを探してみましょう。
ポイントは次のとおりです。
・各条件は真・偽の2通り:条件数 × 2 が網羅すべき総数
・組合せの全パターンは不要:a・b で4通りある組合せをすべて試す必要はない
・最小ケース数は変わる:1件のテストで複数条件の真偽をまとめて回収できれば少なく済む
上のツールの計測のしかたで、「網羅済みの真偽値 ÷ 全真偽値(4)」の割り算が条件網羅率になる様子を確認できます。