ブラックボックステストとは

【今さら聞けない】ブラックボックステストとは?特徴や具体的な手法を紹介

ブラックボックステストは、ソフトウェアの内部構造や実装の詳細を知らずに、入力と出力だけを確認することでシステムの機能をテストする方法のことです。また、開発者目線で実施されるホワイトボックステストと対照であり、ブラックボックステストはユーザー目線で実施されるテストです。

 

本記事では、ブラックボックステストの特徴と手法を具体的に解説します。

目次

ブラックボックステストとは

ブラックボックステストとは、ソフトウェアのテスト手法の一つで、システムの内部構造や実装の詳細を考慮せず、入力に対する期待される出力のみに焦点を当ててテストを行う方法です。ブラックボックステストでは、システムを外部から見た「ブラックボックス」のように扱い、システムの振る舞いが仕様や要件に準拠しているかどうかを確認します。

 

一方、ホワイトボックステストは、ソフトウェアの内部構造やコードを詳細に調査してテストを行う手法です。ホワイトボックステストでは、コードの品質や論理的な正確さ、パフォーマンスなどを検証することが目的です。

 

ブラックボックステストとホワイトボックステストの違いをわかりやすく比較すると以下の通りです。

テストの対象

ブラックボックステスト:システムの入力と出力、機能や振る舞い

ホワイトボックステスト:システムの内部構造、コード、アルゴリズム

テストの視点

ブラックボックステスト:システムを外部から見た視点、エンドユーザーの視点

ホワイトボックステスト:システムの内部から見た視点、開発者やテスターの視点

テストの目的

ブラックボックステスト:システムが仕様や要件に従って正しく機能するかを検証

ホワイトボックステスト:コードの品質、論理的な正確さ、パフォーマンスなどを検証

両者は異なる視点や目的でテストを行うため、ソフトウェアの品質を向上させるために、ブラックボックステストとホワイトボックステストを組み合わせて使用することが一般的です。

ブラックボックステストの種類

ブラックボックステストには、以下のような種類があります。

同値分割法(Equivalence Class Partitioning)

同値分割法(Equivalence Class Partitioning:ECP)は、ブラックボックステストの一手法であり、入力データを同値クラスと呼ばれるグループに分割して効率的にテストケースを作成する方法です。同値分割法の基本的な考え方は、ある同値クラス内のデータがシステムに与える影響が同じであると仮定することです。そのため、各同値クラスから代表的な値を選んでテストすることで、そのグループ全体をカバーすることができます。

 

同値分割法の手順は以下の通りです。

 

入力データの範囲を特定する:

テスト対象のシステムが受け入れる入力データの範囲を特定します。

 

同値クラスを識別する:

入力データの範囲を、システムに対して同じ振る舞いを期待されるグループ(同値クラス)に分割します。同値クラスは、有効な入力データの範囲(正常系)と無効な入力データの範囲(異常系)に分けることが一般的です。

 

各同値クラスから代表的な値を選ぶ:

各同値クラスから1つまたは複数の代表的な値を選びます。これにより、そのクラス全体をカバーすることができます。

 

テストケースを作成する:

選択された代表的な値を使用して、テストケースを作成します。

 

例として、年齢を入力するシステムがあるとしましょう。このシステムでは、18歳から65歳までの入力を有効な値と判断するとします。この場合、同値クラスは以下のようになります。

 

有効な入力データの範囲  (正常系)  :18歳から65歳まで(例:18歳、35歳、65歳)

無効な入力データの範囲1(異常系):18歳未満(例:0歳、10歳、17歳)

無効な入力データの範囲2(異常系):65歳超(例:66歳、80歳、100歳)

 

これらの同値クラスから代表的な値を選んでテストケースを作成し、システムが正しく機能するかどうかを検証します。同値分割法を使用することで、テストケースの数を減らし、効率的にシステムをテストすることができます。これにより、重複するテストを排除し、テストの範囲を広げることが可能になります。ただし、同値分割法では、同値クラス内でのデータの違いによる問題を検出することは難しいため、他のテスト手法と組み合わせることが一般的です。

境界値分析(Boundary Value Analysis)

境界値分析(Boundary Value Analysis:BVA)は、ブラックボックステストの手法の一つで、入力データの境界値に焦点を当ててテストケースを作成する方法です。境界値は、システムの振る舞いが変わるポイントであり、エラーが発生しやすいとされています。そのため、境界値分析を用いることで、システムの問題を効率的に特定することができます。

 

境界値分析の手順は以下の通りです。

 

入力データの範囲を特定する:

テスト対象のシステムが受け入れる入力データの範囲を特定します。

 

境界値を識別する:

入力データの範囲から、最小値、最大値、およびその前後の値を特定します。これらの値が境界値です。

 

テストケースを作成する:

識別された境界値を使用してテストケースを作成します。

 

例として、先ほどの年齢システムを使用します。境界値は以下のようになります。

 

最小値:18歳

最小値の直前:17歳

最大値:65歳

最大値の直後:66歳

これらの境界値を用いて、以下のテストケースを作成します。

 

年齢に17歳を入力する(最小値の直前)

年齢に18歳を入力する(最小値)

年齢に65歳を入力する(最大値)

年齢に66歳を入力する(最大値の直後)

