FE EXAM

ブラックボックステスト(入力と出力で検証)

内部構造を見ず入力と出力の仕様に着目して検証するテスト。

DIAGRAM
入力(テストデータ)中身は見ない出力(期待値と比較)
中身は見ずに「入力 → 出力」が仕様どおりかだけを確認する入力データ例: 年齢 = 20例: 年齢 = 17例: 年齢 = 130プログラム中身(コード)は見ない・気にしない出力結果→ 成人→ 未成年→ エラー仕様の期待値と一致?一致すれば合格・違えば不具合
解説

📌
ブラックボックステストとは

中身を見ずに入力と出力だけを見る入力出力

ブラックボックステストとは、プログラムの内部構造(コードの中身)を見ず、入力と出力の仕様だけに着目して正しく動くかを確認するテストです。「この入力ならこの出力になるはず」という仕様書の期待値と、実際の出力を見比べます。

「ブラックボックス」とは中身の見えない黒い箱のこと。テストする人は箱の中(プログラムの作り)を知らなくてよく、外から見た振る舞いだけを確認します。仕様を作る人とテストする人が分かれていても実施できるのが利点です。

身近な例で考えると、自動販売機の動作確認に似ています。中の配線を知らなくても、「120円入れてお茶のボタンを押す → お茶が出る」という外から見た動きが仕様どおりかを確かめれば十分です。上の図解で、入力を入れて出力を期待値と比べる流れを確認できます。

📌
主な技法

0〜120を「子供 / 大人」で分けるなら0境界 18120子供の代表大人の代表境界の前後を狙う

入力の組み合わせは無数にあるため、効率よくバグを見つける技法が使われます。代表的なものは次の2つです。
同値分割:入力を「同じ扱いになるグループ(同値クラス)」に分け、各グループから1つだけ代表値を選んで試す。たとえば年齢を「子供」「大人」に分け、それぞれ1つずつ試す
限界値分析:グループの境目(境界値)とその前後を重点的に試す。バグは「ちょうど○○以上のとき」のような境界で起きやすいため

この2つはセットで使うのが基本です。同値分割で大まかに代表値を絞り、限界値分析で境界の前後(例: 17歳・18歳・19歳)を補えば、少ないテスト回数で多くの不具合を発見できます。

ほかにも、原因(入力条件)と結果(出力)の組み合わせを表にする原因結果グラフデシジョンテーブルなどがあります。いずれも「内部構造を見ずに入力と出力の仕様から考える」という点で共通しています。

📌
ホワイトボックスとの違い

テストには大きく2つの考え方があります。着目する場所が「外(仕様)」か「中(構造)」かが決定的な違いです。

観点ブラックボックステストホワイトボックステスト
着目する点入力と出力の仕様(外)プログラムの内部構造(中)
コードを見るか見ない見る
代表的な技法同値分割・限界値分析命令網羅・分岐網羅
主な実施工程結合テスト・システムテスト単体テスト

ブラックボックステストは「仕様どおりに動くか」を確かめ、ホワイトボックステストは「コードのすべての道筋を通せているか」を確かめます。前者は仕様の抜けや誤った出力を見つけやすく、後者は通っていない処理(テスト漏れ)を見つけやすいという特徴があります。

どちらが優れているということはなく、両方を組み合わせて補い合うのが実務の基本です。家にたとえると、ブラックボックスは「ドアが開くか・電気が点くか」という住む人目線の確認、ホワイトボックスは「配線がすべて正しくつながっているか」という工事担当者目線の確認に当たります。

💡
なぜブラックボックスが必要か

開発者コードを書くテスト担当者コードを知らなくてよい仕様書だけでテスト設計役割を分けられるので大規模開発でも並行作業できる

コードの中身を知らなくてもテストできることが、ブラックボックステストの最大の利点です。なぜなら、開発者とテスト担当者が別々に作業を進められるからです。

テスト担当者は仕様書(「この入力でこの出力になるべき」という決め事)さえあれば、プログラムが完成する前からテストの計画を作れます。また、コードを書いた人は自分のミスに気づきにくいという傾向があるため、コードを知らない第三者が外から確認することで、見落とされやすいバグを発見しやすくなるという効果もあります。

ただし、ブラックボックスだけでは「通っていないコードの道筋(実行されない処理)」は見つけられないという弱点があります。たとえばエラー処理のコードが正しく書けているかどうかは、外から見るだけでは分かりません。そのためホワイトボックステスト(コードの中を確認する方法)と組み合わせて使います。

🗂️
テストケースの作り方

①仕様を読む入力と出力を確認②グループ分け同値クラス作成③代表値・境界値テスト値を決める④入力して出力を期待値と比べる一致すれば合格、違えば不具合

ブラックボックステストのテストケース(どの値で何を確かめるかの一覧)は、仕様書から機械的に作れるのが特徴です。大まかな流れは次のとおりです。


①仕様を読む:「どんな入力のとき、どんな出力になるべきか」を仕様書から整理する
②グループ分け(同値分割):入力を「同じ結果になる区画(同値クラス)」に分ける。例えば「有効な年齢/小さすぎる年齢/大きすぎる年齢」の3グループ
③代表値と境界値を選ぶ:各グループから代表値を1つ、さらにグループの境目(境界)の前後の値も追加する
④実際に入力して確かめる:選んだ値をプログラムに入れ、出力が仕様の期待値と一致するかを確認する

この手順を踏むことで、ありえる入力の数が何千・何万あっても、少数の代表値で効率よく確認できます。「年齢入力」の例なら、0〜130の全131通りを試さなくても、10(子ども代表)・17・18・19(境界前後)・50(大人代表)・130(上限代表)などに絞ってテストできます。

練習問題

🎯
基本情報技術者 練習問題

Q1.ブラックボックステストの説明として最も適切なものはどれか。
A.プログラムの内部構造に着目し、すべての命令を実行できているか確認する
B.プログラムの内部構造を見ず、入力に対する出力が仕様どおりかを確認する
C.ソースコードを1行ずつ読みながら誤りを探す
D.実行中のメモリ使用量を測定する
Q2.ブラックボックステストで用いられる代表的な技法はどれか。
A.命令網羅・分岐網羅
B.同値分割・限界値分析
C.コードレビュー
D.静的解析
Q3.ブラックボックステストとホワイトボックステストの違いとして適切なものはどれか。
A.ブラックボックスは内部構造に着目し、ホワイトボックスは仕様に着目する
B.ブラックボックスは仕様に着目し、ホワイトボックスは内部構造に着目する
C.どちらも内部構造のみに着目する
D.どちらも仕様のみに着目する

関連コンテンツ