2019年4月23日火曜日

PICT - 組み合わせテストケース作成

組み合わせテストケースを生成する際に「直行表を書くのめんどくさいよー...」と思ったのが事の始まり。

調べてみたところ、直行表とは別にペアワイズ法(Pairiwise)というやり方があり、フリーのツールを使って簡単にテストケースを生成できるらしい。ペアワイズ法は2因子網羅を満たすことに注力しているため、直行表よりも3因子網羅率が下がるみたい。つまりテストケース数も減るってことかな。
ツールは色々あるらしいのですが、私が使ったのは Microsoft 社の PICT。オプションで3因子網羅を満たすことも可能であり、禁則処理も容易にできるとのこと。これは使うしかない!!
ちなみに、ペアワイズ法はオール・ペア法(All-Pairs)とも呼ばれるらしいです。

[ 注釈 ]
因子:パラメータ名
水準:パラメータ値
禁則:ありえないパターンを除くための制約



PICT の導入
Windows の場合は、http://www.pairwise.org/tools.asp から PICT を検索してクリック。


ダウンロードされたファイル (pict33.msi) を実行してインストール。環境変数PATHも通してくれる。

他の OS の場合、Git が使えるなら以下のコマンドを実行。
$ git clone https://github.com/Microsoft/pict.git
$ cd pict
$ make

Git が使えない場合は https://github.com/Microsoft/pict から ZIP ファイルをダウンロード。解凍して Makefile のあるディレクトリにて make コマンドを実行。

PICT のオプション
$ pict
Pairwise Independent Combinatorial Testing

Usage: pict model [options]

Options:
 /o:N    - Order of combinations (default: 2)
 /d:C    - Separator for values  (default: ,)
 /a:C    - Separator for aliases (default: |)
 /n:C    - Negative value prefix (default: ~)
 /e:file - File with seeding rows
 /r[:N]  - Randomize generation, N - seed
 /c      - Case-sensitive model evaluation
 /s      - Show model statistics

model は読み込ませるファイル。オプションで使いそうなのは /o:N /e:file /s くらいかな。

モデルファイル
モデルのサンプルファイルを作ってみる。モデルファイルの書き方は以下のようになっている。

<因子>: <水準1>, <水準2>, ...
pict.txt

# サンプルモデル MODE: 0, 1 FORMAT: YUV, RGB, RAW RATE: 100Mbps, 1Gbps, 10Gbps
$ pict pict.txt
MODE    FORMAT  RATE
0       RAW     100Mbps
0       RGB     10Gbps
1       YUV     100Mbps
0       YUV     1Gbps
1       RGB     100Mbps
1       YUV     10Gbps
1       RGB     1Gbps
1       RAW     1Gbps
0       RAW     10Gbps


今回のサンプルでは因子が3つしかないので、オプション /o:N で3因子網羅にすると 3*3*2=18 パターン表示されるはずと思って試したところ、ちゃんと出た。

$ pict pict.txt /o:3
MODE    FORMAT  RATE
0       RGB     100Mbps
1       YUV     100Mbps
0       RGB     1Gbps
0       RAW     1Gbps
1       RAW     1Gbps
1       RGB     1Gbps
1       RGB     100Mbps
0       YUV     100Mbps
0       RAW     100Mbps
0       YUV     10Gbps
1       RGB     10Gbps
1       YUV     1Gbps
1       YUV     10Gbps
0       YUV     1Gbps
0       RGB     10Gbps
1       RAW     100Mbps
1       RAW     10Gbps
0       RAW     10Gbps

ケース数
/s オプションを使ってケース数を調べることができるみたい。Generated tests がテストケース数。

$ pict pict.txt /s
Combinations:    21
Generated tests: 9
Generation time: 0:00:00

$ pict pict.txt /s /o:3
Combinations:    18
Generated tests: 18
Generation time: 0:00:00

禁則処理
制約についての詳細はマニュアルを参照してください。
https://github.com/Microsoft/pict/blob/master/doc/pict.md

今回のモデルに対して
MODE : 0 の場合は FORMAT は YUV または RGB である
MODE : 1 の場合は RATE は 100Mbps 以外である
という制約を付けたい場合は、以下のようになる。
pict.txt

# サンプルモデル MODE: 0, 1 FORMAT: YUV, RGB, RAW RATE: 100Mbps, 1Gbps, 10Gbps # 制約 IF [MODE] = 0 THEN [FORMAT] = "YUV" OR [FORMAT] = "RGB"; IF [MODE] = 1 THEN [RATE] <> "100Mbps";
$ pict pict.txt /o:3
MODE    FORMAT  RATE
0       YUV     1Gbps
0       RGB     10Gbps
1       RGB     10Gbps
1       YUV     10Gbps
1       RAW     10Gbps
1       YUV     1Gbps
0       RGB     100Mbps
0       YUV     100Mbps
1       RAW     1Gbps
0       RGB     1Gbps
0       YUV     10Gbps
1       RGB     1Gbps

上記2つの制約は以下のように書き換えることもできる。(結果は同じ)
IF [MODE] = 0 THEN [FORMAT] IN {"YUV", "RGB"};

IF [MODE] = 1 THEN [RATE] LIKE "*Gbps";  # 100Mbps 以外 = *Gbps

シード処理
モデルファイルに変更が必要になった場合、単純に変更して PICT を再実行してしまうと過去のテストケースとは全く違う組み合わせになってしまいます。
/e:file オプションを使用することで、過去のテストケースにできるだけ近い形のテストケースを作成することができます。

手順としては

(1) 変更前のモデルファイルでテストケースを出力
$ pict pict.txt > pict_tmp.txt

(2) モデルファイルを変更する

(3) /e:file オプション で (1) のファイルを指定して再実行
$ pict pict.txt /e:pict_tmp.txt


0 件のコメント:

コメントを投稿