ソフトウェアテストの質は、製品・サービスの品質を左右します。そのテスト技法には各フェーズに応じた様々な種類があります。
そこで今回は、システムの内部構造に着目するソフトウェアテスト技法「ホワイトボックステスト」について解説します。
「ホワイトボックステストとは何か?」「ブラックボックステストと違いを含め、実施方法を知りたい」という方は、ぜひご一読ください。
ホワイトボックステストとは

ホワイトボックステストとは、別名「構造テスト」とも呼ばれることがあります。
主に、プログラムの内部構造を理解・意識した開発者自身によって実施されます。
具体的には、ソースコードの文、分岐、条件などを網羅的に、それらが正しい構造で意図した通りに動作しているかを確認するテストです。
そのため、ホワイトボックステストの実行には「プログラミングに関する知識」が必要不可欠です。
ホワイトボックステストの特徴
ホワイトボックステストには以下のような特徴・メリットがあります。
ホワイトボックステストの特徴
- 単純なミスを検証
- 耐久性やバグなど、網羅的に検証できる
- 内部処理上の不具合・バグが発見できる
- テスト項目がまとめやすい
また、ホワイトボックステストは、システムの内部構造を網羅するようなテストケースに適しています。
具体的には、実施するテストケースによるプログラム実行結果をテスト品質の指標とし、その網羅率(カバレッジ)を計測、分析します。
カバレッジについては後半部分の「ホワイトボックステストの必須知識」にて、詳しく解説します。
ホワイトボックステストの目的と必要性
ホワイトボックステストはソフトウェア開発において、システムの内部構造に着目したテスト手法です。その目的と必要性を理解することは高品質なソフトウェア開発において非常に重要です。
ホワイトボックステストの目的
ホワイトボックステストの主な目的は、ソースコードの網羅性を高め、潜在的なバグを早期に発見することにあります。具体的には、以下の点が挙げられます。
- コードの網羅性向上
全ての実行パスを検証し、コードの隅々までテストすることで、見落としがちなバグを検出します。 - 内部ロジックの検証
複雑な内部ロジックやアルゴリズムの動作を検証し、設計上の欠陥や実装ミスを特定します。 - デバッグの効率化
バグ発生時の原因特定を容易にし、デバッグ作業の効率化を図ります。
ホワイトボックステストの必要性
ホワイトボックステストは、ブラックボックステストだけでは発見できないバグを検出するために不可欠です。
- 早期バグ発見
開発の初期段階で内部構造を検証することで、後工程での手戻りを削減し、開発コストを抑制します。 - 品質向上
コードの品質を高め、信頼性の高いソフトウェアを提供することで、顧客満足度向上に貢献します。 - 保守性向上
コードの可読性や保守性を高め、将来的な機能追加や修正を容易にします。
ホワイトボックステストは、開発者がシステムの内部構造を深く理解し、品質の高いソフトウェアを開発するために、欠かせないテスト手法と言えるでしょう。
ブラックボックステストとの違い

ここからは、以下の特徴について「ホワイトボックステスト」、「ブラックボックステスト」の内容を詳しく説明します。
種別 | 内容 |
---|---|
ホワイトボックステスト | 内部構造に注目した網羅的なテスト。 プログラムの内部の情報を基に行うため、 プログラミングの知識が必要不可欠 |
ブラックボックステスト | 内部構造は考慮せず、外部の仕様に限定したテスト。 画面状態のインプット・アウトプットを検証結果とする。 |
ブラックボックステストとは、別名「機能テスト」とも呼ばれることがあります。

主にプログラムの内部構造を考慮せずに外部からの視点で、ユーザー要求を仕様通り満たしているかを確認するテストです。
テストすべき項目は仕様書などから洗い出します。
そのため、あらかじめシステムの仕様やユーザー要求を理解・把握しておく必要があります。
ブラックボックステストは多くの場合、開発者以外の第三者によってテストが実行されます。そのため、多くのテストレベルに活用ができ、費用対効果が高いと言えるでしょう。
ブラックボックステストとは以下の特徴・メリットを持ち合わせています。
ブラックボックステストの特徴
- テストレベルのほとんどで対応可能
- 費用対効果が高い
- 対応可能なテストレベルが幅広い
- ユーザー要求を満たしているか確認できる
- 操作面の良い点・悪い点を洗い出せる
ブラックボックステストについてはこちらの記事でも詳しく解説しておりますので、ぜひご一読ください。
ホワイトボックステストの技法
ここまでの内容をふまえ、次は「ホワイトボックステストの技法」についてご紹介します。今回は、主に以下4つの技法を取り上げます。
ホワイトボックステストの技法
制御フローテスト:
プログラムにおける処理フローが、網羅的に正しく実行されているかを確認するテスト
データフローテスト:
プログラムの内部構造に関するデータや変数が、正しい手順で行われているかを確認するテスト
同値分割法:
入力値を同等のグループに分け、代表値でテスト
データフローテスト:
グループ境界値とその周辺を重点的にテストし、バグを効率的に検出する手法
制御フローテスト

