Pictmaster味わい紀行

#概要
Pictmasterでテストデータを生成する作業を、テスト要件定義・テスト設計・テスト実装の各プロセスでどう利用するかの事例。
生成方法（ペアワイズまたは直行表）による生成結果の比較。
組み合わせるパラメータ数やカバレッジを変えることでの生成結果の変化。
以上を観察してみる。
#お題
ラーメン店のレシート発券システム
提供するメニューは

|因子|パラメータ1|パラメータ2|パラメータ3|パラメータ4|パラメータ5|
|:---|:---:|:---:|:---:|:---:|:---:|
|スープ|醤油|味噌|塩|豚骨醤油|あごだし|
|麺固さ|固目|柔らかめ|普通||
|背脂|多め|少なめ|||
|チャーシュー|肉厚|普通||
|ネギ|多め|少なめ|||

スープが豚骨醤油と魚介系については基本料金が700円で、他は650円。
麺固さ・背脂・チャーシュー・ネギについては特にオプション価格は設定しない。
精算時に、お客様に発行するレシートには、スープと背脂とチャーシューとネギについて、注文内容に記載したい。
例えば、「豚骨醤油の背脂多め 特製チャーシュー ネギ多め 650円」　みたいに。
#テスト要件定義作業
「発行するレシートに記載の注文書きと値段」が検証のポイントかと思いますが、大抵は実装する機能要件やビジネス目的のみ記載された資料がテストチームにはインプットされるのだと思います。
また、明言していないこともある場合が多いので、テスト設計前に「このサービスに潜むリスクってなんだろう？」を洗い出しておくのが賢明です。と同時に洗い切れていないと思っておくのも良いです。

1. 料金は、スープによって決まるようなので、650円と700円しかあり得ないけど、トッピングとか要件に漏れていないのか。
2. 要件に漏れているトッピングはレシートに記載される注文書きに影響しないのか。
3. 肉厚チャーシューのことを特製チャーシュー　って言うみたいけど、その手のルールは他に無いのか。

気がかりなことは記録して再確認するとして、テスト設計に入っちゃいましょう。全部明確になってからを、次の作業の開始条件にする必要はありません。何故なら、ALL Pairで生成するテストデータ量は、追加になった条件（因子）と、それに含まれるパラメータの数（水準数）を単純にかけ算して爆発させたりしないからです。
#テスト設計作業
Pictmasterには、結果表という機能があり、条件によって異なる期待値をALL Pair生成と同時に生成して利用できる機能があるのですが、今回のようなレシートに印字される文字列を全ての組み合わせについて、結果を準備してから生成するのはお薦めしません。生成されたテストデータを連結して期待値文字列を生成するなんて、後で如何様にもできるからです。
失敗例：
![pict001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/40d7624f-952e-7cd8-c3a6-5481b6050181.png)
テストデータ生成中に、結果表に準備した組み合わせが出現しないとエラーになり、結局、期待値を準備してもテストデータに反映されません。（ALL Pairの組み合わせ生成はしてくれます。）
お値段が2種類しか無い不自然さがありますが、結果表で期待を生成するとしたら、こんな感じでしょうか。
お値段の期待値は、数値型にしておきます。650円とか通貨単位を付けてしまうと、後々の仕様変更に対処するとき、邪魔になるからです。
繰り返しになりますが、Pictmaster / Excel、それぞれ得意な役割がありますので、どこでテスト実装するかはとても大切な選択になります。
![pict002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/cec9457a-9a98-5336-0064-d911e5e49b95.png)
生成されたテストデータは、Excelでさっさと並べ替えてしまうのが賢明です。
理由ですが、因子の数や水準数が多くなると、条件が異なっても、期待値が同一になる場合があって、テストデータについては、期待値でソートしてしまうのが、異常の発見が容易になるからです。特に手動でテスト実施の場合には見落としが減ります。
いろいろテスト条件を変えながらテストしても、結果が同じという前提でテストすると、たまに違う場合があれば、気がつきやすいですね。テスト担当者が何人も居る場合、期待値で分けたテストを配ってもいいかもしれません。この手の組み合わせテストは、非常に単調な作業の連続になりやすく、如何にして異常に気づきやすくするかが、テスト実施の時に鍵になるのではないでしょうか。自動テストなら、あまり気にしなくてもいいかもしれません。
![pict003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/d53e8bf3-003c-bd3e-45ec-e16b8529a3d0.png)
前述した「期待値は、後で如何様にも対応」も、ALL Pair生成さえしてくれれば、後はExcel側の埋め込み式で可能なので、そちらを利用します。

