pictでN因子間網羅組合せテストケースを自動生成する

2022.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

N因子間網羅組合せテストとは?

N因子組合せテストとは、N個の因子間の組合せをテストするものです。 因子とはテスト対象の項目のことです。そして、各因子が取りうる値を水準と呼びます。

ですので、N因子組合せテストとは、つまりN個の項目の組合せのテストを意味します。
例えば、とあるWebサービスに対してアクセスするクライアントの「OS」と「ブラウザ」と「国」の組合せを考えるとすると、この場合はN=3で3因子組合せテストになります。

因子 水準1 水準2 水準3 水準4 水準5
OS Windows MacOS Linux
ブラウザ Chrome Safari FireFox
日本 アメリカ合衆国 中国 イギリス フランス

先の表にあるような因子と各因子の水準がある場合、すべての組合せのパターンは 3 (OS) x 3 (ブラウザ) x 5 (国) = 45通りになります。
このように全ての因子間の全ての組合せを網羅するテストを全網羅組合せテストと呼びます。

全網羅組合せテストは全ての組合せをテストしますので、当然欠陥の検出率は一番高いです。しかし、因子や各因子内の水準が増えるとすぐに組合せ爆発を起こして現実にテストできるボリュームを超えてしまいます。

そこで、網羅する組合せを2因子間に抑えるPairwize法や直行表を使った方法があります。ここでの2因子間網羅とは、「OSとブラウザ」、「ブラウザと国」、「国とOS」の組合せに関しては全て網羅するということです。

pictとは?

pictはPairwize法に則った2因子間網羅組合せの生成をサポートしてくれるCLIツールです。 pict/pict.md at main · microsoft/pict

pictではあり得ない組合せを除外する禁則などの制約を指定することもできますので、かなり柔軟にテストケースを生成できます。

Pairwize法をpictによって実践する方法に関しては以下の記事が詳しいです。

本記事では、pictを使ったN因子間網羅組合せを行う方法について記述します。

解法

pictには様々なオプションパラメータがあり、N因子間網羅を指定することは簡単です。モデルを定義したファイルをmodel.txtとした場合、

$ pict model.txt /o:N

でN因子を網羅した組合せが生成されます。例えば、3因子網羅にしたければ、N=3なので

$ pict model.txt /o:3

とします。

ちなみに、pictでは、サブモデルを定義することもできます
例えば、全体は2因子間網羅、しかし、一部の因子間では3因子網羅にということが可能です。その場合は次のようにモデルを定義します。

因子A:  a, b, c
因子B:  1, 2, 4
因子C:  A, B, C
因子D:  Type1, Type2
因子E:  version8, version9, version10
因子F:  MethodA, MethodB, MethodC, MethodD
因子G:  J, K, L

{ 因子A, 因子B, 因子C, 因子D } @ 3

こうすると、pictは因子A〜因子D間に関しては3因子網羅で組合せを生成します。

まとめ

pictを使ってN=3以上のN因子網羅組合せを行う方法についてみてみました。
また、サブモデルを定義することで一部の因子間に関して網羅因子数を上げて重点的にテストすることもできることを確認しました。
非常に便利なツールだと思いますので、活用していきたいと思います。