PICTを使ってテストケースの組み合わせを自動作成してみよう

## はじめに
2023年3月にLITALICOに入社した@s_nrmです！

PICTというツールはご存じでしょうか？
テスト設計を手助けしてくれるツールで、特に組み合わせが膨大になるテストケースを作成する際はとても便利なツールです！
今回はPICTを使用したテストパターンの自動作成方法について書いていこうと思います。

## PICTとは？
PICT(Pairwise Independent Combinatorial Testing tool)はMicrosoft社が提供している、テストケースの組み合わせを自動で作成してくれるツールのことです。
ネットから誰でも無料でダウンロードして使用することができます。

## 使い方

### 1.PICTをダウンロードする

始めに以下のリンクからPICTmasterとPICTをダウンロードします。(２つとも必要です！)

①PICT(PICT本体)
https://github.com/microsoft/pict/releases/download/v3.7.4/pict.exe
クリックすると「PICT.exe」というファイルが自動的に保存されます。

②PICTmaster（excelでPICTを動かすために必要）
https://sourceforge.net/projects/pictmaster/

リンク先に遷移すると以下の画面が表示されるので、「Download」ボタン押下でダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/014b0252-4b8a-3a2e-58e7-02b047bb2177.png)

### 2.ダウンロードした「PICT.exe」の置き場所を移動する
ダウンロードした「PICT.exe」というアプリケーションファイルは、置き場所を適切な場所に変更する必要があります。
「C:\Program Files (x86)」フォルダ内に「PICT」という名前のフォルダを新規作成し、そこにダウンロードした「PICT.exe」を置いてください。
↓こんな感じです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/e0ba3b36-ee70-ce48-b597-10aba30f0e6f.png)


### 3.ダウンロードしたPICTmaster（excelファイル）を確認する

PICTmasterをダウンロードすると、「PictMaster 7.0.4J」というフォルダが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/5773cac8-629c-cb29-6c4b-26d2f4486d1f.png)
↓
開くと中身はこんな感じです。
メインで使うのが赤枠のxlsmファイルになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/083b8353-c04b-6d9b-21f2-4db534f9d681.png)

PictMaster.xlsm
PictMaster64.xlsm
の2つのファイルのどちらを使うかですが、これはPCで使用しているexcelが32bit版か64bit版かによって使うものを変えてください。
どちらを使用しているかは、excelを開いた後に「ファイル>アカウント>Excelのバージョン情報」から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/c8dae9c9-3f02-65c1-5a0c-66522ed88d4e.png)

私が使っているのは64bit版のようなので「PictMaster64.xlsm」を使用するという感じです。


### 4.PICTmaster（excelファイル）を開く

PICTmasterを開いてみると、↓このような内容のexcelが開かれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/619ae85a-fccb-baba-518b-9aecb0c0bb1d.png)

この時「はこのマシンでは利用できないため、オブジェクトを読み込めませんでした」というエラーが出てしまったときは色々と対応が必要になってきます(泣)
以下の記事などを参考に対応してみてください。

https://hangstuck.com/excel-error-mscomctl/

https://ameblo.jp/pictmaster/entry-12256689735.html


### 5.パターンを自動作成する
ようやく事前準備が終わり、ここからメインの目的であるPICTでのテストパターンの自動組み合わせを行っていこうと思います。

1.今回は果物を加工するパターンとして、以下のような因子水準を用意しました。

:::note

果物
・イチゴ
・りんご
・ブドウ

砂糖
・入れる
・入れない

調理方法
・鍋で煮る
・果汁を絞る
・乾燥させる

→ジュースができること
→ジャムができること
→ドライフルーツができること

:::


2.これをそのままPICT内に記入していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/0fa240ec-2c04-8834-e78b-f95650177c95.png)

入力するとこんな感じです。
(「値の並び」内はカンマ区切りで入力してください)



3.「実行」ボタンを押す
入力したら「実行」ボタンを押下してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/e97f5b36-8f32-b977-9fc6-91d3201e6824.png)

すると、、

「a.xls」というファイルが新たに作られ、パラメータに設定した内容を自動で組み合わせてくれました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/4fe75cb6-a8db-350e-3ed9-881f5ea29e95.png)

