ブラックボックステストとホワイトボックステストとは?

こんな人に読んでもらいたい

  • ソフトウェア開発におけるプログラムのテスト手法について学習したい
  • 品質保証の計画をする上で、採用するテスト手法について検討したい
  • ブラックボックステストとホワイトボックスについて忘れてしまった

はじめに

ソフトウェア開発におけるテスト手法であるブラックボックステストとホワイトボックステストについて、それぞれどのような特徴があるかを学習しましょう。

キーワードと意味は知っていても、どっちのことだっけと分からなくなりがちな2つのテスト手法について学習しましょう。

2つのテスト手法を比較

ブラックボックステストとホワイトボックステストのテスト手法の特徴について、以下の比較表に示します。

プロジェクトでは、品質保証をどのように行うかを検討し、テスト手法をプロジェクト計画書で計画しましょう!

ブラックボックステスト

ブラックボックステストの特徴

ブラックボックステストは、システム自体が仕様を満たしているかを確認することを目的としたテストです。
そのため、ユーザ操作によるデータの入出力や処理性能、画面のUI/UXの観点での確認を行います。
プログラムの内部構造には注目しないため、どこの処理ロジックを通っているかは注目していません。

まるで中身の見えない箱(ブラックボックス)を扱うようにテストを行うことからブラックボックステストと呼ばれているようです。

ブラックボックステストのテスト手法

  • 同値分割法

入力値をいくつかのグループ(同値クラス)に分割し、それぞれのグループから代表的な値を選んでテストを行う手法です。全ての入力値をテストする代わりに、効率的にテストを行うことが可能です。

  • 境界値分析

同値クラスの境界値とその付近の値に注目してテストを行う手法です。境界値は、エラーが発生しやすい箇所であるため、重点的にテストを行うことで、不具合の発見につながることが期待できます。

  • 状態遷移テスト

システムの状態の変化に着目してテストを行う手法です。状態遷移テストでは、ユーザーの操作によって状態遷移を網羅的にテストすることで、システムの挙動に問題がないかを確認します。
状態遷移図や状態遷移表といった図や表を用いてテスト設計を行うことが多いです。

  • デシジョンテーブルテスト

複数の条件の組み合わせによって結果が異なる場合に、全ての組み合わせを網羅的にテストするための手法です。
デシジョンテーブルを用いることで、複雑な条件の組み合わせを漏れなくテストすることができます。

ホワイトボックステスト

ホワイトボックステストの特徴

ホワイトボックステストは、プログラムの内部構造(モジュール単位)に注目し、設計書通りに条件分岐やループなどの処理ロジックが動作することを確認することを目的としたテストです。
JUnitやJestなど、テストコードを書いて設計書通りに処理ロジックが通っていることに注目します。

まるで箱の中身が透けて見える(白い箱=ホワイトボックス)ように、プログラムの動作を詳細に確認できることからホワイトボックステストと呼ばれているようです。

ホワイトボックステストのテスト手法

モジュール内の処理ロジックで条件分岐をどこまで網羅したテストを実施するかを決める必要があります。
後述する条件網羅(C2)が最も詳細なテストであるが、その分テストケースが増えて工数を要するため、プロジェクトを遂行する上では、品質保証をどのように行うかを計画する必要があります。

モジュール間のテストについても別で計画しましょう。条件分岐自体は網羅できているため、モジュール間のインタフェース(引数や戻り値など)については、別途テストしておく必要があります。

  • 命令網羅(C0)

命令網羅は、すべての命令(行動)を少なくとも1回実行すれば良いテスト方法です。
以下を例にすると、「外出する」・「外出しない」という命令が1度実行できれば良いです。

  • 分岐網羅(C1)

分岐網羅は、条件分岐のすべての結果(YES/NO)を網羅するテスト方法です。
以下を例にすると、「天気が晴れか(YES/NO)」・「財布にお金があるか(YES/NO)」を網羅し、条件分岐が最低1回ずつ確認できれば良いです。

  • 条件網羅(C2)

条件網羅は、すべての条件の組み合わせを網羅するテスト方法です。
以下を例にすると、すべての条件を網羅できていることが確認できれば良いです。

条件網羅(C2)が、すべての組み合わせを網羅するため、条件の相互作用による不具合を検出できる可能性が高いため、最も品質が高いと言えますね!