white-box testing
ソフトウェアプログラムの内部構造構造に基づいて、網羅的に動作検証を行うソフトウェアテストの総称である。名称はブラックボックステストとは逆に“内部が明らかであること”を意味する。
ソフトウェアプログラムは、コンピュータへの指示として記述されたロジック(命令文や条件分岐、反復などの組み合わせ)と、その操作対象であるデータ(変数、定数など)の集合体である。ホワイトボックステストは、このロジックやデータを参照してテストケースを作成するテスト技法である。ホワイトボックステストには大きく分けて制御パステストとデータフローパステストがある。
ホワイトボックステストの基本は、テストを漏れなく、網羅的に行うことである。理想をいえば、あり得るすべての制御パスを実行することが望ましいが、実用ソフトウェアの規模では完全網羅テストは事実上不可能なので、実際にはより緩やかなカバレッジ基準に従い、簡略化されたテストが実施される。すなわち“広く薄く”テストを実行するわけである。
漏れなくテストを行うという目的の実現度を計測するため、ホワイトボックステストでは「コードカバレッジ」という指標を用いる。これはコード全体のうち、テスト対象となった部分の割合をパーセンテージで示したものである。カバレッジを算出するには対象コード内に命令文がいくつあるか、条件分岐がどれだけあるかを知らなければならない。ゆえに“ホワイトボックス”なのである。
ホワイトボックステストは、ブラックボックステストと相互補完の関係ある。ホワイトボックステストでは制御パスがすべて矛盾なく動作していても、それが仕様に合致しているかどうかを確認できない。仕様ベースの確認は、ブラックボックステストの役割となる。
逆にホワイトボックステストは、仕様にはない実装をチェックしたり、単純なコーディングミスや偶然の正確(※)を検出したりできる。リファクタリングでは、変更前と変更後でそれぞれコードカバレッジ100%となるテストをホワイトボックス技法で設計することで、コードの挙動に変化がないかの確認にも利用できる。
※ 『ソフトウェア・テストの技法〈第2版〉』は、「y=2x」のところを「y=x2」と誤ったとき、テストデータが「2」だとその誤りに気が付かない、という例で偶然の正確を説明している
コード中に多重ループなどがあってホワイトボックステストのコードカバレッジが十分に確保できないような場合、ブラックボックステストで機能検証が十分できていれば、カバレッジ基準やカバレッジ率を低くくする決断もできるだろう。逆に仕様の不完全さによって十分なブラックボックステストができない場合、ホワイトボックステストがテスト漏れをある程度補う。
通常、ホワイトボックステストは単体テストで実施するとされる。ロジックが単純な単体(モジュール)レベルでカバレッジを確保し、品質を高めておくことは結合テスト以降の手戻りリスクを軽減する効果が期待できる。
近年、xUnitなどのユニットテストフレームワークの普及もあって、開発者が単体テストを行う例が増えてきた。デベロッパテストとしての単体テストはテストファーストで行われる場合、コードがない状態でテストケースを書くため、必然的にブラックボックステストとなる。これに加えてQAテストとしての単体テストを行うのであれば、ホワイトボックステストが有効ということになろう。
グローバル変数やモジュール間で動的資源を扱っているシステムでは、統合テストやシステムテストでホワイトボックステストを行う意義があるとされる。ただし、ホワイトボックステストは、複雑なロジックや多数のデータを対象にするとテスト量が膨大となり、時間とコストが掛かる。
その意味ではバグの出やすい領域を選び出して、その部分だけにホワイトボックステストを行ってカバレッジを得るという方法もある。どこがバグが出やすいかはブラックボックス技法のエラー推測などを適用とよいだろう。
ホワイトボックステストの類義語として、「論理依存テスト」「構造テスト」「論理網羅テスト」「論理駆動テスト」「コードベーステスト」「ガラス箱テスト」「透明箱テスト」などが使われる。
▼『ソフトウェアテスト技法――自動化、品質保証、そしてバグの未然防止のために』 ボーリス・バイザー=著/小野間彰、山浦恒央=訳/日経BP出版センター/1994年2月(『Software Testing Techniques, 2nd Edition』の邦訳)
▼『はじめて学ぶソフトウェアのテスト技法』 リー・コープランド=著/宗雅彦=訳/日経BP社/2005年11月(『A Practitioner's Guide to Software Test Design』の邦訳)
▼『経験ゼロでもできるプログラミング現場の単体テスト』 片桐一宗=著/翔泳社/2009年5月
▼『ソフトウェア・テストの技法〈第2版〉』 グレンフォード・J・マイヤーズ、トム・バジェット、テッド・M・トーマス、コーリー・サンドラー=著/長尾真=監訳/松尾正信=訳/近代科学社/2006年7月(『The Art of Software Testing: 2nd ed』の邦訳)
Copyright © ITmedia, Inc. All Rights Reserved.