コラム

  • 2021.07.29
  • ソフトウェアテスト
  • #テスト実行
  • #テスト技法
  • #テスト計画
  • #テスト設計
  • #基礎知識

ホワイトボックステストとは ブラックボックステストとの違いやその手順、よく使われる手法を解説

ホワイトボックステストとは

ソフトウェアに関するテスト手法にはさまざまな種類がありますが、今回は「ホワイトボックステスト」についてご紹介いたします。

ホワイトボックステストとは、システムの内部構造に重点を置いたテスト手法となります。イメージとしてはシステムの内部構造がクリア(ホワイト)な状態を前提としたテストとイメージしてください。
主にシステム内のプログラムを網羅的に確認したい際に用いられることが多く、プログラムからの命令文、分岐条件を把握し、プログラム全体に対してどの程度の網羅率でテストを行うかを検討する必要があります。
網羅率、テスト手法を意識したテストケースの作成をしないと、本来ホワイトボックステストで見つける必要がある不具合を見逃してしまい、後工程で不具合が多発することにつながるケースもあります。その結果、システムの品質担保やプロジェクトの進捗に影響が出ることがあるため、非常に大切なテストとなります。

ホワイトボックステストを説明したイメージ

ブラックボックステストの違い

ブラックボックステストはシステムの外部仕様に重点を置いたテスト手法となり、イメージとしてはシステムの内部構造が不明瞭(ブラック)な状態を前提としたテスト手法とイメージしてください。そのため、システムの内部構造は意識せずにシステムに入力する情報、システムから出力される情報に着目したテスト手法となります。システムの内部構造を意識しないテスト手法のため、ユーザーと同じようにシステムの外部からシステムに触れてテストを実施します。

ソフトウェアテスト入門動画

ブラックボックステストの違いを説明したイメージ

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

特徴のイメージ

ホワイトボックステストでは、システムを構築しているプログラムについての知識が求められ、システム開発者が実施することが多いです。そこで、基本的なテスト手順やホワイトボックステストのメリット、デメリットについてご紹介いたします。

基本的な手順

最初にプログラムの制御フロー、データの定義が明記されている設計書 (※企業によって基本設計書、詳細設計書など呼び方はさまざまかと思います)を準備し、「設計書に明記されている処理が実行できること」を確認していきます。しかし、テストの目的としては設計書通りに動くことを確認するだけでなく、設計書に不明瞭な処理やデータの記載があればその点もテストで確認することで、システム開発が想定できていなかった不具合を炙り出すことができ、品質向上につなげることができます。また、一例として不具合の炙り出し方としては以下のようなものがあげられます。

・設計書に存在している処理フローについて網羅率を上げてテストをする
・設計書に指定されているデータの設定範囲外でテストをする(境界値分析)

メリット

・開発担当者が気づけなかったレベルの潜在的な不具合の抽出がしやすい
・プログラムをソースコードレベルでデバックすることが多いため、さまざまなデータの範囲を指定してテストが可能

デメリット

・設計書を「正」としてテストをするため、設計書に記載されている内容が根本的に誤っている場合は、誤りに気がつくことがむずかしい
・システムの内部構造を意識したテストのため、設計書通りに動作していることは確認できるが、「仕様書通りの振る舞いであるか?ユーザビリティを考慮できているか?」までは判断しにくい。ブラックボックステストなどの他のテスト手法を用いて確認する必要がある

ソフトウェアテスト入門動画

ホワイトボックステストで使われる手法

では、ホワイトボックステストでよく使われている手法である「制御フローテスト」「データフローテスト」についてそれぞれ解説をしていきます。また、ブラックボックステストでよく用いられる「同値分割法」「境界値分析」についてもホワイトボックステストでは使用するケースもありますので併せて解説いたします。

制御フローテスト

プログラム内にあるソースコードには分岐条件が含まれているケースが多くあり、分岐条件に対して特定のデータを設定することでプログラムが設計書の意図通りの挙動をしていることを確認する手法を「制御フローテスト」と呼びます。
分岐条件で設定できるデータは条件が複雑になるとデータのパターンが膨大になるため、すべてのパターンを実施することは現実的ではありません。
テスト対象となるシステムの重要度、複雑度を考慮して適切なテストデータのパターンを設定する必要があり、プログラム内の処理経路を少なくとも1度は実行できるようなパターンを組む必要があります。
ただ、処理経路に対して1度だけテストパターンを実行しただけではテストとしては不十分なケースが多く、後工程で多くの不具合が発生し、テストが止まってしまうこともあるため、可能な範囲で処理経路に対して多くのテストパターンを実行できると、後工程のテストもスムーズに進むケースが比較的多く見られます。

