複数因子の組み合わせテストケースを簡単に効率よく導出する(ペアワイズ法)

| 3 min read
Author: shuichi-takatsu shuichi-takatsuの画像

ソフトウェア品質を保証する上でテストは非常に重要な役割を果たします。
テストに工数を使えば使った分だけ効果を期待できますが、テストにかける工数を無限に大きくすることは出来ず、いかに効率良くテストを実施するかが課題になります。
テスト技術者はこれまで「少ないテスト工数で多くの欠陥を効率よく検出する」を考えてきました。

複数の因子が絡み合うテストの場合、テストケースの数が爆発的に増加します。
今回ご紹介する「ペアワイズ法」は効率的にテストケース数の削減に寄与してくれます。

Contents

ペアワイズ法とは

#

ペアワイズ法とは、2因子間の値の組み合わせを網羅するテストケースを効率よく作成する技法です。
「オールペア法」と呼ばれることもあります。

2因子間の値の組み合わせに注目した理由として、ソフトウェアの不具合の多くが2つまたはそれ以上の因子の組み合わせにおいて発生していると考えられているためです。
ペアワイズ法は「2因子間の値の組み合わせ”だけ”はすべて網羅する」ことで、テストケース数を絞り込みます。

組み合わせ数の爆発

#

例えば、テストする対象のソフトウェアが稼働する環境として、以下の3つの因子を考えてみます。
・OS
・ブラウザ
・Java

それぞれの因子が取る水準を以下とします。
・OS (Windows, Linux, MacOSX)
・ブラウザ (Firefox, Chrome)
・Java (バージョン8, バージョン11)

単純に計算すると、これらの組み合わせは
3 × 2 × 2 = 12
となり、テストケース数は12になります。

12ケースくらいだったら頑張れば実施可能かもしれません。
しかし、因子に水準が1つ増える毎にテストケースの数はどんどん増加していきます。
すべての因子の水準が3つだった場合は
3 × 3 × 3 = 27
すべての因子の水準が4つだった場合は
4 × 4 × 4 = 64
となります。現実的にテストの実施が困難になってきます。

2因子間網羅に注力し、テストケース数を削減

#

そのまま力技でテストを実施する場合、上記のテストケース数12の組み合わせのすべての環境においてテストが必要です。

しかし、「ソフトウェアの不具合の多くが2つ以上の因子の組み合わせにおいて発生している」という前提を置いて、まず「2因子間のみは網羅する」としたらどうでしょうか?
2因子の対は以下のようになります。

  1. OSとブラウザ
  2. ブラウザとJava
  3. JavaとOS

上記の2因子間の組み合わせにおいて全網羅が出来ていれば良いと割り切って、3因子の組み合わせまでの全網羅は考えないことにします。

ペアワイズ法でテストケース数を削減

#

ペアワイズ法でテストケース数を削減する例を見てみましょう。

組み合わせに使用する例題を以下とします。
・OS (Windows, Linux, MacOSX)
・ブラウザ (Firefox, Chrome)
・Java (バージョン8, バージョン11)

PICTというツールで作成したテストケースの例を以下に示します。
(PICTについては別の機会にご説明します)

ペアワイズ法で作成されたテストケース数は6個になっています。

最初に「OSとブラウザ」の組み合わせを見てみましょう
3水準 × 2水準の組み合わせなので

  1. Windows - Firefox
  2. Windows - Chrome
  3. Linux - Firefox
  4. Linux - Chrome
  5. MacOSX - Firefox
  6. MacOSX - Chrome

のすべての組み合わせがテストケースに含まれています。

次に「ブラウザとJava」の組み合わせを見てみましょう。
2水準 × 2水準の組み合わせなので

  1. Firefox - java8
  2. Firefox - java11
  3. Chrome - java8
  4. Chrome - java11

のすべての組み合わせがテストケースに含まれています。
ただし、全体のテストケース数が6個なので、上記の組み合わせのうち2つは重複してテストケースに現れています。

次に「OSとJava」の組み合わせを見てみましょう。
3水準 × 2水準の組み合わせなので

  1. Windows - java8
  2. Windows - java11
  3. Linux - java8
  4. Linux - java11
  5. MacOSX - java8
  6. MacOSX - java11

のすべての組み合わせがテストケースに含まれています。

つまり、全テストケース12個のうち、半分の6個のテストケースが削除された形になっています。
(以下の表の灰色に着色した部分が削除されたテストケース)

まとめ

#

ペアワイズ法を用いることで、爆発的に増大してしまう組み合わせテストケース数を削減できることがわかりました。
もちろん3因子以上の組み合わせで”のみ”発生する不具合もあるとは思いますが、2因子間の組み合わせにてテストを十分に実施することで、3因子以上の組み合わせテストが必要なケースはかなり絞り込まれると思います。

今後、本ブログで紹介したPICTの詳細や、その他のテストケース作成技法(直行表など)も紹介していきたいと思います。

テストに活用していただければ幸いです。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  2. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  3. GitHub Codespaces を使いはじめる (2022-05-18)
  4. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  5. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  6. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  7. Nuxt3入門(第3回) - ユニバーサルフェッチでデータを取得する (2022-10-06)
  8. 第1回 OpenAPI Generator を使ったコード生成 (2022-06-04)
  9. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  10. Nuxt3入門(第2回) - 簡単なNuxtアプリケーションを作成する (2022-10-02)