ホワイトボックステストとブラックボックステストの違いとは?「自動販売機の点検」でたとえてみる

IT資格

「ホワイトボックステスト」と「ブラックボックステスト」。名前は対になっていて覚えやすいのに、「同値分割はどっちだっけ」「分岐網羅は?」と、技法の名前が出てきたとたんに混ざってしまう。編集部で試験のシラバスに沿って整理してみると、判断の軸はひとつで足りた。「プログラムの中身を見て、テストを考えるかどうか」だ。

まず結論:2つのテストは「何をもとにテストを考えるか」が違う

  • ブラックボックステスト:中身は見ない。仕様書をもとに「この入力なら、この出力になるはず」を確かめる
  • ホワイトボックステスト:中身を見る。プログラムの構造をもとに「すべての命令や分岐を通ったか」を確かめる
  • 見つけられる不具合の種類が違うため、どちらか一方ではなく組み合わせて使う
ホワイトボックステストとブラックボックステストの違いとは?「自動販売機の点検」でたとえてみる 図解
図解:ホワイトボックステストとブラックボックステストの違いをひと目で比較

ブラックボックステストとは?――外から「お金を入れてボタンを押す」点検のようなもの

ブラックボックステストは、プログラムの内部を「中の見えない黒い箱」とみなし、外から見える入力と出力だけに注目するテスト。もとにするのは仕様書で、「仕様どおりに動くか」を確かめる。

自動販売機の点検にたとえてみる。利用者と同じように硬貨を入れ、ボタンを押し、正しい商品とおつりが出てくるかを見る。機械の扉は開けない。150円の商品に100円しか入れなかったらボタンは反応しないか、売り切れの商品を押したらどうなるか。外から操作して、外に出てきた結果で判断する。

とはいえ、考えられる入力をすべて試すことはできない。そこで、少ないテストで効率よく確かめるための技法が用意されている。

技法考え方
同値分割同じ結果になるはずの入力をグループにまとめ、各グループから代表の値を選んでテストする
境界値分析(限界値分析)グループの境目にあたる値を重点的にテストする
デシジョンテーブル(決定表)複数の条件の組み合わせと、そのときの結果を表に整理してテストする
状態遷移テスト「待機中」「投入済み」などの状態と、その移り変わりが正しいかをテストする

たとえば「18歳以上なら申し込める」という仕様なら、同値分割では「17歳以下」と「18歳以上」の2グループから代表を1つずつ選ぶ。境界値分析では、境目の17歳と18歳を必ずテストする。条件の書き間違い(「以上」とすべきところを「より大きい」にしてしまう、など)は境目で表に出やすいので、境界値は特に重視される。

ホワイトボックステストとは?――扉を開けて「配線を1本ずつたどる」点検のようなもの

ホワイトボックステストは、プログラムの内部構造、つまりソースコードの命令や分岐を見たうえで行うテスト。「書かれた処理がきちんと実行され、意図どおりに動くか」を確かめる。

自動販売機でいえば、扉を開けて中を見る点検だ。硬貨を判別する部分、おつりを計算する部分、商品を押し出す部分。配線や部品を1つずつたどり、すべての経路に実際に電気が通るかを確認する。外からボタンを押すだけでは一度も使われなかった経路も、ここで確かめられる。

ホワイトボックステストでは、「どこまでたどったか」の基準を網羅率(カバレッジ)で表す。代表的な基準は次のとおり。

基準満たすための条件
命令網羅すべての命令を少なくとも1回は実行する
判定条件網羅(分岐網羅)すべての分岐で、真の場合と偽の場合をそれぞれ少なくとも1回は実行する
条件網羅分岐の判定を構成する個々の条件について、真と偽をそれぞれ少なくとも1回は実行する
複数条件網羅個々の条件の真偽の組み合わせを、すべて実行する

下の基準ほど、必要なテストケースの数は増える傾向にある。たとえば「AかつB」という判定がある場合、判定条件網羅は判定全体が真になる場合と偽になる場合の2通りで満たせるが、複数条件網羅ではAとBの真偽の組み合わせ4通りすべてが必要になる。

「ホワイトボックスとブラックボックスの違い」を自動販売機でわかりやすく解説

観点ブラックボックステストホワイトボックステスト
自動販売機のたとえ外からお金を入れてボタンを押す扉を開けて配線を1本ずつたどる
テストを考えるもとになるもの仕様書(何をするべきか)ソースコードなどの内部構造(どう作られているか)
確かめること入力に対して正しい出力が得られるか命令や分岐が漏れなく実行されるか
代表的な技法・基準同値分割、境界値分析、デシジョンテーブル、状態遷移テスト命令網羅、判定条件網羅、条件網羅、複数条件網羅
主に使われる場面単体テストからシステムテストまで幅広く主に単体テスト
主な担当者テスト担当者、利用部門など主にプログラムを書いた開発者
見つけやすい不具合仕様と動作の食い違い、作り忘れた機能一度も実行されない処理、分岐の誤り
見つけにくい不具合特定の経路でしか起きない内部の誤り仕様にあるのに実装されていない機能

