0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

テストケース抽出の手間を軽減する「PICT」の使い方

Posted at

初めに

テストケースの作成において、以前から次のような悩みを抱えていました。

  • 因子をもとにテストケースを作成し、スプレッドシートにまとめる作業が手間になる
  • 因子の数が多いと、それに伴い実施すべきテストも増えてしまう

そんな中、PICTというツールを知り、このツールを活用すればこれらの課題を解決できるのではないかと感じました。そこで、今回は実際に試してみようと思います。

PICTとは

MicrosoftのOSSで、テストケースを抽出するツールです。

因子の一覧からコマンド実行でテストケースを抽出できます。

factor.txt
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. 因子ファイルを作成

今回は、「パーティーの参加者と食事」というテーマで因子を作成してみました。

factor.txt
年齢区分:   未成年, 成人
食事:  肉, 魚, 麺, ピザ
飲み物: コーラ, オレンジジュース, ビール

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という条件を加えてみましょう。
条件は因子のテキストファイルに記載できます。

factor.txt
年齢区分:   未成年, 成人
食事:  肉, 魚, 麺, ピザ
飲み物: コーラ, オレンジジュース, ビール

if [年齢区分] = "未成年" then [飲み物] <> "ビール";

これにより、未成年がビールを飲むというテストケースをなくすことができました。

> pict .\factor.txt /o:max
年齢区分        食事    飲み物
成人          ビール
成人          コーラ
成人          ビール
成人    ピザ    コーラ
成人          オレンジジュース
未成年        オレンジジュース
成人          オレンジジュース
未成年        オレンジジュース
成人          ビール
成人    ピザ    ビール
成人          コーラ
未成年        コーラ
未成年  ピザ    オレンジジュース
成人          コーラ
成人    ピザ    オレンジジュース
未成年        コーラ
未成年  ピザ    コーラ
成人          オレンジジュース
未成年        オレンジジュース
未成年        コーラ

3. テストケースを効果的に減らす「ペアワイズ法」

ペアワイズ法とは

ペアワイズ法とは、ソフトウェアテストの効率化手法のひとつです。
「多くの不具合は 1つまたは2つの因子の組み合わせ によって発生する」という経験則に基づき、すべての因子の組み合わせを網羅するのではなく、2因子間の組み合わせを満たすようにテストケースを作成します。
これにより、全組み合わせをテストするよりもテストケースの数を大幅に減らしながら、重要な組み合わせをカバー できます。

ペアワイズ法の指定方法

PICTではペアワイズ法に沿ったテストケースを抽出することが可能です。
/o:2をつけて実行するとペアワイズ法に沿ったテストケースを抽出します(そもそもデフォルトが/o:2なので、指定する必要もありません)。

> pict .\factor.txt /o:2
年齢区分        食事    飲み物
未成年        コーラ
成人          ビール
成人          ビール
成人    ピザ    ビール
成人          オレンジジュース
未成年        コーラ
未成年  ピザ    オレンジジュース
成人          オレンジジュース
未成年        オレンジジュース
成人          ビール
成人    ピザ    コーラ
成人          コーラ

終わりに

今回はテストケース抽出ツールのPICTを紹介しました。
因子を挙げてからスプレッドシートでマトリクスを作るのが手間だったのですが、これなら少し楽になりそうですね。
また、ペアワイズ法を用いて効率的なテストケース抽出ができるのも魅力ですね。是非活用していきたいと思います。

ここまでご覧いただきありがとうございました!

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?