ホワイトボックステスト/ブラックボックステストとは?テスト手法や具体例まとめ

システム開発において、テストは非常に重要なものです。

納品するシステムの品質に大きく影響するテストですが、その方法には色々な方法があります。

手法の一つとして
・ホワイトボックステスト
・ブラックボックステスト
という方法があります。

今回は、ホワイトボックステストとブラックボックステストの
・概要
・テストの目的
・テスト工程における「すり抜け防止と効率化の両立」
などについて説明していきます。

現在テストを行っている人も、テストの精度を上げたいと考えている方も、是非参考にしてみてください。

ホワイトボックステスト/ブラックボックステストとは

ホワイトボックステストやブラックボックステストは、冒頭でもお話した様にソフトウェアのテスト技法を指す言葉です。

アプリケーションやシステムのテストには、開発者や委託された側が実施するテストと、ユーザー側が行うテストがあり、それぞれテストの目的や内容・技法が異なります。

ホワイトボックステストは前者が利用する方法、ブラックボックステストは後者でも使われるテスト技法です。

ホワイトボックステスト/ブラックボックステストの目的と概要

テストは、
「欠陥やバグを見つける」
「仕様通りに実装されていることを担保する」
「リスクを洗い出す」

などの為に行います。

その結果バグが出やすい箇所が分かったり、想定しなかった挙動を発見したりすることで、安定した運用が期待できるようになります。

ホワイトボックステストは中身の見える箱に例えたテスト技法で、モジュールが詳細設計書や仕様書通りであるかを確認するものです。

本来求められる動きを確認するもので、イレギュラーを探すのは目的ではありません。

例えば、
・設計書や仕様書自体の誤りや不備
・仕様漏れ
・テスト対象外のモジュールを結合したときの動作不整合
などを検出することは、ホワイトボックステストの対象外です。

これらを見つけるための技法が、ブラックボックステストです。

ブラックボックステストはアプリケーションを中身の見えない箱として扱い、入力と結果が整合しているか否かを確認するための技法です。

・単体テスト
・結合テスト
・システムテスト
・受け入れテスト
など全てのテストに適用され、外部仕様書ベースのテストに利用されます。

この技法の中では、適切に機能することを外部から見て確認したり、画面の分かり易さやシステムの操作性などのソフトウェア品質を確認したりすることが行われます。

ユーザーと同じようにシステムを利用する立場に立って検証するのが特徴と言えます。

ホワイトボックステスト/ブラックボックステストが使用される場面

大規模なシステムを効率よく開発するために、
「システムをモジュールに分割」
して、開発やテストを行うことが多々あります。

具体的には、フェーズ毎に仕様書や設計書が作られ、それに沿ってコーディングやテストが行われます。

各フェーズでは次のようなテストが行われます。

単体テスト(モジュール開発フェーズ)

単体テストはモジュール毎に行われるテストで、詳細仕様通りに作られているかを確認するものです。

Unit TestやModule Testなどと呼ばれることもあります。

単体テストでは、ホワイトボックステスト技法とブラックボックステスト技法の両方が適用されます。

結合テスト(モジュールを組み合わせるフェーズ)

結合テストは単体テスト完了後に行われるテストで、開発した複数のモジュールなどを組み合わせて動作させたときに正しく動作するか確認するものです。

結合テストではブラックボックステスト技法が適用されます。

総合テスト(アプリケーションに纏めたフェーズ)

総合テストはシステム開発の最終段階で行われるテストで、製品として完成したものを本番と同じ環境で行うものです。

結合テストではブラックボックステスト技法が適用されます。

テスト工程では「すり抜け防止と効率化の両立」が最大の課題

テストに当たっては、様々に組み合わせたテストパターン(入力と期待される出力)を予め用意しますが、このようなテストパターンの組み合わせをテストケースと呼びます。

プログラムの誤りを検出できずに、検査をすり抜けてしまうことがないようにテストケースを準備する必要があります。

ホワイトボックステスト用のテストケースはプログラムの機能に対して
「命令や制御の流れ」
などを網羅的にチェックできるようにするもので、モジュール仕様書や設計書などによって内部構造を理解した上で作られます。

例えば、マスターメンテナンス画面では、
・新規登録
・登録済みデータの変更
・削除
などの機能があるのが一般的です。

場合によっては、適用開始日/終了日などを設けて、別画面できちんとこれらの項目が反映されているのかを確認するなどが考えられます。

こういった、本来の機能に基づいてテストケースを考えていきます。

ブラックボックステストはシステムの内部構造を理解することなく、機能や品質を調べるテスト技法です。

大規模なシステムをテストする場合、統計的にバグや不具合の検出を管理することがあります。

具体的には、テストで見つかったバグや不具合の件数をグラフにプロットすることで、グラフの傾向から
「テストが十分に行われ潜在バグや不具合が出尽くした」
「テストが不十分で潜在バグや不具合が出尽くしていない」
などが推定できます。

ホワイトボックステストとブラックボックステストの使い方例

ここでは、具体的にテストの方法について説明します。

ホワイトボックステストの具体的な進め方:制御フローテスト

ホワイトボックステスト技法は「制御フローテスト」と「データフローテスト」の2つに分かれます。

