初めに
テストケースの作成において、以前から次のような悩みを抱えていました。
- 因子をもとにテストケースを作成し、スプレッドシートにまとめる作業が手間になる
- 因子の数が多いと、それに伴い実施すべきテストも増えてしまう
そんな中、PICTというツールを知り、このツールを活用すればこれらの課題を解決できるのではないかと感じました。そこで、今回は実際に試してみようと思います。
PICTとは
MicrosoftのOSSで、テストケースを抽出するツールです。
因子の一覧からコマンド実行でテストケースを抽出できます。
OS: Win10, Win11
言語: English, Japanese
> pict .\factor.txt /o:2
OS 言語
Win10 Japanese
Win10 English
Win11 English
Win11 Japanese
試してみる
環境は以下です。
OS:Windows11 PRO
PICT:3.7.4
インストール
1. PICTのGitHubからexeファイルをダウンロード
PICTのGitHubからexeファイルをダウンロードします。
2. Pathを通す
環境変数からexeファイルのパスを通します。
たったこれだけでOKです。
> pict
Pairwise Independent Combinatorial Testing
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
テストケース抽出
実際にテストケースを抽出してみましょう。
1. 因子ファイルを作成
今回は、「パーティーの参加者と食事」というテーマで因子を作成してみました。
年齢区分: 未成年, 成人
食事: 肉, 魚, 麺, ピザ
飲み物: コーラ, オレンジジュース, ビール
2. コマンド実行
因子ができたら、以下のコマンドを実行します。
このコマンドを実行することで、factor.txtに定義した因子の組み合わせが自動的に生成されます。/o:maxオプションは、全ての組み合わせを表示するために指定しています。
> pict .\factor.txt /o:max
年齢区分 食事 飲み物
未成年 ピザ オレンジジュース
成人 ピザ オレンジジュース
未成年 肉 オレンジジュース
成人 肉 コーラ
成人 魚 ビール
未成年 ピザ ビール
成人 肉 ビール
成人 魚 コーラ
未成年 麺 コーラ
未成年 麺 ビール
未成年 魚 コーラ
未成年 麺 オレンジジュース
未成年 ピザ コーラ
成人 麺 オレンジジュース
未成年 魚 ビール
未成年 肉 コーラ
成人 ピザ コーラ
成人 麺 コーラ
未成年 肉 ビール
成人 肉 オレンジジュース
未成年 魚 オレンジジュース
成人 麺 ビール
成人 ピザ ビール
成人 魚 オレンジジュース
これだけでテストケースが抽出できました!
オプション、使い方
GitHubにオプションの使い方などが一通り載ってました。
https://github.com/Microsoft/pict/blob/main/doc/pict.md
この記事でもいくつか紹介したいと思います。
1. テストケースの数を抽出したい
抽出されるテストケースの数を知りたい時は/s
オプションを使用します。
Generated tests
がテストケースの数です。
> pict .\factor.txt /o:max /s
Combinations: 24
Generated tests:24
Generation time:0:00:00
2. 組み合わせの条件指定
↑の例では未成年がビールを飲むことになっていますね。
未成年者がビールを飲むという選択肢が不適切であるため、その組み合わせを除外するために、条件を設定してみましょう。
このシステムでは「未成年の場合選択肢にビールは出てこない」ため、試験をする必要はないとします(本来であれば選択肢に出てこないことを確認するべきですが、条件指定を試したいので)。
というわけで、未成年の場合ビールはNGという条件を加えてみましょう。
条件は因子のテキストファイルに記載できます。
年齢区分: 未成年, 成人
食事: 肉, 魚, 麺, ピザ
飲み物: コーラ, オレンジジュース, ビール
if [年齢区分] = "未成年" then [飲み物] <> "ビール";
これにより、未成年がビールを飲むというテストケースをなくすことができました。
> pict .\factor.txt /o:max
年齢区分 食事 飲み物
成人 麺 ビール
成人 麺 コーラ
成人 魚 ビール
成人 ピザ コーラ
成人 肉 オレンジジュース
未成年 魚 オレンジジュース
成人 魚 オレンジジュース
未成年 肉 オレンジジュース
成人 肉 ビール
成人 ピザ ビール
成人 魚 コーラ
未成年 魚 コーラ
未成年 ピザ オレンジジュース
成人 肉 コーラ
成人 ピザ オレンジジュース
未成年 麺 コーラ
未成年 ピザ コーラ
成人 麺 オレンジジュース
未成年 麺 オレンジジュース
未成年 肉 コーラ
3. テストケースを効果的に減らす「ペアワイズ法」
ペアワイズ法とは
ペアワイズ法とは、ソフトウェアテストの効率化手法のひとつです。
「多くの不具合は 1つまたは2つの因子の組み合わせ によって発生する」という経験則に基づき、すべての因子の組み合わせを網羅するのではなく、2因子間の組み合わせを満たすようにテストケースを作成します。
これにより、全組み合わせをテストするよりもテストケースの数を大幅に減らしながら、重要な組み合わせをカバー できます。
ペアワイズ法の指定方法
PICTではペアワイズ法に沿ったテストケースを抽出することが可能です。
/o:2
をつけて実行するとペアワイズ法に沿ったテストケースを抽出します(そもそもデフォルトが/o:2
なので、指定する必要もありません)。
> pict .\factor.txt /o:2
年齢区分 食事 飲み物
未成年 麺 コーラ
成人 魚 ビール
成人 肉 ビール
成人 ピザ ビール
成人 麺 オレンジジュース
未成年 肉 コーラ
未成年 ピザ オレンジジュース
成人 肉 オレンジジュース
未成年 魚 オレンジジュース
成人 麺 ビール
成人 ピザ コーラ
成人 魚 コーラ
終わりに
今回はテストケース抽出ツールのPICTを紹介しました。
因子を挙げてからスプレッドシートでマトリクスを作るのが手間だったのですが、これなら少し楽になりそうですね。
また、ペアワイズ法を用いて効率的なテストケース抽出ができるのも魅力ですね。是非活用していきたいと思います。
ここまでご覧いただきありがとうございました!
参考