適切なテストケース作成に役立つ技法を知る1:同値分割法とは?

適切なテストケース作成に役立つ技法を知る1:同値分割法とは?

ソフトウェアのテストは、ソフトウェアの品質を高める上で非常に重要な工程です。限られた予算やスケジュールの中、テストで効率よく不具合を発見するためには適切なテストケースを作成することが欠かせません。失敗しないテストケースを作るためには、テスト技法に関する理解を深めることが大事になりますが、今回はブラックボックステストにおいてよく使われる同値分割法についてご紹介します。

なお、ブラックボックステストについてはお知りになりたい方は、こちらをご参照ください。

執筆者:TONY

1. 同値分割法とは?

同値分割法は、仕様に基づいた包括的なブラックボックステスト手法のひとつで、少ないテスト回数でより広い範囲をカバーできるのが特徴です。これは、どのレベルのテストにも適用できるため、通常は最初に実行するのに適したテクニックと言えます。同値分割では、入力条件を類似と見なすことができるグループまたはセットに分割します。つまり、システム上は同等に処理されると想定したデータを「同値パーティション」または「同値クラス」と呼ばれるグループに振り分け、テストを実行します。

このテクニックの背後にある理論では、同値クラス中から1つの条件/値のテスト結果が「合格」になると、他のすべての条件/値も「合格」とみなすという考え方を採用しています。同様に、同値クラス中から1つの条件/値のテスト結果が「不合格」になると、他のすべての条件/値も「不合格」とみなされます。したがって、同値クラスに存在するすべての条件/値を対象とする代わりに、各同値クラスを表すランダムな値だけをテストすればよく、その分、効率良くテストを進めることができます。

同値クラスは、各入力状態(通常は仕様内の文または句)を取得し、それを2つ以上のグループに分割することによって決定され、有効な同値クラスと無効な同値クラスの2種類があります。

2. 同値分割法の留意点

同値分割法を使用する場合に留意したい項目を以下にまとめました。

有効な同値クラスと無効な同値クラスを正しく識別する必要があります。
  + 有効な値は、コンポーネントまたはシステムによって受け入れられる値です。有効な値を含むグループは、「有効な同値クラス」と呼ばれます。
  + 無効な値は、コンポーネントまたはシステムによって拒否された値です。無効な値を含むグループは、「無効な同値クラス」と呼ばれます。

必要に応じて、任意の同値クラスをサブ同値クラスに分割できます。

テストケースで無効な同値クラスを使用する場合、エラーがカバーされないことを保証するために、それらを個別にテストする必要があります。
つまり、他の無効な同値クラスと組み合わせたテストは避けるようにします。その理由は、複数の障害が同時に発生するとそのうちの1つだけが表示されて他の障害が検出されず、バグが隠されるリスクがあります。

3. 同値分割法によるテストケースの設計手順

次に同値分割法を使ったテストケースを設計する手順として以下の3ステップを紹介します。

ステップ1:システムが同等に扱われる条件/入力値をグループに分割して各同値クラスを定義します。

ステップ2:各同値クラスを表すランダムな値を選択します。

ステップ3:ステップ2で選択した値に従ってテストケースを設計します。

4. 同値分割の例題

例えば、以下の仕様に基づき、ピザ注文アプリで数量入力ボックスを検証するとしましょう。

仕様:
• 1から10まで入力されたピザの数量は有効と見なされる。その場合、注文成功メッセージが表示される。

• それ以外の値は注文に対して無効とみなされ、「注文ごとにピザの数量を1から10までご選択ください!」というエラーメッセージが表示される。

※システムが整数のみを受け入れると仮定します。

まず上記の仕様をもとにした場合、次のようにテスト条件を決定できます。

• Pizza Orderテキストボックスに入力された数値のうち、10より大きい数字(11など)は無効と見なされる。

• 1未満(0以下)の数値は無効と見なされる。

• 1から10までの数字は有効と見なされる。

問題は、可能なすべての値をテストすると、テストケースの数が非常に多くなってしまうことです。多くの開発現場では限られた人的リソースと時間の中でテスト工程を行う必要があるため、すべてのテストケースを網羅することは現実的ではありません。この問題を解決するために、同値分割法を使用し、以下の図のように顧客が入力したピザの数値を異なるグループに分割します。

この作業では、以下の3つの同値クラスに分けることができます。

• x <1 (有効な同値クラス)
• 1 <=x <= 10 (有効な同値クラス)
• x > 10 (無効な同値クラス)

次のステップでは、各同値クラスからテスト用の値をランダムに選択します。下記の図では、3つの同値クラスを表す-6、5、115と3つの値を選択します。

最後に、下記のテストケースを作成することができます。

• Case 1: テキストボックスに「-6」を入力 ⇒ エラーが表示される。
• Case 2: テキストボックスに「5」を入力 ⇒ エラーは表示されず、注文成功のメッセージが表示される
• Case 3: テキストボックスに「115」を入力 ⇒ エラーが表示される。

5. 同値分類法の利点と欠点

最後に、同値分割法のメリットやデメリットを以下にまとめました。

• 利点
各同値クラスを代表的な要素でテストするだけでテストケースの数が大幅に削減されます。そのためテストの実行時間も大幅に削減されます。

• 欠点
すべてのシステムがこのテクニックを適用できるわけではありません。一方、各同値クラスからランダム値のみを選択しテストすることで、ある一定の障害を見逃す可能性があります。一部の研究では、同値クラスの境界値をテストするときにエラーの大半が見つかることが示されています。


同値分割法は少ないテスト回数でより広い範囲をカバーするために有効なテスト手法ではありますが、システムによっては障害を見逃す可能性もあります。このため、実際の現場では境界値分析と呼ばれるもう1つ別のテスト技法を併用しながら、テスト工程を実行することが一般的です。次回の原稿では境界値分析について解説していきます。