対象試験と出題頻度
条件網羅は、基本情報技術者・応用情報技術者の午前問題で出題されるテーマです。
ホワイトボックステストのカバレッジ基準を比較する問題として定番化しており、「命令網羅」「判定条件網羅(分岐網羅)」「複数条件網羅」との違いを正確に区別できるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
情報処理試験を勉強していると、「条件網羅って分岐網羅と何が違うの?」と混乱しがちです。名前が似ていて区別がつきにくい部分なので、ここで一気に整理します。
条件網羅(Condition Coverage)とは、一言で言うと
「判定文の中の個々の条件が、真と偽の両方を少なくとも1回ずつ取るようテストケースを設計する基準」
のことです。
イメージとしては、「複数のスイッチがある照明の動作確認」です。
「玄関スイッチ」と「廊下スイッチ」が両方ある照明で、それぞれのスイッチをON・OFFしてみるイメージ。
最終的に電気が点いたかどうか(=判定結果)よりも、「個々のスイッチが両方の状態を試されたか」だけに注目する考え方です。
📊 条件網羅の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Condition Coverage |
| 分類 | ホワイトボックステストのカバレッジ基準 |
| 網羅対象 | 判定文を構成する個々の条件の真偽 |
| 別名 | 条件カバレッジ/C2(呼び方は流派による) |
解説
ソフトウェアテストでは、「どこまでテストすれば十分か」を決める物差しが必要です。この物差しがカバレッジ基準で、条件網羅もその一種です。
判定文に複数の条件が含まれるケース(例:if (A and B))では、判定全体の真偽だけを見ると、個々の条件のバグを見落とす危険があります。
「Aは常にfalseだったけれど、Bがtrueなら全体もtrueになるパターン」を一度も試さない、といった抜けが起きるわけです。
この見落としを防ぐために考案されたのが、判定文の構成要素である「個別の条件」一つひとつに着目する条件網羅です。
具体例で理解する
次のソースコードで、条件網羅を満たすテストケースを考えます。
if (A == true and B == true) {
// 処理X
} else {
// 処理Y
}
条件網羅では、「条件A」と「条件B」のそれぞれが真・偽の両方を取れば達成です。例えば次の2ケースで満たせます。
| ケース | 条件A | 条件B | A and B | 通る経路 |
|---|---|---|---|---|
| ① | 真 | 偽 | 偽 | 処理Y |
| ② | 偽 | 真 | 偽 | 処理Y |
▲ A・Bともに真と偽の両方が登場 → 条件網羅は達成
ここで注目してほしいのが、2ケースとも判定全体は「偽」で、処理Xには一度も到達していないという事実です。
条件網羅は個々の条件にしか目を向けないため、判定結果のパターン(真/偽の両方)を保証しません。これが落とし穴です。
他のカバレッジ基準との比較
試験で問われるのは、ほぼこの比較表に集約されます。
| 基準 | 網羅すべきもの | 厳しさ |
|---|---|---|
| 命令網羅 (C0) |
すべての命令を最低1回実行する | 弱い |
| 判定条件網羅 (分岐網羅 / C1) |
判定文全体の結果が真・偽の両方を取る | 中 |
| 条件網羅 | 個々の条件が真・偽の両方を取る | 中 |
| 判定条件/条件網羅 | 上の2つを同時に満たす | 強い |
| 複数条件網羅 (C2) |
条件の真偽の組合せをすべて網羅する | 最強 |
⚠️ 重要な落とし穴:条件網羅は「判定条件網羅(分岐網羅)」を必ずしも包含しません。前述の例(A=真/B=偽、A=偽/B=真)のように、判定全体が常に「偽」のままでも条件網羅は達成できてしまうためです。
では、この用語が試験でどのように出題されるか見ていきましょう。
試験ではこう出る!
条件網羅は、FE・APの午前問題で「カバレッジ基準を満たすテストケースの組合せを選ばせる」形式で繰り返し出題されています。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H30秋 午前 問49 |
複合条件 (A>6) and (B=0) に対し、条件網羅を満たすテストデータの組合せを選ぶ問題。 |
・各条件が真偽の両方を取れば正解 ・判定結果の真偽までは問わない |
| AP H29秋 午前 問49 |
命令網羅・判定条件網羅・条件網羅・複数条件網羅の説明文を選ぶ問題。 | ・「個々の条件式が真・偽となる場合を網羅」が条件網羅 ・命令網羅・分岐網羅と取り違えやすい |
| AP H22春 午前 問38 |
条件網羅と判定条件/条件網羅の違いを問う問題。 | ・条件網羅では分岐の真偽が網羅されないことがある ・両方同時に満たすのが「判定条件/条件網羅」 |
📝 IPA試験での出題パターン
パターン1:「テストデータの組合せを選べ」
FE H30秋のように、ソースコードと複数のテストデータ表を提示し、条件網羅を満たす最小の組合せを選ばせる形式。各個別条件について「真のケース」と「偽のケース」が両方含まれているかをチェックすれば解ける。
パターン2:「説明文を選べ」
AP H29秋のように、4つのカバレッジ基準の説明が並び、条件網羅に該当する文を選ぶ形式。キーワードは「個々の条件式の真偽」。命令網羅(命令の実行)、判定条件網羅(判定全体の真偽)と混同しないよう注意。
頻出のひっかけ:「条件網羅を満たせば判定条件網羅も満たす」という選択肢は誤り。判定全体が常に同じ結果のままでも条件網羅は成立するため、両者は包含関係にない点が問われる。
試験ではここまででOKです。MC/DC(改良条件判定網羅)は応用情報の上位資格で扱う領域なので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. ホワイトボックステストにおける「条件網羅」の説明として、最も適切なものはどれでしょうか?
- A. 判定文を構成する個々の条件式について、それぞれが真となる場合と偽となる場合を、少なくとも1回ずつテストする基準。
- B. プログラム中のすべての命令文を、少なくとも1回は実行するようにテストケースを設計する基準。
- C. 判定文全体の結果が真となる場合と偽となる場合の両方を、少なくとも1回ずつ実行する基準。
正解と解説を見る
正解:A
解説:
条件網羅は、判定文に含まれる個別の条件式それぞれが真・偽の両方の値を取るようテストケースを設計する基準です。判定全体の結果ではなく「個々の条件」に注目するのが特徴です。
選択肢Bは命令網羅(C0)の説明です。命令網羅はすべての命令を最低1回実行することだけを求める最も弱い基準であり、条件式の真偽までは保証しません。選択肢Cは判定条件網羅(分岐網羅/C1)の説明です。こちらは判定文全体の結果に着目するもので、個々の条件の真偽を網羅する条件網羅とは観点が異なります。
よくある質問(FAQ)
Q. 条件網羅は分岐網羅より厳しい基準ですか?
一概にそうとは言えません。条件網羅と判定条件網羅(分岐網羅)は包含関係になく、互いに独立した観点です。条件網羅を満たしても判定全体の真偽が片方しか出ないケースがあり、逆に分岐網羅を満たしても個々の条件のすべての真偽が試されないケースがあります。両方を同時に満たすには「判定条件/条件網羅」を採用する必要があります。
Q. 複数条件網羅とは何が違いますか?
複数条件網羅は、判定文に含まれる条件の真偽の組合せをすべて試す最も厳しい基準です。条件が2つなら2²=4通り、3つなら2³=8通りのテストが必要です。一方、条件網羅は「個々の条件が真・偽の両方を取る」だけでよいため、条件が2つでも最少2ケースで達成できます。網羅性は複数条件網羅の方が圧倒的に高い反面、テスト工数が指数関数的に増えるトレードオフがあります。
Q. 短絡評価(ショートサーキット)の言語では条件網羅はどう扱いますか?
JavaやC言語の &&・|| のように左の条件で結果が確定すると右が評価されない言語では、テスト設計時に注意が必要です。例えば A && B でAが偽なら、Bがどんな値でも実際には評価されません。このため条件網羅を厳密に達成するには、Aを真にしたうえでBの真偽を切り替えるテストケースが必須となります。実務ではカバレッジ計測ツール(JaCoCo、gcov など)が短絡評価を考慮した条件カバレッジを集計してくれます。
Q. 実務ではどのカバレッジ基準を採用するのが一般的ですか?
業務系システムではC0(命令網羅)80%以上、C1(分岐網羅)70%以上をリリース基準とするプロジェクトが多数派です。航空・医療・自動車など人命に関わる組込み系では、国際規格(DO-178C、ISO 26262 など)でMC/DC(改良条件判定網羅)が要求されるケースもあります。条件網羅単独で品質基準とする現場は少なく、判定条件/条件網羅やMC/DCに発展させて使うのが実態です。