ソフトウェアやシステムは人間が開発する以上、不具合などが発生することはどうしても避けられません。こうした不具合を防ぐためにはソフトウェア製品の品質と適切な機能を保証することが欠かせませんが、その上で主要な役割を果たすのがソフトウェアテストです。ソフトウェアテストにはいくつかの手法がありますが、今回は「ホワイトボックステスト」というテスト技法について、詳しくご説明します。
1. ホワイトボックステストとは
ホワイトボックステストとは、どのコードの行がエラーを引き起こしているかをテストすることでプログラムのソースコードと内部構造を評価するテスト技法です。つまり、システムの内部構造がクリア(ホワイト)な状態を前提としたテストということです。
この技法はオープンボックステスト、クリアボックステスト、コードベーステスト、単純なボックステスト、ガラスボックステストとも呼ばれ、テスト対象は機能、機能モジュールなどのソフトウェアコンポーネントです。ホワイトボックステストは、ソフトウェア開発の初期でエラーを検出する上では最も効果的な手法です。
2. ホワイトボックステストのメリットとデメリット
仮にGUI(Graphical User Interface、グラフィカル・ユーザ・インターフェース)が使用できなくてもテスト自体は早めに開始することが可能です。 開発者は、単体テストの作成中にホワイトボックステストを使用しますが、Junit (Java フレームワーク)、 PHPUnit (PHPフレームワーク)、NUnit (.Net フレームワーク) などの単体テスト補助ツールを利用することで品質保証における客観性を保証することができます。ただし、ホワイトボックステストを実行するテスターはコードを詳しく理解できる知識を持っている必要があります。また、コード構造によりテストケースの再利用はほとんど不可能です。
3. ホワイトボックステストにおける2種類の技法
ホワイトボックステストには、「制御フローテスト」「データフローテスト」という2種類の技法があります。テストケースを作成する場合、この2つの技法を使用することが多いです。以下にそれぞれについて説明します。
a) 制御フローテスト
制御フローテストでは、プログラムコードのモジュールを通じて実行パスを確認し、それらのパスをカバーするテストケースを作成して実行します。制御フローテストの基盤は制御フローグラフです。コードのモジュールがグラフに変換され、グラフを通るパスが分析され、そこからテストケースが作成されます。
以下は制御フローテストの前提条件です。
· 仕様は正しい
· データが定義され、適切に接近されている
· 制御フローに影響を与えるバグ以外のバグなし
b) データフローテスト
データフローテストは制御フローテストに似ていますが、フローグラフを処理する代わりに、データフローグラフに基づいています。データフローは、そのスコープ内の変数に関連するイベントに基づいて構築されます。
データフローテストの手順:
· データフローグラフの作成
· テスト基準の選択
· データフローグラフの選択基準を満たすパスの分類
· テスト入力を導出するためのパス述語式の開発
データフローの異常は以下の原因により、値と変数の関連付け時に検出されます。
· 変数が初期化なしで使用される
· 初期化された変数が1回も使用されていない
まとめ
今回は主要なソフトウェアテスト技法としてホワイトボックステストについてご紹介しました。なお、ホワイトボックステストを実行するためには優れたプログラミング言語スキルが必要であり、通常は開発者とテスターの両方が実行を担当します。