対象試験と出題頻度
ホワイトボックステストは、基本情報技術者・応用情報技術者で出題されるテーマです。
ソフトウェアテストの基本技法として定番化しており、ブラックボックステストとの違い、命令網羅・分岐網羅・条件網羅などの網羅基準を正確に区別できるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)必ず覚えておくべき
用語の定義
情報処理試験を勉強していると、「ホワイトボックステストとブラックボックステスト、結局どっちが何を見るの?」と混乱しがちです。
ホワイトボックステスト(White-box Testing)とは、一言で言うと
「プログラムの内部構造(コードのロジック)に着目して、処理の通り道を網羅的に検証するテスト技法」
のことです。
イメージとしては、「透明なケースに入った機械の中身を点検する作業」です。
機械の外側のボタンを押して動作を確認するのではなく、ケースを開けて配線一本ずつ・歯車一つずつが正しく動くかを直接確かめます。
ホワイトボックステストも同じで、ソースコードを開いて「このif文の通る道」「このループの中身」を一つひとつ確認していくテストです。
📊 ホワイトボックステストの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | White-box Testing(構造テスト) |
| 着目点 | プログラムの内部構造・制御フロー |
| 主な実施工程 | 単体テスト(ユニットテスト) |
| 代表的な手法 | 命令網羅、分岐網羅、条件網羅、複数条件網羅 |
解説
ソフトウェア開発では、書いたコードが意図した通りに動くかを必ず検証します。
検証のアプローチは大きく2つに分かれていて、外から「入力に対して期待した出力が返るか」を確認するブラックボックステストと、内側から「コードの全ての通り道が正しく動くか」を確認するホワイトボックステストがあります。
外側からの確認だけでは、特定の条件分岐が一度も実行されないまま「動いた」と判断される危険があります。この見逃しを防ぐために、コードの中身を直接読みながらテストケースを設計するアプローチが必要になります。
網羅基準(カバレッジ)の4階層
「コードの通り道をどこまで網羅したか」を測る基準が網羅基準です。網羅の厳しさは、命令網羅 → 分岐網羅 → 条件網羅 → 複数条件網羅の順で強くなります。
| 網羅基準 | 厳しさ | 満たす条件 |
|---|---|---|
| 命令網羅 (C0) |
弱 | 全ての命令文を少なくとも1回は実行する |
| 分岐網羅 (C1) |
中 | 全ての分岐の真・偽の両方を1回以上通る |
| 条件網羅 (C2) |
中 | 分岐内の各条件式が真・偽となるケースを網羅する |
| 複数条件網羅 | 強 | 分岐内の条件の真偽の全組合せを網羅する |
図解:網羅基準の違いを if 文で見る
例として、次のコードを考えます。
if (A >= 10 && B >= 10) {
print("OK");
}
各網羅基準で必要なテストケース
| 基準 | 必要なケース | 最少件数 |
|---|---|---|
| 命令網羅 | if内のprintを1回通せばOK 例:A=10, B=10 |
1件 |
| 分岐網羅 | 条件全体が真・偽の両方 例:(A=10, B=10)=真/(A=0, B=0)=偽 |
2件 |
| 条件網羅 | A・Bそれぞれが真・偽になる組合せ 例:(A=10, B=0)/(A=0, B=10) |
2件 |
| 複数条件網羅 | A・Bの真偽の全組合せ(2×2) (真,真)(真,偽)(偽,真)(偽,偽) |
4件 |
ブラックボックステストとの比較
| 観点 | ホワイトボックステスト | ブラックボックステスト |
|---|---|---|
| 着目点 | 内部のロジック・制御フロー | 入力と出力の対応(仕様) |
| 主な工程 | 単体テスト | 結合・システム・受入テスト |
| 代表手法 | 命令網羅/分岐網羅/条件網羅 | 同値分割/限界値分析/原因結果グラフ |
| 仕様の抜けの検出 | 不得意(コード通りに動けばOKと判定) | 得意 |
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 ホワイトボックステストの核心を3行で
・プログラムの内部構造に着目してロジックの通り道を検証するテスト技法
・主な網羅基準は「命令網羅 → 分岐網羅 → 条件網羅 → 複数条件網羅」の順で厳しくなる
・単体テストで使われ、ブラックボックステストとは「内部を見る/見ない」で対比される
試験ではこう出る!
ホワイトボックステストは、FE・APの午前問題で繰り返し出題されている定番テーマです。出題パターンは大きく3つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H30秋 午前 問49 |
条件網羅を満たすテストケースの組合せを選ぶ問題。 | ・各条件式が真・偽の両方を取る組合せが正解 ・分岐網羅と混同させるひっかけが定番 |
| AP H29春 午前 問49 |
命令網羅・分岐網羅・条件網羅・複数条件網羅の包含関係を問う問題。 | ・複数条件網羅は分岐網羅・条件網羅を含む ・命令網羅が最も弱い基準 |
| FE R元秋 午前 問49 |
テスト技法の説明として正しいものを選ぶ問題。 | ・「内部構造に着目」がホワイトボックステストの鍵 ・「仕様に基づき入出力で確認」はブラックボックスの説明 |
| AP R3春 午前 問49 |
具体的なコードを示し、判定条件網羅を満たすテストデータを選ばせる問題。 | ・条件式の真偽値を表に整理して判定 ・記号(C0/C1/C2)で問われることもある |
📝 IPA試験での出題パターン
パターン1:「テスト技法の説明を選べ」
4択でブラックボックステスト・同値分割・限界値分析などの説明文が並び、ホワイトボックステストに該当するものを選ぶ形式。キーワードは「内部構造」「制御の流れ」「論理構造」。「仕様」「入力と出力」が出てきたらブラックボックス側です。
パターン2:「網羅基準を満たすケースを選べ」
具体的なソースコード(if文の入れ子など)が示され、命令網羅・分岐網羅・条件網羅のいずれかを満たす最小のテストデータの組合せを選ぶ形式。条件式ごとに真偽の表を作って消去法で解くと確実です。
パターン3:「網羅基準の包含関係」
命令網羅 ⊂ 分岐網羅 ⊂ 複数条件網羅 という強さの順序を理解しているかを問う形式。「分岐網羅を満たせば命令網羅も満たす」は正しい、「条件網羅を満たせば分岐網羅も満たす」は誤り(条件網羅は分岐網羅を含まない)という点が頻出のひっかけです。
深追いすると「MC/DC(修正条件判定網羅)」など発展的な基準も出てきますが、FE・APでは命令/分岐/条件/複数条件の4つを押さえればOKです。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. ホワイトボックステストの説明として、最も適切なものはどれでしょうか?
- A. 仕様書に記載された入力と出力の対応関係に着目し、同値分割や限界値分析でテストケースを設計する技法。
- B. 開発の最終段階で、実際の業務データを用いてシステム全体が利用者の要求を満たすかを確認する技法。
- C. プログラムの内部構造(制御フロー)に着目し、命令網羅・分岐網羅などの基準でテストケースを設計する技法。
正解と解説を見る
正解:C
解説:
ホワイトボックステストはソースコードの内部構造を見ながら、命令や分岐の通り道を網羅的にチェックするテスト技法です。網羅基準として命令網羅・分岐網羅・条件網羅・複数条件網羅が用いられます。
選択肢Aはブラックボックステストの説明です。仕様に基づいて入出力の関係から検証するアプローチであり、内部のコードを見ない点でホワイトボックステストと対をなします。選択肢Cは受入テスト(ユーザー受入テスト)の説明です。受入テストはシステム開発の終盤に発注者側が業務シナリオで動作を確認する工程であり、テスト技法の分類とは別の概念です。
よくある質問(FAQ)
Q. 条件網羅を満たせば分岐網羅も満たしますか?
満たすとは限りません。これは試験の頻出ひっかけです。例えば「A and B」という条件で、(A=真, B=偽)と(A=偽, B=真)というケースを選ぶと、AもBも真偽の両方を取るため条件網羅は満たしますが、分岐全体としてはどちらのケースも結果が「偽」となり、真の分岐を一度も通りません。条件網羅と分岐網羅は包含関係にないため、両方を満たす「判定条件/条件網羅」や「複数条件網羅」が必要になります。
Q. 実務ではどのツールでホワイトボックステストを行いますか?
JUnit(Java)、pytest(Python)、Jest(JavaScript)といった単体テストフレームワークを使い、コードカバレッジ計測ツール(JaCoCo、Coverage.py、Istanbulなど)でカバレッジを可視化するのが一般的です。CI/CDパイプラインに組み込み、PRごとにカバレッジを自動チェックする運用が定着しています。
Q. カバレッジ100%にすればバグはゼロになりますか?
なりません。カバレッジが示すのは「コードのどこを実行したか」であり、「仕様通りに動いたか」ではありません。仕様自体に抜けがあると、コードを全行通してもバグは検出できません。そのため実務では、内部構造に着目した検証と、仕様に着目した検証(ブラックボックス側)を組み合わせます。
Q. C0、C1、C2という記号は何を指しますか?
カバレッジの種類を示す記号です。C0が命令網羅(ステートメントカバレッジ)、C1が分岐網羅(ブランチカバレッジ)、C2が条件網羅(コンディションカバレッジ)を指すのが一般的な呼び方です。AP試験では記号で問われるケースもあるので、対応関係を覚えておくと迷いません。