ホワイトボックステストの技法1つ目は「制御フローテスト」です。
制御フローテストでは、対象となる機能(モジュール)を構成する要素に着目します。そのため、主にプログラムにおける処理フローが、網羅的に正しく実行されているかを確認するテストです。
具体的には、「命令文/分岐した経緯/条件判定」に着目し、これらがすべて正常に動作しているかを網羅的に確認します。前述の通り、これらの網羅率を「カバレッジ」と呼びます。
制御フローテストでは網羅率(カバレッジ)を全てクリアし100%となることが目標となります。
データフローテスト
ホワイトボックステストの技法2つ目は「データフローテスト」です。 データフローテストでは、システム・ソフトウェアで使われているデータや変数に着目します。 主に、プログラムにおける処理フローが、網羅的に「定義→使用→消滅」と正しい順番で実行されているかを確認するテストです。 また、データフローテストではプログラムの処理上で、未定義のままになっている使用データ・未使用データを検出し、内部構造における欠陥を削減することを目的としています。
同値分割法
ホワイトボックステストの技法3つ目は「同値分割法」です。
同値分割法は、入力データを同等の結果が得られるグループ(同値クラス)に分割し、各グループから代表値をテストケースとして選択する手法です。これにより、網羅的なテストを効率的に実施できます。
例えば、年齢を入力するシステムの場合、「0歳未満」「1歳~120歳」「121歳以上」のようにグループ分けし、各グループから代表値をテストケースとして選択します。これにより、全ての年齢をテストするよりも、効率的にシステムの動作を検証できます。
境界値分析
ホワイトボックステストの技法4つ目は「境界値分析」です。
境界値分析は、同値クラスの境界値とその周辺の値をテストケースとして選択する手法です。境界値は、エラーが発生しやすい箇所であるため、重点的にテストする必要があります。
例えば、1歳~120歳が有効な年齢の場合、「0歳」「1歳」「120歳」「121歳」などをテストケースとして選択します。これにより、境界値におけるシステムの動作を詳細に検証できます。
ホワイトボックステストの必須知識「カバレッジ」とは?
ソフトウェアテストにおいてプログラミング後の単体テストによる品質担保は、手戻りの時間的ロスの削減に寄与します。
上記テストケースを考慮する上では、ホワイトボックステストの概念の1つである「カバレッジ(網羅率)」の計測・分析が、テスト品質の成否を左右します。
そこで今回は、ホワイトボックステストの必須知識として「カバレッジ」についてご紹介します。
カバレッジとは主に、ソフトウェアテストにおける対象プログラムが、「一連の検証作業により、どこまで実施されたのか」を網羅する割合を指します。テストケースにおけるカバレッジの計測により、テスト項目の抜け漏れや、対象プログラムに潜む不具合・バグの効率的且つ網羅的な検出が可能となります。
では、ホワイトボックステストでは具体的にどのようなカバレッジを計測することが多いのでしょうか?代表的なコードカバレッジは、以下の通りです。
代表的なコードカバレッジ
- ステートメントカバレッジ(C0:命令網羅)
- ブランチカバレッジ(C1:条件網羅)
- マルチコンディションカバレッジ(C2複合条件網羅)



まとめ
いかがでしたでしょうか? 今回は、システム・ソフトウェア開発におけるテスト技法の「ホワイトボックステスト」に注目しました。
また、上記のように、カバレッジの評価基準には様々な種類が存在します。
これらの網羅度を算出する方法は「カバレッジ基準」と呼ばれ、これらの基準を総称した実際の網羅結果が「カバレッジ」です。
ホワイトボックステストは開発者自身による、内部構造に着目したテスト技法です。
システムの内部構造を理解・把握した上で、細やかな検証作業を実施することで、プログラミング後の内部構造が仕様通り正しく動作しているのかを、網羅的に確認することができます。
今回ご紹介した内容をふまえ、ホワイトボックステストではカバレッジを活用しながら、正しい手順で、より網羅性の高いソフトウェアテストにしましょう。
本記事をふまえ、導入するテスト技法の見直しや、ソフトウェア品質向上に役立ていただければ幸いです。最後までお読みいただき、ありがとうございました。