命令網羅(C0)はホワイトボックステストの中で最も基本的な網羅基準であり、基本情報技術者・応用情報技術者試験で繰り返し出題されています。本記事では、命令網羅の意味と他の網羅基準との違いを、フローチャートを使った図解で整理します。
対象試験と出題頻度
命令網羅は、基本情報技術者(FE)・応用情報技術者(AP)の午前問題で出題されるテーマです。
ホワイトボックステストの網羅基準として、分岐網羅(C1)・条件網羅(C2)との違いを区別できるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
テスト技法を勉強していると、「命令網羅・分岐網羅・条件網羅って似た言葉が並んで、結局どれがどれ?」と混乱しがちです。
命令網羅(Statement Coverage / C0)とは、一言で言うと
「プログラム中のすべての命令を、最低1回は実行するようにテストケースを設計する網羅基準」
のことです。
イメージとしては、「部屋の電気を全部1回はつけて確認する」作業です。
家中の電球が切れていないかチェックするとき、すべての部屋でスイッチを1回ずつ押せば確認できます。スイッチを2通りの組み合わせで押す必要はありません。
命令網羅も同じで、「すべての命令を1回は通す」だけを保証するシンプルな基準です。
📊 命令網羅の基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Statement Coverage |
| 別称 | C0、ステートメントカバレッジ |
| 分類 | ホワイトボックステストの網羅基準 |
| カバー対象 | プログラム内のすべての実行可能な命令(ステートメント) |
| 網羅レベル | 最も弱い(C0 |
解説
ホワイトボックステストでは、プログラムの内部構造(ソースコードの中身)に着目してテストケースを作ります。ただ、「内部を見る」と一口に言っても、どこまで細かく確認するかにレベルがあります。その最初のレベルが命令網羅です。
命令網羅は「実行されない命令が残らないこと」だけを保証する、最低限の基準です。
逆に言えば、分岐の真偽パターンや条件の組み合わせまではカバーしません。
サンプルコードで考える
次のような単純なプログラムを例にします。
if (A > 0 && B > 0) {
x = x + 1; // 命令①
}
y = y * 2; // 命令②
このコードで命令網羅を満たすには、命令①と命令②の両方を1回は実行すればOKです。
つまり「A=1, B=1」のような if 内部に入るデータを1つ用意するだけで達成できます。A>0 が偽になるケースをわざわざ用意する必要はありません。
図解:フローチャートで見る命令網羅
命令網羅(C0):すべての命令ブロックを通る経路を選ぶ
▲ 真ルートを通るテストケースを1件用意すれば、命令①・命令②の両方が実行され命令網羅(C0)100%を達成
※ 偽(No)ルートを試さなくてもC0は満たせる点が、分岐網羅(C1)との大きな違い
他の網羅基準との比較
命令網羅は他の網羅基準とセットで覚えると、選択肢の見分けがつきやすくなります。
| 網羅基準 | 記号 | 何を網羅するか |
|---|---|---|
| 命令網羅 | C0 | すべての命令を最低1回実行する |
| 分岐網羅 (判定条件網羅) |
C1 | すべての判定条件で真・偽の両方を最低1回ずつ通す |
| 条件網羅 | C2 | 判定式内の各条件について真・偽を最低1回ずつ通す |
| 複数条件網羅 | ― | 判定式内の条件のすべての真偽の組合せを通す(最も厳格) |
包含関係としては、分岐網羅(C1)を満たせば命令網羅(C0)も自動的に満たされます。
すべての分岐を通れば、当然すべての命令も通るからです。逆は成り立ちません。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 命令網羅の核心を3行で
・すべての命令を1回は実行することを保証する、最も基本の網羅基準
・別名C0、ステートメントカバレッジ
・分岐や条件の組合せはカバーしない(それはC1・C2の役割)
試験ではこう出る!
命令網羅は、ホワイトボックステストの網羅基準を区別させる問題として頻繁に登場します。FE・APの午前問題でほぼ毎年関連問題が出る分野です。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE 令和元年秋 問49 |
命令網羅と判定条件網羅の関係について正しい記述を選ぶ問題。 | 判定条件網羅を満たせば命令網羅も満たす(包含関係) |
| AP 令和4年秋 問48 |
流れ図と2つのテストケースから、C0とC1の網羅率を計算する問題。 | 通った命令数/全命令数で網羅率を算出する手順 |
| FE 令和3年免除 問47 |
分岐網羅と条件網羅のテストケース設計の違いを問う問題。 | C0との対比で網羅レベルの違いを見分ける |
📝 IPA試験での出題パターン
パターン1:用語の定義を選ぶ
「すべての命令を最低1回実行する」という記述を選ばせる形式。ひっかけは「すべての分岐」「すべての条件の組合せ」といった他の基準の説明文。キーワードは「すべての命令」「最低1回」。
パターン2:網羅率の計算
AP令和4年秋問48のように、フローチャートとテストケース表が与えられ、C0の網羅率(%)を求める形式。「通った命令数 ÷ 全命令数 × 100」で計算します。分岐の真偽は無視して、命令ブロックだけ数えるのがコツです。
パターン3:基準間の包含関係
「C1を満たせばC0も満たすか?」を問う形式。答えはYes(満たす)。逆方向は成立しません。
ここまで押さえれば得点できます。複数条件網羅の細かい組合せ計算まで深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. ホワイトボックステストの網羅基準である「命令網羅(C0)」の説明として、最も適切なものはどれでしょうか?
- A. プログラム中のすべての判定条件について、真と偽の両方を最低1回ずつ通るようにテストケースを設計する。
- B. 判定式に含まれる個々の条件について、すべての真偽の組合せを通るようにテストケースを設計する。
- C. プログラム中のすべての実行可能な命令を、最低1回は実行するようにテストケースを設計する。
正解と解説を見る
正解:C
解説:
命令網羅(C0/ステートメントカバレッジ)は、コード内の実行可能な命令をすべて1回以上実行することを基準とするテスト設計手法です。最も弱い網羅基準であり、分岐の真偽や条件の組合せは保証しません。
選択肢Aは「分岐網羅(判定条件網羅/C1)」の説明です。判定条件単位で真偽の両方を通ることを要求する基準で、C0よりも厳格です。選択肢Bは「複数条件網羅」の説明です。判定式に含まれる個々の条件のすべての真偽の組合せをカバーする最も厳しい基準で、テストケース数が指数関数的に増えるという特徴があります。
よくある質問(FAQ)
Q. C0が100%でもバグが残ることはありますか?
あります。C0はあくまで「コードが1回実行された」ことしか保証しません。例えば if (A > 0) という条件で A=1 しかテストしなければ、A=0やA=-1のときの挙動は未検証のままです。境界値や異常系のバグはC0だけでは見つけにくいため、実務ではC1以上やブラックボックステスト(同値分割・境界値分析など)と組み合わせます。
Q. C0の網羅率が60%だった、というのはどういう意味ですか?
プログラム全体の命令のうち、テストで実際に通った命令が60%だったという意味です。計算式は「通った命令数 ÷ 全命令数 × 100」。例えば全10命令のうち6命令しか通らないテストケースしか作れていなければ、C0=60%となります。残り40%は1度も実行されていない死蔵コードの可能性があり、レビュー対象になります。
Q. JaCoCoやIstanbulなどのカバレッジツールはC0を測っていますか?
JavaのJaCoCo、JavaScriptのIstanbul、PythonのCoverage.pyといった主要なカバレッジ計測ツールはいずれもC0(行カバレッジ/ステートメントカバレッジ)を標準でサポートしています。多くは追加でC1(分岐カバレッジ)も測定可能です。CI/CDパイプラインで「カバレッジ80%以上」と設定する場合、通常はC0を指していることが多いと覚えておくと実務でも役立ちます。
Q. 命令網羅とパス網羅は何が違いますか?
命令網羅は「命令単位」、パス網羅は「実行経路単位」で網羅性を見ます。パス網羅は始点から終点までのすべての経路の組合せを通すことを要求するため、ループを含むプログラムでは経路が無限に増え、現実には完全な達成が困難です。試験では「最も厳格=パス網羅(または複数条件網羅)」「最も基本=命令網羅」という強弱の関係だけ押さえておけば十分です。