ブラックボックステスト
ブラックボックステストとは、ソフトウェアの内部構造やコードの仕組みを一切考慮せず、外部からその動作を確認するテスト手法です。この方法では、システムやアプリケーションに対して入力を与え、期待される出力が得られるかどうかを確認します。主に仕様書や設計書に基づいて行われ、システムがその要件を満たしているかを検証するのが目的です。
このテスト手法の大きな利点は、ソフトウェアの内部構造を知らなくても実施できる点です。そのため、テストを行う人が開発者である必要はなく、仕様書さえ理解していれば誰でも取り組むことが可能です。しかし一方で、内部ロジックに基づく問題が見つけにくいという欠点があります。また、全ての入力パターンを網羅するのは現実的ではないため、限られたケースでの検証となることが一般的です。
以下がブラックボックステストの技法となります。
①同値分割法
同値分割法とは、システムやソフトウェアへの入力データを、同じ処理が行われることが期待されるパーティションに分ける手法です。各パーティション内のデータはシステムで同様に扱われるため、これらは同じもの(同値)として扱われます。
この手法では、パーティション内の代表的なデータを1つ選んでテストを行います。この代表的なデータでのテスト結果が、同じパーティション内の他のデータのテスト結果とみなされるため、効率的にテストが実施できます。
同値パーティション
同値分割法では、データを振り分ける際、すべてのデータは必ず1つの同値パーティションに分類されます。これには、システムが受け入れる有効なデータを含む「有効同値パーティション」と、拒否される無効なデータを含む「無効同値パーティション」があります。
これまで述べたように、同値パーティションは入力データだけでなく、出力データにも存在します。例えば、インターネットの検索サイトで「ソフトウェアテスト」という単語を検索した場合、たくさんの結果が出れば検索結果は複数ページにわたります。逆に、ヒット数が少ない場合や全くない場合には、「次へ」リンクは表示されません。このように、出力データは「ヒットしない」「1ページで収まる」「複数ページにわたる」といったパーティションに分けられます。
また、内部変数や時間に依存するデータにも同値パーティションが存在します。例えば、文書が保存される前後といったイベントに基づいて、異なるパーティションを考えることができます。
同値パーティションは必要に応じて、さらに細かく分割することも可能です。
同値分割法は、入出力に対するカバレッジ目標を達成するために活用できます。この場合のカバレッジは、同値パーティションに関連しています。100%のカバレッジを達成するためには、分割された同値パーティションをすべて網羅するテストケースを設計する必要があります。具体的には、有効値と無効値の各同値パーティションから少なくとも1つのデータを選んでテストを行います。
②境界値分析
数値や順序付けられた値に基づく同値パーティションにおいて、境界に位置する値でテストを行うと、システムやソフトウェアの不具合を発見しやすいことがわかります。これは、境界付近に多くの欠陥が隠れていることがあるためです。この現象は以前から知られており、現在でも効率的なテストを行うために境界値をターゲットにしたテストが実施されています。
境界値
境界値とは、同値パーティションの端に位置する値を指します。例えば、次のような仕様に基づいて境界値分析を行い、テストケースを設計する場合を考えてみましょう。
仕様:年齢を入力し、女性で20歳以上34歳以下であれば「F1層」と表示する。
今回は境界値分析を行うので、年齢のみが入力可能で、数値以外の入力は受け付けないものとします。
この場合、年齢の数値範囲を示す線を見ても特に問題はないように思えます。しかし、この数値線を理解する際には注意が必要です。仕様に記載されている20歳と34歳の値をそのまま使う場合、境界値は同値パーティションの端にある値という考え方を意識していない可能性があります。
境界値分析のテストケース
境界値分析は、同値分割法の拡張として使用されます。この分析手法を用いてテストケースを設計する際、**「境界値は同値パーティションの端の値」**という解釈の仕方により、複数のアプローチがあります。
▫ 2ポイント境界値分析法
境界値分析では、有効値パーティションを重視します。例えば、仕様が「20歳以上~34歳以下」となっている場合、テストすべき値は次の4つになります。
・有効範囲の最小値:20歳
・有効範囲の最大値:34歳
・無効範囲の最小値-1:19歳
・無効範囲の最大値+1:35歳
また、無効値パーティションに注目すると、範囲は「0歳以上~20歳未満」です。テストするべき値は次のようになります。
・無効範囲の最小値-1:-1歳(無効データ)
・有効範囲の最小値:0歳
・無効範囲の最大値+1:20歳
無効値と有効値の境界が重複することにより、テストケース数は実際には少なくなります。このように、連続する同値パーティションの隣接境界値が重なることが多いため、重複を考慮してテストケース数をカウントします。
▫ 3ポイント境界値分析法
3ポイント境界値分析法では、境界値に加えて、その前後の値もテストケースに含めます。たとえば、20歳以上~34歳以下の有効範囲では、次の6つの値をテストケースとして選びます。
・19歳(境界より1つ少ない値)
・20歳(境界値)
・21歳(境界より1つ多い値)
・33歳(境界より1つ少ない値)
・34歳(境界値)
・35歳(境界より1つ多い値)
無効値パーティションに対しても、3ポイント境界値分析を行います。例えば、「0歳以上~20歳未満」に対しては次の5つの値をテストケースとして選びます。
・-1歳(無効範囲)
・0歳(有効範囲の最小値)
・1歳(有効範囲)
・19歳(境界前の値)
・20歳(有効範囲の最大値)
この場合でも、重複した境界値があるため、テストケース数は若干減少します。3ポイント境界値分析法を使っても、隣接する境界値の重複を避けられないため、最終的なテストケース数は少なくなります。
このように、境界値分析では、テストケースを設計する際に境界値やその隣接値を選択し、重複を考慮することで効率的にテストが行えます。
③ デシジョンテーブルテスト
デシジョンテーブルとは、入力データや入力条件の組み合わせに応じた処理や出力結果を表形式でまとめたものです。このテーブルは複雑なビジネスルールや論理を理解しやすく整理するのに有効です。デシジョンテーブルを使用してテスト設計を行う方法が、デシジョンテーブルテストです。
複数の条件が重なり合う場合、どの条件の組み合わせがどの処理や結果に対応するのかを理解するのは難しくなります。これらを整理しやすく示すための表が、デシジョンテーブルです。
デシジョンテーブルは、条件と動作という異なる項目を同一の表に記述するため、以下のような構成になっています。
条件の一覧(条件記述部)
入力条件や入力データが記述される部分です。例えば、「20歳以上」や「顧客氏名」などが該当します。
結果の一覧(動作記述部)
条件に基づいて実行される動作や処理の結果が記載される部分です。例としては、「F1層と表示する」などがあります。
条件の組み合わせ(条件指定部)
条件に対する判定結果の組み合わせが記載される部分です。通常、判定結果は真(True)または偽(False)で表されます。表現方法としては、以下のようなものが使われます。
・真、偽
・Y、N
・T、F
・1、0
条件の値が判定に影響しない場合は、「-」または「N/A」で示されることがあります。特定の条件では、ブール値ではなく具体的な値が使われることもあります。
組み合わせに対応する結果(動作指定部)
条件の組み合わせに対して対応する動作結果が記載される部分です。動作結果の表現方法としては、次のようなものが使われます。
・真と偽で表す
・「X」と空白で表す
動作が発生しない場合は、「空白(ブランク)」で表現されることがあります。また、動作内容によっては、ブール値や「X」ではなく、具体的な個別の値が記載されることもあります。
ルール(規則)
デシジョンテーブルの縦列は「ルール(規則)」として表されます。これは、条件の組み合わせとそれに対応する動作結果を組み合わせたものです。
デシジョンテーブルはエンタープライズ系(事務処理系)システムでのみ使用されると思われがちですが、論理が複雑な場合であれば、エンタープライズ系や組込み系を問わず広く適用可能です。
④状態遷移テスト
通常のソフトウェアテストでは、同じ入力条件であれば同じ出力が得られることを前提にテストケースを作成します。しかし、現在の状態や過去の履歴によって動作が異なる場合もあり、同じ入力データでも異なる結果が得られることがあります。
さらに、状態が変化するということは、システム内で何らかの動作が実行されていることを意味します。システムが状態によって異なる振る舞いをする場合、その状態を考慮したテストケースを作成する必要があります。このようなケースで活用されるテスト手法が「状態遷移テスト」です。
状態遷移図
システムには複数の状態があり、それぞれの状態間の遷移を示した図が「状態遷移図」です。この図は、有効な状態遷移を視覚的に表現します。
状態遷移表
「状態遷移表」は、状態とイベントの関係をマトリクス形式で表したものです。表の交差部分には、イベントが発生した際の遷移後の状態が記載されます。この表の特徴は以下の通りです。
・状態とイベントの全組み合わせを漏れなく整理できる。
・無効な組み合わせを明確にできる。
状態遷移表を作成することで、仕様の矛盾や不備を特定する助けとなります。状態遷移図との違いは、遷移表では有効・無効の両方の遷移を検討する点です。
状態遷移テスト
状態遷移テストでは、状態遷移図や状態遷移表を基にテストケースを設計します。設計するテストケースは、カバレッジ基準に応じて異なります。以下は一般的な設計方法です。
・代表的な状態遷移の流れを網羅する
・全ての状態をカバーする
・全ての遷移を検証する
・特定の順序で遷移が発生するケースを作成する
・無効な遷移を確認するケースを作成する
この手法は組み込み系ソフトウェアだけでなく、エンタープライズ系ソフトウェアにも有用です。具体的には以下のような場面で利用されます。
・ワークフロー(例:申請中、処理待ちなどの状態を持つビジネスプロセス)のテスト
・画面遷移を伴う操作のテスト
⑤ユースケーステスト
ユースケーステストは、システムの利用シナリオやビジネスプロセスをもとにテストケースを設計する手法です。
ユースケースとは、システムやソフトウェア(サブジェクト)と外部のアクター(ユーザー、他のシステム、外部デバイスなど)との間の相互作用を記述したものです。この相互作用を明確にすることで、システムがどのように振る舞うべきかを把握できます。ユースケースは、すべてのやり取りを網羅するわけではなく、特にユーザーや顧客にとって価値のある結果をもたらす相互作用に焦点を当てます。また、相互作用によってシステムの状態が変化することも記述します。
ユースケースには、ビジネスユースケースとシステムユースケースの2種類があります。ビジネスユースケースは、企業全体をシステムとして捉え、顧客との相互作用を抽象的なレベルで記述したもので、システムユースケースは、ユーザーと対象システム間の詳細なやり取りを記述します。どちらのユースケースもテスト設計に利用されます。
ユースケースは図や文章で表現されます。ユースケース図はアクターとシステムの相互作用を図式化したもので、ユースケース記述はその詳細な内容を文章化したものです。記述には、ユースケース名や目的、アクター、事前条件や事後条件、そして基本フロー、代替フロー、例外フローといったプロセスが含まれます。事前条件はユースケース実行前に満たすべき条件、事後条件は実行後に達成すべき状態を示します。基本フローは最も頻繁に発生する流れであり、代替フローは基本フローから分岐しつつも同じ事後条件を満たします。例外フローは異常時の処理であり、事後条件も基本フローと異なります。
ユースケースのプロセスは自然言語で記述されることもあれば、アクティビティ図やワークフロー図、フローチャートといった視覚的な形式で表現されることもあります。これらを通じて、システムやビジネスプロセスの動作を分かりやすく整理し、テスト設計の基盤とします。
※練習問題: