ブラックボックステストとは?ホワイトボックステストとの違いや、単体テストとの関係についても解説
ブラックボックステストは、ソフトウェア開発における重要なテスト手法のひとつです。
このテストは、システムの内部構造を意識せずに、外部から見える動作や結果を確認するアプローチを取ります。
ホワイトボックステストと異なり、具体的なコードの内容や流れに依存しないため、仕様や要件に基づいてソフトウェアの正確さを確認することが可能です。
本記事では、ブラックボックステストの概要や意義、種類について詳しく解説し、ホワイトボックステストや単体テストとの違いも併せて紹介していきます。
テスト手法を選ぶ際の参考になるよう、実践的な適用例も交えて説明していくので、ぜひ参考にしてください。
ブラックボックステストとは
ブラックボックステストは、ソフトウェアの外部からその動作を検証するテスト手法です。
このテストは、ソフトウェアの内部構造やコードの詳細には関与せず、仕様書や要件定義書といった外部ドキュメントに基づいて、システムが期待通りの動作をするかどうかを確認します。
あくまでもテスト対象の外的な振る舞いに焦点を当て、その結果に基づいて合否を判断するアプローチです。
ブラックボックステストの意義
ソフトウェアの仕様や要求をベースとしたテストである
ブラックボックステストの最大の意義は、ソフトウェアがユーザーの期待や要求を満たしているかを、仕様や要件に従って確実に確認できる点にあります。
このテスト技法を活用することで、技術者が内部の実装に関わらず、ソフトウェア全体の機能や動作に対する信頼性を担保できます。
ブラックボックステストは、仕様書や要件定義書などの外部ドキュメントをベースに行われるものです。
そのため、このテストを通じて、ソフトウェアが事前に定められた要件や期待される動作を満たしているかを検証できます。
結果として、開発の過程で見落としがちな機能や動作の抜け漏れを防ぐ役割も果たします。
仕様や要件の曖昧さをカバーできる
ブラックボックステストは、テストケースを具体例に基づいて構築する「例ベースのテスト」であるため、仕様や要件に対して明確な結果を得ることができます。
この過程で、仕様の矛盾や曖昧な部分が浮き彫りになることもあり、それらを修正することでより精緻なソフトウェア開発が可能となります。
ブラックボックステストのデメリット
機械的なカバレッジ算出が難しい
ブラックボックステストでも、ホワイトボックステストのようにソースコードのカバレッジを算出できます。ブラックボックステストを実行した結果、ソースコードのどれだけの部分が実行されたのかを計測するだけです。
ホワイトボックステストのカバレッジの測定についてはこちらの記事を参照ください。
しかし、ブラックボックステストはそもそも仕様や要件を元にしたテストです。仕様や要件を十分にテストできているかどうかは、コードカバレッジの算出からは分かりません。別の言い方をすると、ブラックボックステストが十分に実施されたかどうかを判断するのに、コードカバレッジを利用するのは適切ではありません。
ブラックボックステストのカバレッジを算出するには、以下で取り上げる同値分割などのテスト技法を用いてテスト対象の仕様を分析し、カバレッジアイテムを導出する必要があります。これらは機械的に実行できるものではないため、人が仕様書などをベースにして分析することが必要です。
ブラックボックステストの種類
ブラックボックステストには、テスト対象のシステムやコンポーネントに対する入力、出力をさまざまな観点から評価するために、いくつかの技法が存在します。これらの技法は、システムの異なる側面を効率的に検証し、潜在的な不具合を発見するのに便利です。
以下では、主要なブラックボックステストの技法について簡単に説明します。これらの技法の具体例については、後述の「ブラックボックステストのやりかた」で詳しく説明しています。
(参考: https://www.jstqb.jp/dl/JSTQB-SyllabusFoundation_VersionV40.J02.pdf#page=39)
同値分割
同値分割法は、データを等価なグループに分類し、その代表的な値を使ってテストを行う手法です。
この「等価なグループ」は「パーティション」と呼ばれ、同じ性質や特徴を持つデータの集まりを指します。
これにより、すべてのデータをテストするのではなく、重要なパーティションをカバーする効率的なテストが可能です。
この方法では、有効な値と無効な値に分けて、各パーティションから1つずつテストケースを選択します。
境界値分析
境界値分析は、同値分割法を拡張したもので、パーティションの境界に焦点を当ててテストを行います。同値分割とは異なり、パーティション同士が境界を持つ場合に利用可能です。たとえば、同値分割は「3の倍数」という同値パーティションを持つことができますが、境界値分析はパーティション同士が大小の関係(不等号)で表せる場合にのみ利用できます。
数値や範囲の制約がある入力に対して、もっともエラーが発生しやすい境界付近の値を特に注意してテストすることで、システムの堅牢性を検証します。
この技法は、特に数値範囲や制限が明確な要件に対して有効です。
デシジョンテーブル
デシジョンテーブルは、複雑なビジネスルールや条件に基づいたシステムの動作を表現するための手法です。
複数の条件とそれに対するアクションの組み合わせを整理し、漏れのない包括的なテストを行うことが可能です。
システムが異なる条件で異なる動作を行う場合、デシジョンテーブルを使用することで、その動作を効率的に網羅できます。
状態遷移テスト
状態遷移テストは、システムが異なる状態間でどのように遷移し、どのように応答するかを評価する手法です。
特に、システムがイベントに応じて異なる振る舞いをする場合、このテストが有効でしょう。
状態の遷移や無効な遷移を検証することで、システムの一貫性や信頼性を確認できます。
他のテストとの違い
ブラックボックステストは、ソフトウェアの仕様や要求に基づいたテスト方法ですが、他のテスト手法と比較すると、アプローチや目的が異なります。
ここでは、ホワイトボックステストや単体テスト・結合テストとの違いについて解説します。
ホワイトボックステストとの違い
ホワイトボックステストは、プログラムの内部構造やコードそのものに着目し、各部分が正しく動作するかを確認するテスト手法です。
一方、ブラックボックステストは、ソフトウェアの内部実装には立ち入らず、あくまで入出力や仕様に基づいて動作を検証します。
両者の違いは、テストする対象が「内部構造」か「外部仕様」かにあり、目的や対象が大きく異なります。
単体テスト・結合テストとの違い
単体テストや結合テストは、通常プログラムの内部を詳細に検証するホワイトボックステストの一部として実施されます。
単体テストでは個々の機能を、結合テストでは複数の機能が連携する際の動作を確認することが目的です。
ただし、APIやSDKといった外部向けのインターフェースを持つコンポーネントの場合、ブラックボックステストの技法を用いて、外部からの入力に対して期待通りの出力が得られるかを検証することもあります。
このように、テスト対象や目的によって適切なテスト技法が使い分けられています。
ブラックボックステストのやりかた
ブラックボックステストは、仕様に基づいたテストケースを作成し、期待される動作を確認することで行われます。
具体的には、ソフトウェアの振る舞いを予測し、入力に対する出力の正確性を検証するなどです。
ここでは、同値分割や境界値分析、デシジョンテーブル、状態遷移テストといった代表的な手法に基づく具体例を紹介します。
テスト対象のオンラインショッピングサイトの仕様書
オンラインショッピングサイトでは、ユーザー登録、商品購入、送料計算、決済、アカウント管理といった機能が提供されています。
以下は、テスト対象となる具体的な仕様です。
ユーザー登録
年齢制限:ユーザーは「18歳以上」である必要があります。
送料計算
購入金額、配送地域、会員ステータスに応じて送料が異なります。
会員でかつ購入金額が5,000円以上の場合は送料無料、それ以外は有料です。
アカウント管理(状態遷移)
ユーザーは「ログイン」「認証中」「認証完了」「ログアウト」の状態を持ちます。
同値分割と境界値分析の適用例
ユーザー登録画面の年齢入力フィールドに対し、「18歳以上」という制限がある場合、以下のように入力データをグループ分けし、代表的なデータをテストします。
18歳未満のグループから:17歳
18歳のグループから:18歳
18歳以上のグループから:19歳
これにより、各パーティションの代表的なデータが正しく動作するかを確認します。
また、代表値の選出には 境界値分析 を用います。
境界の直前:17歳
境界そのもの:18歳
境界を超えた値:19歳
これにより、年齢制限の境界付近での不具合が発生しないかを検証します。
デシジョンテーブルの適用例
次に、送料計算の仕様に基づいてデシジョンテーブルを作成し、各条件の組み合わせに対してテストを行います。
条件
会員ステータス:会員 or 非会員
購入金額:5,000円以上 or 未満
配送地域:通常地域 or 離島
期待される結果
例1:「会員」かつ「購入金額が5,000円以上」→ 送料は無料
例2:「非会員」かつ「購入金額が5,000円未満」→ 送料は有料
デシジョンテーブルを用いることで、全ての条件の組み合わせに対して期待される動作を整理し、漏れなくテストケースを作成します。
状態遷移テストの適用例
アカウント管理の機能では、ユーザーが「ログイン」「認証中」「認証完了」「ログアウト」という状態を持つため、これらの状態間の遷移が正しく行われるかを確認します。
具体例
「ログイン」から「認証中」に遷移し、次に「認証完了」へ移行する。「認証中」から直接「ログアウト」することはできない。
各状態遷移に対してテストケースを作成し、期待される順序での遷移が行われ、想定外の状態遷移がないことを確認します。
まとめ
ブラックボックステストは、ソフトウェアの仕様や要求を基に行うテストであり、特に外部からの視点で正確な動作を確認するのに適しています。
仕様の曖昧さをカバーし、予期しない動作を発見できる一方で、カバレッジの算出が難しいというデメリットもあります。
代表的なテスト手法として、同値分割や境界値分析、デシジョンテーブル、状態遷移テストがありますが、いずれも仕様に基づいた明確なテストケースを作成し、効率的に不具合を検出することが可能です。
また、ホワイトボックステストや単体テスト・結合テストとの違いを理解することで、適切な場面で適切なテスト手法を選択することが重要です。
品質の高いソフトウェアを提供するために、これらのテスト技法を適切に使い分けられるようにしておきましょう。