境界値分析を用いることで、システムの問題を効率的に特定できますが、他の入力データ範囲に関する問題を検出できないため、同値分割法などの他のテスト手法と組み合わせて使用することが一般的です。

デシジョンテーブルテスト(Decision Table Testing)

デシジョンテーブルテスト(Decision Table Testing)は、ブラックボックステストの一手法で、複数の入力条件とその組み合わせに対する期待される出力を表形式で表現し、それに基づいてテストケースを作成する方法です。複雑なビジネスルールや条件分岐が多いシステムに対して特に有効です。

 

デシジョンテーブルテストの手順は以下の通りです。

 

条件とアクションの特定:

システムに関連する入力条件と、それに基づいて実行されるアクション(期待される出力)を特定します。

 

デシジョンテーブルの作成:

入力条件を行に、アクションを列に持つ表を作成します。各セルには、その条件下でアクションが実行されるかどうかを示す記号(通常、✖や〇)を記入します。

 

テストケースの選択:

デシジョンテーブルを参照し、各条件の組み合わせに対応するテストケースを選択します。

 

テストケースの実行:

選択されたテストケースを用いて、システムが期待される出力を返すかどうかを検証します。

 

例として、割引クーポンの適用ルールをテストする場合を考えましょう。このシステムでは、次の2つの条件があります。

 

条件1:顧客がメンバーかどうか(Yes/No)

条件2:購入金額が100ドル以上かどうか(Yes/No)

 

期待されるアクションは、割引率(0%または10%)です。デシジョンテーブルを作成すると以下のようになります。

 

条件1

条件2

アクション(割引率)

10%

✖

✖

0%

✖

0%

✖

✖

0%

 

この表に基づいて、条件のすべての組み合わせに対するテストケースを作成し、システムが正しく割引クーポンを適用しているかどうかを検証します。デシジョンテーブルテストにより、条件の組み合わせを網羅的にカバーし、システムの品質を向上させることができます。

状態遷移テスト(State Transition Testing)

状態遷移テスト(State Transition Testing)は、ブラックボックステストの一手法で、システムが持つ状態とそれらの状態間の遷移をテストする方法です。状態遷移テストは、状態マシンの概念に基づいており、特に状態に依存するシステムやイベント駆動型システムのテストに適しています。

 

状態遷移テストの手順は以下の通りです。

 

状態と遷移の特定:

システムが持つ状態と、それらの状態間で発生する遷移(トリガーイベント)を特定します。

 

状態遷移図の作成:

状態と遷移を要素とする状態遷移図を作成します。状態は通常、円や楕円で表現され、遷移は状態間を結ぶ矢印で表現されます。

 

テストケースの選択:

状態遷移図に基づいて、システムが正しく状態を遷移させることを検証するテストケースを選択します。全ての状態と遷移をカバーすることが理想的ですが、リソースの制約によっては、重要な状態と遷移に焦点を当てることが必要です。

 

テストケースの実行:

選択されたテストケースを用いて、システムが状態遷移を正しく行っているかどうかを検証します。

 

例として、オンラインバンキングシステムでATMカードのロック/アンロック機能をテストする場合を考えましょう。このシステムでは、次の3つの状態があります。

 

通常状態(Normal)

ロック状態(Locked)

アンロック状態(Unlocked)

システムは、以下の遷移を持っています。

 

通常状態からロック状態への遷移(カードをロック)

ロック状態からアンロック状態への遷移(一時的にカードをアンロック)

アンロック状態から通常状態への遷移(カードのアンロックを解除)

状態遷移図を作成し、各状態間の遷移を検証するテストケースを選択します。以下に、選択される可能性があるテストケースの例を示します。

 

1.通常状態でカードをロックし、システムがロック状態に遷移することを確認する。

2.ロック状態でカードを一時的にアンロックし、システムがアンロック状態に遷移することを確認する。

3.アンロック状態でカードのアンロックを解除し、システムが通常状態に遷移することを確認する。

4.通常状態でカードのアンロックを解除しようとしても、システムが通常状態のままであることを確認する。

 

これらのテストケースを実行して、システムが状態遷移を正しく行っているかどうかを検証します。状態遷移テストにより、システムの状態に関連する問題を発見し、品質を向上させることができます。

まとめ

本記事では、ユーザー目線でソフトウェアの入力と出力だけを確認するブラックボックステストについて解説しました。最後には、「同値分割法」「境界値分析」「デシジョンテーブルテスト」「状態遷移テスト」の4つの代表的なブラックボックステストについて詳しく説明しました。本記事を通して、少しでもブラックボックステストについて理解していただけましたら幸いです。

 

自前で膨大なテストを実施するチームや環境を構築するのが困難だけど、高品質を追求したい場合は、ITの専門家にアウトソーシングするという選択肢を検討してみてください。CMC Japanは、最新の技術でテストケースを作成し、分析することにより、テストプロセス全体を円滑に進めることをサポートいたします。

弊社は、経験豊富なソフトウェア開発およびテスト会社として、またISTQBのプラチナパートナーとして、自動化ツールとあらゆるテスト手法を適切に組み合わせることにより、優れたユーザー体験と機能の完全性を保証いたします。お気軽にお問い合わせください。

>> テスティングサービスに関する無料相談はこちら