🔖

PICTを使ってテストケースの爆発をおさえる

2023/07/25に公開

PICT(Pairwise Independent Combinatorial Testing tool)とは

Microsoft社が開発したソフトウェアテストツール。
PICTは、複数のパラメータの組み合わせテストケースを、オールペア法(ペアワイズ法ともいう)を用いて自動生成します。
https://github.com/microsoft/pict

基本編 とりあえずPICTを実行してみる

以下のページにいろいろ説明があるのですが、直感的に理解するために手っ取り早く使ってみます。
https://github.com/Microsoft/pict/blob/main/doc/pict.md

動作環境

PICT Version 3.7.4
こちらからダウンロードできます。
https://github.com/microsoft/pict/releases/tag/v3.7.4
OS:Windows10
コマンドプロンプトで実行
※PowerShellでも動作しましたがコマンドプロンプトを使いました。

ダウンロードした.exeファイルを、ローカルの適当な場所に置きます。
コマンドプロンプトでその場所へ移動して、PICTを実行します。

サンプルモデル作成

以下のサンプルモデルsample.txtを作成します。
あるアプリを動かす際の動作環境は?という条件を考えてみました。
この例で言うと OS、Browser、resolution は パラメータ。(「因子」とも言う)
パラメータの右に「:」(コロン)を書く。
その右に値をカンマで区切って列挙します。(カンマで区切って列挙した値は「水準」とも言う)
(「因子水準」でググるといろいろ出てきます。)

sample.txt
#
# This is a sample model
#

OS:           Mac, Windows, Linux, iOS, Android
Browser:      Chrome, Edge, Firefox, Safari
resolution:   1280x720, 1920x1080, 2560x1440

PICT実行

作成したモデルを指定して、PICTを実行します。

pict sample.txt

PICT実行結果の確認

20のテストケースが作成されました。

OS	Browser	resolution
iOS	Safari	1280x720
Mac	Edge	1280x720
Android	Firefox	1280x720
iOS	Firefox	2560x1440
Linux	Edge	1920x1080
Linux	Chrome	1280x720
Android	Safari	1920x1080
Android	Chrome	2560x1440
Windows	Firefox	1920x1080
Linux	Firefox	2560x1440
Windows	Edge	2560x1440
Mac	Chrome	1920x1080
Mac	Safari	2560x1440
iOS	Edge	1920x1080
Linux	Safari	1280x720
Android	Edge	1280x720
Mac	Firefox	1280x720
iOS	Chrome	2560x1440
Windows	Chrome	1280x720
Windows	Safari	1280x720

この結果をExcelやSpreadsheetにコピペしてソートするとわかりやすいのですが、

  1. OS-Browser
  2. OS-resolution
  3. Browser-resolution

1、で2つのパラメータを組にしてそれぞれのパラメータが取り得る値を全網羅するテストケースであることがわかります。
2、3 についても同様です。
このようにパラメータを2つ組にして全網羅するのでオールペアと言われます。

応用編1 パラメータを指定してPICTを実行する

PICTを実行する際、以下のオプションが指定可能です。

Usage: pict model [options]

Options:
  /o:N|max - 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

/sオプションでモデルの統計情報を表示する

基本編 とりあえずPICTを実行してみる
では、20のテストケースが生成されましたが、/sオプションをつけてモデルの統計情報を表示してみます。

pict sample.txt /s

結果
47の組み合わせがあり、そこから20のテストケースが生成されたことがわかります。

Combinations:   47
Generated tests:20
Generation time:0:00:00

/oオプションで組み合わせオーダーを変更する

pict sample.txt

は、以下と同じです。

pict sample.txt /o:2

組み合わせオーダーを1に変更します。

pict sample.txt /o:1

結果
5のテストケースが作成されました。
OS、Browser、resolutionの各パラメータの全ての値がテストケースに網羅されていることがわかります。

OS	Browser	resolution
iOS	Safari	1920x1080
Windows	Firefox	2560x1440
Linux	Edge	1280x720
Mac	Chrome	1920x1080
Android	Chrome	1920x1080

/sオプションをつけてモデルの統計情報を表示してみます。

pict sample.txt /s /o:1

12の組み合わせがあり、そこから5のテストケースが生成されたことがわかります。

Combinations:   12
Generated tests:5
Generation time:0:00:00

組み合わせオーダーを3に変更します。

pict sample.txt /o:3

結果
60のテストケースが作成されました。

