マネジメント系システム開発技術出題頻度 ★★★

ブラックボックステストとホワイトボックステストの違いを図解

中身を見ないブラックボックステストと、中身を見るホワイトボックステストの違いを、映画館の料金の例と図で解説。同値分割・限界値分析、命令網羅・分岐網羅、スタブとドライバ、回帰テストまで、テスト技法の問題が解けるようになります。

この単元の用語:ブラックボックステスト / ホワイトボックステスト / 同値分割 / 限界値分析 / 命令網羅 / 分岐網羅 / スタブ / ドライバ / 回帰テスト

テストって、とにかくいろいろ動かしてみればいいんですよね?

やみくもに試すと、時間がかかるのに大事なミスを見逃すんだ。だから「どこを、どう試すか」の考え方がいくつもある。大きく分けると、中身を見ないテストと中身を見るテストの2つだよ。

テストの段階をおさらい

システム開発では、小さな単位から順に大きな単位へとテストを進めます(工程全体は「システム開発の流れ」の単元で扱っています)。

段階確かめる範囲
単体テストプログラムの部品(モジュール)1つ
結合テスト部品を組み合わせたときの受渡し
システムテストシステム全体(性能・セキュリティなども含む)
受入れテスト発注者が要件を満たしているか確認

この各段階で使われるのが、これから学ぶ ブラックボックステスト と ホワイトボックステスト です。

中身を見るか、見ないか

ブラックボックステスト ? 入力 出力 仕様どおりの出力が出るか 中身(コード)は見ない ホワイトボックステスト 条件 Yes No 入力 出力 命令や分岐をもれなく通るか 中身(コード)を見て確かめる
箱の中が見えない(ブラック)か、透けて見える(ホワイト)か

自動販売機で考えてみましょう。

  • ブラックボックス:お客さんの立場で「150円入れてボタンを押したら、ジュースとおつりが正しく出るか」を確かめる。中の機械は見ない
  • ホワイトボックス:修理担当の立場でふたを開け、「100円玉が来たらこの通路、10円玉ならこの通路」と、内部の通り道を一つずつ確かめる
ブラックボックステストホワイトボックステスト
見るもの仕様(入力と出力)プログラムの内部構造(ロジック)
中身の知識不要必要
代表的な技法同値分割、限界値分析命令網羅、分岐網羅
主な用途単体〜受入れテストまで幅広く主に単体テスト

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

映画館の料金を例にします。年齢を入力すると料金区分を表示するプログラムです。

  • 0〜12歳:子ども料金
  • 13〜64歳:大人料金
  • 65歳以上:シニア料金
  • マイナスの年齢:エラー

すべての年齢を試すのは大変です。そこで、テストする値を賢く選びます。

▼ 同値分割:グループごとに代表値を1つ選ぶ −5 6 30 70 エラー 子ども 0〜12 大人 13〜64 シニア 65〜 −1|0 12|13 64|65 ● 限界値分析:赤い境目の両側の値を重点的に試す
同値分割は「グループの代表」、限界値分析は「グループの境目」を狙う

同値分割

入力値を「同じ結果になるグループ(同値クラス)」に分け、各グループから代表値を1つずつ選んでテストします。上の例なら −5、6、30、70 の4つです。同じグループの値は同じように処理されるはず、という考え方です。

限界値分析(境界値分析)

プログラムのミスはグループの境目で起きやすいものです。「13歳以上」を「13歳より大きい」と書き間違える、といったミスですね。そこで、境目の両側の値(−1と0、12と13、64と65)を重点的にテストします。

限界値分析では、有効な端の値だけでなく、すぐ外側の無効な値もテストするのがポイント。「1〜100が有効」なら、1と100だけでなく 0と101 も選びます。

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

ホワイトボックステストでは、プログラムの中の命令や分岐をどこまでもれなく通したか(網羅したか)を基準にテストケースを作ります。

技法基準
命令網羅すべての命令を少なくとも1回は実行する
分岐網羅(判定条件網羅)すべての分岐について、条件が真の場合と偽の場合を少なくとも1回ずつ通る

「もし年齢が65以上なら、シニア割引を適用する」という処理(そうでなければ何もしない)があるとします。

  • 命令網羅:割引を適用する命令を1回通ればよいので、70歳の1ケースで達成できる
  • 分岐網羅:「65以上(真)」と「65未満(偽)」の両方を通す必要があるので、70歳と30歳の2ケースが必要

分岐網羅のほうが、より厳しい(多くのケースが必要な)基準です。

結合テストの進め方 ― スタブとドライバ

部品を組み合わせてテストしたいのに、相手の部品がまだ完成していないことがあります。そのときは仮のプログラムで代わりをさせます。

トップダウンテスト 上位(完成) スタブ スタブ 未完成の下位の代わり=スタブ ボトムアップテスト ドライバ 下位(完成) 下位(完成) 未完成の上位の代わり=ドライバ
緑が完成済みの部品、黄色が仮のプログラム

ドライバは「運転手」。上に乗って下位の部品を呼び出し、動かす役。 スタブは「切り株」。下で呼ばれるだけの、中身のない代役。 「上はドライバ、下はスタブ」とセットで覚えましょう。

そのほかのテスト

テスト目的
回帰テスト(リグレッションテスト)プログラムを修正した後、修正していない部分に悪影響が出ていないかを確かめる
負荷テスト大量のデータやアクセスに耐えられるかを確かめる
性能テスト応答時間や処理件数が要求を満たすかを確かめる
運用テスト本番に近い環境・手順で、実際の業務に使えるかを確かめる

直したところだけテストすればいいんじゃないんですか?

それが落とし穴なんだ。1か所直したら、思わぬ別の場所が動かなくなることがよくある。だから直していないところも含めて確かめ直すのが回帰テストだよ。

  • ブラックボックステスト:中身を見ず、仕様(入力と出力)で確かめる。技法は同値分割と限界値分析
  • 同値分割:グループごとに代表値を1つ選ぶ
  • 限界値分析:グループの境目の両側の値を選ぶ(例:1〜100が有効なら 0・1・100・101)
  • ホワイトボックステスト:中身(内部構造)を見て、命令網羅・分岐網羅を基準に確かめる
  • スタブは未完成の下位モジュールの代わり(トップダウン)、ドライバは未完成の上位モジュールの代わり(ボトムアップ)
  • 回帰テストは修正による「ほかへの悪影響」を確かめる

確認クイズ

選択肢をタップすると、すぐに正解と解説が表示されます。

Q1ブラックボックステストの説明として、最も適切なものはどれか。

Q2入力値として 1 以上 100 以下の整数を受け付け、それ以外はエラーにするプログラムがある。限界値分析の考え方で選ぶテストデータとして、最も適切なものはどれか。

Q3プログラムの一部を修正した後に、修正箇所以外の機能が以前と同じように正しく動くことを確認するテストはどれか。

Q4上位のモジュールから順にテストするトップダウンテストで、まだ完成していない下位モジュールの代わりに使う仮のプログラムはどれか。