名前の覚え方はシンプルで、箱が「黒い=中が見えない」、箱が「白い(透明)=中が見える」。ホワイトボックステストは「構造ベースのテスト」、ブラックボックステストは「仕様ベースのテスト」と呼ばれることもあり、この言い換えのほうが本質をよく表していると編集部では感じている。

なぜ片方のテストだけではダメなのか?

理由は、それぞれに原理的に見つけられない不具合があるからだ。

ブラックボックステストだけの場合。外から押せるボタンをひと通り試しても、機械の中に「特定の硬貨の組み合わせのときだけ通る配線」があれば、そこは一度も確かめられないまま残るかもしれない。仕様書から選んだテストケースが、内部のすべての経路を通る保証はない。

ホワイトボックステストだけの場合。中の配線をすべてたどって問題がなくても、そもそも「お札を受け付ける部品」を付け忘れていたら気づけない。存在しないコードは、たどりようがないからだ。網羅率が100%であっても、それは「書かれたものはすべて実行した」という意味であって、「必要なものがすべて書かれている」ことまでは示さない。

この点は試験でもよく問われるうえ、実務でも誤解されやすい。編集部としては、「網羅率は、テストが足りない場所を見つけるための指標であって、品質を保証する数字ではない」と理解しておくのが適切だと考えている。

実際の開発ではどの順番で使われるのか

ステップテストの段階よく使われる考え方
1単体テスト(部品1つずつの確認)ホワイトボックステストを中心に、ブラックボックステストも併用する
2結合テスト(部品をつないだ確認)部品どうしの受け渡しを、主にブラックボックステストで確かめる
3システムテスト(全体の確認)仕様や要件を満たしているかを、ブラックボックステストで確かめる
4受入れテスト(利用者側の確認)利用者の視点で、ブラックボックステストとして確かめる

開発の前半は作った人が中身を見ながら細かく確かめ、後半に進むほど使う人の視点で外から確かめる、という流れになっている。ブラックボックステストは特定の段階に限らず、どの段階でも使える点は押さえておきたい。

まとめ:3行で理解するホワイトボックステストとブラックボックステスト

ブラックボックステストは中を見ずに、仕様どおりの入出力になるかを確かめる。ホワイトボックステストは中を見て、命令や分岐を漏れなく実行できたかを確かめる。見つけられる不具合が違うので、両方を組み合わせて初めて穴が減る。技法の名前で迷ったら、「これは仕様書だけで考えられるか、それともコードを見ないと考えられないか」と問い直してみてほしい。それだけで、ほとんどの選択肢は仕分けられる。

よくある質問

Q1. グレーボックステストとは何ですか?

両者の中間にあたる考え方。内部の構造をある程度把握したうえで、テストの実行自体は外からの入出力で行う。たとえば「この機能は内部でデータベースの2つの表を更新している」と知ったうえで、その更新が食い違いやすい操作を外から重点的に試す、といった使い方になる。内部を知っているぶん、的を絞ったテストケースを選びやすい。

Q2. 同値分割と境界値分析は、どう使い分けるのですか?

使い分けるというより、続けて使うものだ。まず同値分割で、入力を「同じ扱いになるグループ」に分ける。次に境界値分析で、そのグループの境目の値を選ぶ。たとえば「1個以上10個以下で注文可」なら、グループは「0以下」「1〜10」「11以上」の3つ、境界値は0・1・10・11となる。同値分割だけだと代表として5のような中央の値を選びがちで、境目の誤りを見逃すおそれがある。

Q3. 網羅率は100%を目指すべきですか?

目的と基準による。命令網羅や判定条件網羅で高い網羅率を目指すことには意味があるが、複数条件網羅のように条件が増えるほど組み合わせが急増する基準では、100%が現実的でないこともある。また、本文で述べたとおり、網羅率が高くても仕様の作り忘れは見つからない。どの基準でどこまで求めるかは、そのソフトウェアに求められる信頼性と、かけられるコストとの兼ね合いで決めるものだ。

Q4. 基本情報技術者試験では、どのように出題されますか?

大きく2つの形がある。1つは、技法の名前がどちらのテストに属するかを問う知識問題で、「同値分割・境界値分析はブラックボックス」「命令網羅・判定条件網羅はホワイトボックス」と仕分けられれば対応できる。もう1つは、流れ図や条件式が示され、「判定条件網羅を満たす最小のテストケース数はいくつか」などを求める問題。こちらは各基準の定義を正確に覚えたうえで、真偽の表を自分で書いて数える練習が欠かせない。

参考:IPA「試験要綱・シラバスについて」

参考:JSTQB(日本ソフトウェアテスト資格認定委員会)「シラバス」

コメント

タイトルとURLをコピーしました