テストの組み合わせについてある程度知見が溜まったのでメモ。

結合テストの組み合わせ問題 Link to heading

システムのリリース前には開発した機能や既存の機能を組み合わせてバグが発生していないかテストをする必要がある。

しかし、開発した機能が増えていけば組み合わせの数は指数関数的に増えていくため、それらを全てテストするのは非現実的になってしまう。

となると、何かしらの方法でテストする組み合わせを絞る必要がある。

絞るにあたって「システムのバグは2つパラメータの組み合わせで発生する確率が高い」というデータから、2つの異なるパラメータ(因子)の組み合わせが必ず全て登場する最小の表を作る、という手法がある。

この記事ではその手法のうち、直交表とPICTというツールの使い方をメモして残しておこうと思う。

直交表 Link to heading

直交表は、因子の組み合わせが効率的になるよう作られた表。

基本的には誰かがすでに定義しているものにテストしたいシステムの因子を割り当てるという使い方になる。

わかりやすいように例を挙げてみる。

とあるWebシステムを作っていて、下記のような環境に対応しているかテストを行う必要がある。

因子 水準1 水準2
OS Windows macOS
ブラウザ Chrome Firefox
端末 ラップトップ モバイル

3因子2通りのため、全ての組み合わせは8パターンになる。

8パターンであれば全てテストするのはそこまで大変でもないが、試しに直交表へ適用してみる。

以下のページのように、すでにある直交表からテストしたい項目の形に近いものを選ぶ。

タグチ計画のカタログ

今回は2^3通りのため、L4(2^3)の表が使えそう。

上記のテスト項目をL4(2^3)の表に当てはめてみる。

テスト番号 OS ブラウザ 端末
1 Windows Chrome ラップトップ
2 Windows Firefox モバイル
3 macOS Chrome モバイル
4 macOS Firefox ラップトップ

全パターン行うと8パターンだったものが4パターンで済むようになった。

2因子ごとの組み合わせも全て登場するため、バグ発見率も極端に下がらない。

上記の例のサイズならそこまで恩恵を感じないかもしれないが、因子と水準が増えたときには大きく組み合わせの数を減らすことができる。

今回は例のためピッタリの表が見つかるように因子数と水準を調整したが、ピッタリの表がない場合は少し大きめのサイズの表に適用し、合いた箇所を有効な水準で埋めて問題ない。

PICT Link to heading

PICT はMicrosoftが作成公開しているAll Pair法(ペアワイズ方)で組み合わせを作成するツール。

直交表では静的な表に因子と水準を当てはめていましたが、PICTでは動的に表を生成する。

PICTでも例を挙げてみる。

直交表のときと同じ因子と水準を使うと仮定して、以下のようなテキストファイルを用意する。

OS: Windows, macOS
ブラウザ: Chrome, Firefox
端末: ラップトップ, モバイル

因子: 水準1, 水準2 という構造を一行ずつ定義する。

上記ファイルを factor.txt という名前で保存して、以下のコマンドを実行する。

pict factor.txt

すると、以下のような出力を得られる。

OS      ブラウザ   端末
macOS   Firefox  モバイル
macOS   Chrome   ラップトップ
Windows Chrome   モバイル
Windows Firefox  ラップトップ

組み合わせの構造は違うが、直交表と同じように2因子ごとの組み合わせ全てが登場するテストケースを得られる。

動的に作成するため、直交表では因子と水準の数から表を探す必要があるが、PICTではそれをする必要ない。

また、最も効率の良い形で表を作るため、因子と水準の数が増えたときの組み合わせの数は直交表より少なくなる傾向がある。

ただし、PICTで作った表は組み合わせ数が減ることと直交表が他の因子の組み合わせもある程度考慮されて作成されていることから、3因子間の網羅率はあまり高くない。

PICTでは禁則処理や因子間の組み合わせ数も設定できるため、使い方に寄っては直交表と同じように3因子の網羅率を上げることもできるが、正確なものにするためにはちゃんと考えなければならない。

どちらを使っても組み合わせが爆発するようなテストで、実施項目を減らすことができるため、適材適所で使っていきたいと思う。