全網羅すると18パターンになってしまうテストケースを、いい感じに実施内容をばらけさせた状態で10パターンにまで省略してくれています。
あとはこれを自分のテストケースに反映させるだけで、テスト設計が完了です。


### 6.パターン作成方法をカスタマイズする
単純に事前に用意しておいた因子水準をまんべんなく組み合わせたい場合は、5の内容通り因子水準を入力し実行するだけで問題ありませんが、テスト内容によってはこの組み合わせを多めにやりたい、とか、この組み合わせは除外したい、等の条件を付けたい場合も多々あると思います。
そんな時は以下のような設定を行うことで、パターンの組み合わせを操作することが可能です。

#### ①制約をつける
「鍋で煮る」を指定しているときは、必ず砂糖が「入れる」になっていて欲しい等、この条件の時はこの内容との組み合わせだけにしたいな～というときは、制約をつけることで必要のない組み合わせを除外することができます。

1.「環境設定」を開いて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/852ebe42-4fb5-7351-ef54-00c59609605d.png)

2.「制約表を使用」にチェックをつけます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/e378e620-8683-8fb3-419b-549b6278a25d.png)

3.閉じると、下の方に「制約表」が追加されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/bd37fcbd-123b-f7fc-e5c3-aadb01edc690.png)

4.追加された制約表に制約をかけたい内容を記載していきます。
今回は「調理方法：鍋で煮る」を指定したときは、「砂糖：入れる」が常に入るようにしたいと思うので、

砂糖に「入れる」、調理方法に「鍋で煮る」を入力し、制約をかける条件(「鍋で煮る」)の背景色を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/522a4dfe-bd92-740d-d988-7f194e9351b9.png)

:::note
制約をかけたいパラメータ内の値に対して、必ず背景色を「白色以外」に設定してください！(しないと失敗します)
:::

5.実行ボタンを押し、作成されたパターンを確認すると、「鍋で煮る」の時は砂糖が必ず「入れる」になっている状態でパターンを作成することができました！
これが制約付けになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/74a099ce-893a-34ae-ab45-c61a1ad4ebaa.png)



#### ②エイリアス
ブドウの組み合わせはしっかりテストしたいけど、イチゴとりんごは２つ合わせてブドウと同じくらいのパターンができていればいいや～というような、複数の値を同じパラメータとみなして作成したい場合はエイリアスの機能を使います。

1.同じパラメータとしたい値と値の間を「カンマ（,）」ではなく「パイプ（|）」に変更してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/89faebc4-fde9-6b0e-a098-194e5dc753fa.png)

2.この状態で実行ボタンを押しパターンを作成すると、「イチゴ&りんご」と「ブドウ」が同じ比率でパターン化されるようになります！これがエイリアスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/d2cd66f9-096a-cedb-66f9-b2185f9ab3c6.png)


#### ③重み付け
「果汁を絞る」パターンを多めにやりたい！等、特定の値を使ったパターンを他よりも多めに作ってほしいときは重み付けを行います。

1.多めに実行したい値の後ろに「(2~10)」を入力します
(数字が大きいほど比重が大きくなります)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/1569a1cb-475e-9bad-30d4-d32dcfaa452d.png)

2.この状態で実行ボタンを押しパターンを作成すると、、「果汁を絞る」パターンが他よりも多めに設定されていることが分かると思います！これが重み付けです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631562/d4dbb61a-a621-f140-9b35-78d4ed0da2e8.png)


以上3つが実際に私がPICTでパターン表を作っていた時によく使っていた条件指定になります。
その他にも色々な設定などができると思いますので、色々と触ってみて使いやすいやり方を試してみてください！


## 最後に
チーム内でPICTを使ったことがあるかという話が出たのがきっかけで、思い出しがてら今も使い方覚えているかな..という確認もかねて記事にしてみました。
以前に業務で使用していた時からかなり期間が空いていることもあり久しぶりに使ってみるとあんまり覚えておらず、良い勉強の機会になりました。(最初のセットアップがめちゃめちゃ大変でした..)


テストケースを作成するとき、組み合わせを減らして実施するパターンを減らしたいといっても、どうやって減らせばいいのか、、と迷う場合も多いと思います。
そんな風に迷ったときはPICTを使って、いい感じにパターンを減らしつつ、組み合わせを自動で作成してもらって是非楽をしてみてください！