制御フローテストのイメージ

データフローテスト

上記の「制御フローテスト」はプログラムの処理フローに着目したテスト手法ですが、対して「データフローテスト」はプログラム内のデータの流れに着目したテスト手法となります。
データはプログラム内で変数として「定義」→「使用」→「消滅」といったライフサイクルで使用されており、開発者のコーディングミスによって変数に不正な値が入力されていることを見つけるのが、このテストの主な目的となります。

データフローテストのイメージ

同値分割法

「同値分割法」は、ブラックボックステストの技法のひとつで、同値領域から代表値を実行するテストケ-スを設計するものです。
有効または無効のような同様の結果をもたらす値を、それぞれ「同値クラス」として分類し、最低1回各同値クラスのグループから実行するように設計するのが原則になります。
これによりテストケースを限りなく少なくし、効率よく不具合を発見するための技法です。

(例)以下の①~③のような仕様が存在した場合、基本情報処理の未取得者について「同値分割法」を用いると以下のように表現ができます。
①基本情報処理の資格取得者は1万円割引
②基本情報処理の未取得者でも、40歳以上であれば5,000円割引
③上記①、②の条件に合致していない場合、30歳以上であれば3,000円割引
④上記①~③の条件に複数合致しても重複して割引を受けることはできない

ソフトウェアテスト入門動画

境界値分析

「境界値分析」もブラックボックステストの技法のひとつで、仕様に定められている条件の境界値を基にして行うテスト技法です。
境界値とは、ある範囲の最小値または最大値などの同値分割した領域の端にあたる値です。
具体的には「未満」や「以下」などが該当し、こういった境界部分は、間違いを引き起こしやすく、不具合につながりやすいため、境界値分析で検証する必要があります。

(例)以下の①~③のような仕様が存在した場合、基本情報処理の未取得者について「境界値分析」を用いると以下のように表現ができます。
①基本情報処理の資格取得者は1万円割引
②基本情報処理の未取得者でも、40歳以上であれば5,000円割引
③上記①、②の条件に合致していない場合、30歳以上であれば3,000円割引
④上記①~③の条件に複数合致しても重複して割引を受けることはできない

ホワイトボックステストとカバレッジ(網羅率)

ホワイトボックステストではシステムの内部構造を網羅的にテストするために、どの程度の網羅率でテストが実行できるかを知る必要があります。網羅率のことを「カバレッジ(※)」と呼び「C0(命令網羅)」「C1(分岐網羅)」「C2(条件網羅)」という表現を用いてテストパターンの検討を行います。
カバレッジの基準が高いほど、網羅率は高くなるため、不具合の抽出はしやすくなりますが、その分、工数も大きくなるためテストスケジュールを圧迫する可能性があります。
「制御フローテスト」の説明でも触れた通り、カバレッジについてもシステムの重要度、複雑度、テストスケジュールを考慮して、品質担保が可能なカバレッジを選択してテストをすることが重要となります。

※カバレッジについての考え方は以下を参照ください。
https://service.shiftinc.jp/column/4547/

まとめ

ホワイトボックステストはシステムの内部構造に着目したテストであるため、設計書通りにプログラムが動くかどうかに意識が向きがちではありますが、プログラムが動くかどうかをテストすることが目的でなく、ユーザーがシステムをどのように使用するかを意識してテストをすることが大切です。
そのためには、ホワイトボックステストであってもシステム外からの入力情報、出力情報も意識してテストができると、品質水準の高いテストが実施できます。
「ホワイトボックステストだけ実施すればよい」、「ブラックボックステストだけ実施すればよい」、ではなくプロジェクトの状況に合わせて都度適切なテスト手法を選択していただければと思います。

資料ダウンロード/動画視聴

ソフトウェアテスト入門動画

テスト計画入門動画

SHIFTサービス資料

テストサービス導入事例集

関連サービス