OS	Browser	resolution
iOS	Safari	1920x1080
Mac	Firefox	2560x1440
Mac	Firefox	1280x720
Mac	Edge	2560x1440
Linux	Edge	1280x720
Android	Edge	1920x1080
Mac	Safari	2560x1440
Android	Edge	1280x720
iOS	Safari	2560x1440
Mac	Safari	1280x720
iOS	Chrome	1280x720
iOS	Edge	1920x1080
Linux	Edge	2560x1440
Android	Safari	2560x1440
Windows	Edge	1920x1080
Windows	Edge	2560x1440
iOS	Safari	1280x720
Linux	Safari	1280x720
Linux	Chrome	1920x1080
Linux	Chrome	1280x720
Mac	Edge	1920x1080
Linux	Chrome	2560x1440
Linux	Firefox	2560x1440
Windows	Firefox	1280x720
Mac	Chrome	2560x1440
iOS	Edge	2560x1440
Linux	Edge	1920x1080
iOS	Firefox	2560x1440
Android	Firefox	2560x1440
iOS	Firefox	1280x720
Linux	Firefox	1920x1080
Mac	Chrome	1920x1080
Mac	Chrome	1280x720
Android	Chrome	1920x1080
Windows	Safari	1280x720
iOS	Firefox	1920x1080
Android	Chrome	2560x1440
Mac	Safari	1920x1080
iOS	Edge	1280x720
Android	Safari	1280x720
Android	Safari	1920x1080
Windows	Chrome	1280x720
Linux	Safari	2560x1440
Linux	Firefox	1280x720
Android	Edge	2560x1440
Windows	Chrome	1920x1080
iOS	Chrome	1920x1080
Windows	Edge	1280x720
Windows	Safari	1920x1080
Android	Firefox	1920x1080
Windows	Safari	2560x1440
Mac	Edge	1280x720
Windows	Firefox	2560x1440
Mac	Firefox	1920x1080
Windows	Chrome	2560x1440
iOS	Chrome	2560x1440
Android	Firefox	1280x720
Android	Chrome	1280x720
Linux	Safari	1920x1080
Windows	Firefox	1920x1080

この結果をExcelやSpreadsheetにコピペしてソートするとわかりやすいのですが、

  • OS-Browser-resolution

3つのパラメータを組にしてそれぞれのパラメータが取り得る値を全網羅するテストケースであることがわかります。
これは全組み合わせを網羅したテストケースです。

基本編 とりあえずPICTを実行してみる
では、テストケース数が20でしたので、全組み合わせを網羅した場合はテストケース数が60なので1/3に抑えられたことになります。

/sオプションをつけてモデルの統計情報を表示してみます。

pict sample.txt /s /o:3

60の組み合わせがあり、そこから60のテストケースが生成されたことがわかります。

Combinations:   60
Generated tests:60
Generation time:0:00:00

なお、サンプルモデルのパラメータ数より大きい値を指定するとエラーになります。

pict sample.txt /o:4

Input Error: Order cannot be larger than number of parameters

/rオプションでランダムなテストケースを作成する

以下を実行すると、必ず同じ結果が出力されますが、

pict sample.txt

/rオプションをつけると、出力結果がランダム化されます。
以下のコマンドを数回実行すると、出力結果が変わることが確認できます。

pict sample.txt /r /o:2

この時、実行に使用されたseed値が出力ストリームに出力されます。

Used seed: 10306

次回、/r:seed値を指定すると、この時に実行したのと同じ結果が出力されます。

pict sample.txt /r:10306

応用編2 制約条件を指定してPICTを実行する

以下のように制約条件を指定することもできます。

sample02.txt
#
# This is a sample model
#

OS:           Mac, Windows, Linux, iOS, Android
Browser:      Chrome, Edge, Firefox, Safari
resolution:   1280x720, 1920x1080, 2560x1440

# 制約条件 OSがiOSかAndroidの場合、resolutionは2560x1440は除外する
IF [OS] = "iOS" OR [OS] = "Android"   THEN NOT [resolution] = "2560x1440";

結果

OS	Browser	resolution
iOS	Safari	1280x720
Mac	Safari	1920x1080
Android	Safari	1280x720
Linux	Chrome	2560x1440
Mac	Edge	2560x1440
iOS	Chrome	1920x1080
Linux	Safari	2560x1440
Windows	Edge	1920x1080
Windows	Firefox	1280x720
Windows	Chrome	1280x720
iOS	Edge	1280x720
Mac	Chrome	1280x720
Android	Chrome	1920x1080
Android	Edge	1920x1080
Linux	Edge	1280x720
iOS	Firefox	1920x1080
Linux	Firefox	1920x1080
Windows	Safari	2560x1440
Android	Firefox	1920x1080
Mac	Firefox	2560x1440

応用編3 サブモデルを指定してPICTを実行する

GitHubで編集を提案

Discussion