```期待値の埋め込み式
=B2&"ラーメン "&"背脂"&D2&" "&IF(E2="肉厚","特製チャーシュー ","普通チャーシュー ")&"ネギ"&F2&" "&G2&"円"
```
テストデータは、手動テストでチェックシートとしてテスト結果を記録するドキュメントに使う場合もあれば、自動テストのテストデータとして使う場合もあるかと思います。
![pict004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/c3cc511f-524e-19b7-a0db-850516a069fe.png)
テスト実装できそうなので、生成条件を変えて、どの様に生成するか観察してみることにします。
#テスト実装
Pictmasterで利用できる設定は、以下の画面のように
![pict005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/69afe907-1bfe-3297-f546-83a2eb67c839.png)
生成方式や組み合わせるパラメータ数、3-wayカバレッジ等ありますので、それぞれ変えてみます。
生成直後には分析機能も使えるので、生成されたテストデータのカバレッジについても確認してみます。
![pict006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/1db536ff-709f-0310-a441-b0f447069a3a.png)

1. 生成方式、ペアワイズ法（デフォルト）と直交表での違い
生成された件数が、ペアワイズ法では15件だったのに対して、直交表では17件でした。生成エンジンが異なるので違うということだけで、善し悪しではありません。
生成されたテストデータを比べてみると、同じものもあれば、違うものもあります。
![pict007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/996de8fb-4ad7-eeec-556b-5d4602c9b6f3.png)
醤油味のテストが直交表では手厚い。
2. 組み合わせるパラメータ数を「3」にしたら、3-wayカバレッジは100%になるか。
生成中に4-wayのカバレッジを測定している様子が判ります。
![pict008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/73b37481-b3ba-29bb-47c7-bbf21aabd90b.png)
ひょっとして、カバレッジ分析機能は4-wayの値を出すのか　と思いましたが、
分析機能が動作するのは、組み合わせるパラメータ数を「2」にした時だけみたいです。
![pict009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/31dd2ff4-089f-3e09-fabb-6961986a178b.png)
3. 3-wayカバレッジをあげたら、分析結果と合致するか。
生成環境の設定画面で、カバレッジを指定した生成機能を使い、最大95%まで上げて生成し、生成した後で
カバレッジ分析をしてみました。
![pict010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/cd5dba7f-848d-16be-5322-0cd90382b36e.png)
95%でした。どうやらPictmasterでは、組み合わせるパラメータ数+1の組み合わせも、極力生成するように環境設定で指定できるようです。ALL Pair法を使ってテスト実施し組み合わせテストでバグ出しするのは、2-wayを基本で良いのですが、（テストデータ件数が増えるのは目をつぶって）3-way以上の組み合わせもテストしたい場合が実際にはあります。設定値の調整で如何様にもできそうです。
4. 組み合わせるパラメータ数を「5」にしたら、全組み合わせになるか。
当たり前ですが、今回の因子数の最大値5にセットすれば総当たりの組み合わせ数
5✕3✕2✕2✕2 = 120件
になるかですが、
![pict011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939617/71db7757-4bc2-2e2b-295c-5af32267bc03.png)

当たり前ですが、120件生成されました。
#総括
以上、簡単ですがPictmasterでテストデータ生成を行なうに当たっての注意ポイントや環境設定による生成の違いを見てみました。設定可能な全てを試したわけではありませんが、組み合わせるパラメータ数、または、カバレッジを指定して生成する機能を適宜調整することで、組み合わせテストに要求される条件を受け入れたテストデータを生成することができそうです。旨くつきあって効果的なテストデータを利用しましょう。
次回は、テスト中の仕様変更に対してどう対応するかを投稿の予定です。