「制御フローテスト」は、入力値や条件を組み合わせた時の処理の流れが設計書通りか確認するテストで、以下のようにして進めます。

1.フローチャート作り

処理の流れ(if文などの条件式や繰り返しなどのロジックによって指定される)を図示します。

2.カバレッジ基準決定

前章でホワイトボックステストでは
「網羅的にテストする」
と述べましたが、具体的に取り組もうとすると「網羅的」には色々なレベルがあることが理解できます。

そこで、次の3つの基準の中から網羅のレベル(カバレッジ基準)を1つ選択します。

選択した基準に則ってテストケースを作成すれば、目標に沿って漏れなくテストケースを設計することができます。

・命令網羅・・・全て命令が正常に実行されることをテストする
・条件網羅・・・全ての条件分岐が正常に実行されることのテストで、命令網羅を包含する
・複合条件網羅・・・条件に含まれる全ての分岐の組み合わせが正常に実行されることをテストする

コードの網羅性は命令網羅が最も低く、複合条件網羅が最も高く、条件網羅は中間です。

3.カバレッジ基準を網羅する経路を抽出

フローチャートを見ながら、上で決めたカバレッジ基準を全て通るフローチャートの経路を決定します。

4.抽出した経路を通るようにテストを実施

上で抽出した経路を通る入力値を指定してモジュールを動作させてテストします。

5.結果を確認

モジュール動作中に、全ての経路を通ったか確認します。

ホワイトボックステストの具体的な進め方:データフローテスト

「データフローテスト」は、データや変数の
「定義」
「使用(参照)」
「消滅」
に注目したもので、「処理の順序が適切か」「無駄なデータ処理をしていないか」などを確認します。

データフローはモジュールの中で使われるデータや変数処理の流れのことで、データフローテストは以下のようにして進めます。

1.データフロー作り

データの流れを図にして見える化します。

2.未定義・未使用データを確認

データフローで、未定義・未使用になっているものを確認します。

ブラックボックステストの具体的な進め方

ブラックボックステスト技法には4つの実践的な技法があります。

最初に紹介するのは「同値分割法」と「境界値分析」で、効率的にバグを検出するための技法です。

前者は、テストケースを設計する際に
「出力が一致する入力値の集合に着目してテストパターンを絞り込む」
もので、テスト工数の削減が可能です。

後者は
「仕様条件の境界付近にバグが潜在していることが多い」
という経験則を利用したもので、効率的にバグを検出するのに役立ちます。

次に「状態遷移テスト」。

このテストは、ユーザーのキー操作やマウス入力などのイベントによって状態が変化するソフトウェアをテストするものです。

イベントに応じて正しく状態遷移することを確認するテストで、状態遷移図や状態遷移表を利用したテストが行われます。

使われる状態遷移図や状態遷移表は、ソフトウェア開発仕様書に書かれている内容を整理してテストの抜けが起こらないように不足部分を補って作成します。

次に、「デシジョンテーブルテスト」。

複数の条件があり、その組合せによって異なるアクションをするソフトウェアをテストする場合、条件の全ての組合せを一つの表にまとめることで条件組合せの抜けを防ぐことができます。

デシジョンテーブルは
「様々な条件(入力)で、どのように動作する(出力)するか」
を表形式に整理したもので、複雑な仕様に対して条件の考慮漏れを防ぐことができます。

最後に紹介する技法は「組み合わせテスト」です。

組み合わせテストとは、多数の入力条件の値をいろいろ組み合わせて行うテストで、先に紹介したディジョンテーブルテストも組み合わせテストの一つです。

入力条件の全ての組み合わせについてテストすることは膨大な数になり、現実的ではありません。

そこで、全組み合わせでなく、組み合わせの一部のみでテストすることが行われています。

組み合わせテストでは、テスト結果を左右するパラメータとしての「因子」と、各因子の取り得る値である「水準」を組み合わせた表を用います。

例えば、「性別」という因子の水準は「男性」「女性」です。

一般的には、組み合わせ表は
「複数の因子とそれぞれに複数の水準を持ったもの」
です。

組み合わせテストでは、直交表やAll Pairs法などの手法を使います。

直交表を用いたテストでは、複数の因子の中から任意の2つの因子を選び、その全ての水準を組み合わせたテストが行われます。

All Pairs法のテストでは、任意の2つの因子に対して、その全ての水準を1回以上組み合わせるようにテストします。

精度の高いシステム開発はAMELAに

今回は、ホワイトボックステストとブラックボックステストについて見てきました。

テストの精度によって、開発後にかかるメンテナンス費用が大きく異なってきます。

例えば、開発費用が安い企業に依頼をしても、きちんとテスト工数を設けていない場合には、
・運用開始後に大きな問題が発覚する
・細かいバグが後から大量に見つかる
・誰も気付かないものの、データが異常な状態で蓄積される
などが起こります。

それに後から気付くと、別途修正に人員や資金を投入する必要があるなど、大きなリスクになります。

このようなことが起こらないためにも、実績と高いスキルを持った企業へ開発を依頼する必要があります。

AMELAでは、高いスキルを持った海外エンジニアも多数抱えており、非常に多くの実績もあります。

是非、ご相談頂ければ幸いです。