· theory · 7 min read
テストの中身を見るか見ないか?ホワイトボックス/ブラックボックス手法を比較

システムテストを進める際、「中身のコードを知っているか、知らないか」でテストのやり方は大きく変わります。
この2つの視点をホワイトボックス(White-box)とブラックボックス(Black-box)と呼びます。単体テストや結合テストなど、工程ごとにどちらの手法が適しているかを理解することが、試験攻略の鍵です。
今回は、それぞれの特徴をPASBECASの視点で深掘りします。
Problem:テストは「網羅」が難しい
プログラムが複雑になると、考えられる「入力パターン」は無限に広がります。
「すべての数値を入力してみよう!」なんてことは不可能です。では、どうすれば「最低限のテストで最大のバグ」を見つけられるのか。その答えが、効率的なテスト手法の選択にあります。
Affinity:身近な経験で例えると?
おもちゃを修理する場面を想像してください。
- ホワイトボックス:中を分解して、歯車が噛み合っているか、配線が切れていないか、内部の仕組みまでじっくり確認する。
- ブラックボックス:外からスイッチを押してみて、音が鳴るか、光るか、思い通りの動きをするか(中身は気にせず、結果だけ)確認する。
どちらも修理には欠かせない視点ですよね。
Solution:2つの手法の使い分け
テスト工程と組み合わせて考えると、ぐっと理解が深まります。
1. ホワイトボックス(構造テスト)
プログラムの内部ロジック(コード)に着目してテストを行います。
- 単体テストで主に使われます。
- コードの行や条件(If文)をどれだけ実行したかという網羅率(カバレッジ)を重視します。
2. ブラックボックス(機能テスト)
プログラムの中身は気にせず、入力と出力(結果)だけを確認します。
- システムテストや運用テストで主に使われます。
- 仕様書通りに機能しているか、異常な入力(変な数字や文字)を入れた時に正しくエラーが出るかをチェックします。
Benefit:それぞれに得意なバグがある
手法を使い分けるメリットは、見つけられるバグの種類が違うことです。
- ホワイトボックスの強み:絶対に実行されない「死んだコード」や、特定の条件下だけで起こる論理ミスを見逃しません。
- ブラックボックスの強み:コードをどれだけチェックしても気づかない、「機能そのものの作り忘れ」や、ユーザーの使い勝手の悪さを発見できます。
Evidence:試験に出るキーワード「境界値分析」
試験では、特にブラックボックスに関連する「境界値分析(限界値分析)」が超頻出です。
- 境界値分析:例えば「100点以下なら合格」という機能がある場合、境界となる99、100、101点をテストします。バグは端っこ(境界)で起こりやすいからです。
- 同値分割:入力値を「合格チーム(0〜100)」と「不合格チーム(101〜)」などのグループに分け、各グループの代表的な値を1つずつテストする方法です。
Contents:カバレッジの深掘り
ホワイトボックスでは「どこまでテストしたか」の指標が必要です。
- 命令網羅:すべての命令(行)を少なくとも1回実行。
- 判定条件網羅:すべての分岐(Yes/No)を少なくとも1回実行。
どちらがより厳しい(テストが細かい)かは、試験でもよく問われます。
Agitation:もし手法を間違えたら?
「ブラックボックスだけで全部テストしよう!」という考えは危険です。 一見、外からは正しく動いているように見えても、内部でメモリを大量消費していたり、特定の1億分の1の確率でフリーズするコードが眠っていたりします。「中も見ないと、最後の一刺しは防げない」のがシステム開発の怖さです。
Solution(Hacks):AIに「境界値」を考えさせる
手作業でテストデータを考えるのは意外と大変ですが、AIを「テストエンジニア」として使ってみましょう。
学習ハック:ChatGPTでテストケースの洗い出し 「入力フォーム:年齢(0〜120歳の整数)。0歳以下や数値以外はエラーという仕様です。このブラックボックステストにおいて、同値分割と境界値分析に基づいたテストデータを最小限かつ網羅的にリストアップして」と聞いてみてください。「どんな値が怪しいのか」というテストのセンスが磨かれます。
まとめ
中身を見る「白」、外から見る「黒」。
試験対策としては、単体テスト=ホワイトボックス、システムテスト=ブラックボックス、そして「境界値分析」の重要性をセットで覚えておきましょう。
:::tip 試験対策メモ コードの品質を高めるなら白、ユーザーの期待に応えるなら黒です。どちらが欠けても100点のテストにはなりません。 :::