EXCEL上で動作するPairwise組み合わせテスト設計支援ツールPICT-PAPP公開


EXCEL上で動作するPairwise組み合わせテスト設計を支援するツール[PICT-PAPP(Pairwise Independent Combinatorial Tool - Pre-And-Post Processor)](https://github.com/sho1884/PICT-PAPP)を作成しましたので公開します。以下に置きました。

[https://github.com/sho1884/PICT-PAPP](https://github.com/sho1884/PICT-PAPP)

Pairwiseの組み合わせ生成そのものは、よく知られた[CIT-BACH](http://www-ise4.ist.osaka-u.ac.jp/~t-tutiya/CIT/)または[PICT](https://github.com/Microsoft/pict)にやってもらうものです。
類似のツールとしては、これまたよく知られた [PictMaster](https://ja.osdn.net/projects/pictmaster/) があります。どちらもEXCELのVBAで実装されています。外部ツールCIT-BACHとPICTへの入力ファイルを生成し、指定した外部ツールであるCIT-BACHもしくはPICTを実行し、結果を取り込みます。
（「既存ツールがあるのに、なんでまた作るかな？」と思われた方には、ぜひ本稿末尾の補足説明まで読んでいただけると嬉しいです。補足説明の方が長かったりしますが、、、）

さて、いよいよテストの自動化に取り組む現場が急速に増え始めたように感じています。Pairwiseによる組み合わせにより自動生成されるテストケースはデータ駆動およびテスト自動化と大変に相性が良いと同時に、バグ検出率も高く、さらに無駄がなく効率の良いもので、まさにうってつけのテスト設計手法と言えると思います。

テストケース毎に入力項目や設定を変える場所、また観測する場所が変わるようなテストに対応する自動化スクリプトを作成するのと、設定や入力や観測箇所の数は多いかもしれませんが、それらがいつも同じ並びにそろっているテストに対応する自動化スクリプトを作成するのと、どちらが楽で、保守性が上がると思いますか？
（「いやその前に、何でバグ検出率が高くなるのか？　設定や入力や観測箇所の数が増えるのは非効率なのではないか？」そんな疑問を持たれた方にも、ぜひ本稿末尾の補足説明まで読んで頂ければと思います。）

早速どんな特徴があるのか見てみたいという方は、[同じ場所にサンプルデータと、その実行済みのデータを残したExcelファイル](https://github.com/sho1884/PICT-PAPP)を置いておきましたので、それを見てみてください。
サンプルデータは、まずは100因子で各因子の平均水準数が4ぐらいのものが扱えると嬉しいということで、その通りに機械的に生成しただけの意味のないものです。
しかし、その中に禁則関係が入っていないとその扱いが理解できないと思いますので、機械的に生成した中に、一つだけ意味のある禁則関係があるものを埋め込んであります。書籍[『ソフトウェアテストHAYST法入門』](https://www.amazon.co.jp/dp/4817192283/ref=cm_sw_em_r_mt_dp_U_uuM1CbPNAFS5D)[P.114]の「7-2-3. ３因子以上の禁則マトリクス」の説明の中で例示されている〔表7.5 禁則マトリクス(条件因子が複数存在する場合)〕の因子・水準と禁則マトリクスを含めました。（ただし、この仕様は10年以上前のものなので、たまたま手近にあって使える富士ゼロックス製 ApeosPort-VI C3371 の仕様を確認してそれに合わせて修正してあります。）
どんな結果になるか確認してみてください。

このツールの使い方や、あるいは実務の中で組み合わせテストを設計するための手順がどうなるのか、ということが気になる方には、[別稿として手順書](https://qiita.com/sho1884/items/db1662e75dbf84fccc94)も投稿してあります。そちらを参照してください。

本ツールには「外部ツールによる生成結果の中に出現していない2因子組み合わせが、禁則指定されたもののみであることを確認するための[Alloy](http://alloytools.org/download.html)ソースを生成する」機能もあります。（これについては別途もう少し詳しく説明する予定です。「もともと確認するまでもなく自明でしょ！　[Alloy](http://alloytools.org/download.html)の使い方として間違ってるんじゃないの？」と感じる方も多いと思いますので。）

# 補足説明

まず、「既にPictMasterが存在するのに、なぜまた似たようなツールを作っているのか？」という疑問を持つ方も多いと思うので、その理由を説明しておこうと思います。

最大の理由は、PictMasterがその仕様として扱える因子の最大数を50に制限しており、これでは実務でHAYST法を適用しようとした場合には使えないからです。
（詳しい方であれば「HAYST法といえば直交表の方だろ！」と突っ込みを入れたくなることと思いますが、そこはいろいろと事情もありまして、そこだけPairwiseで代用したハイブリッド手法を採りたい場合を想定しています。HAYST法はもっと上流から全体を通したテスト設計手法ですので。）

ところで、ネットを見ていると、「組み合わせテストのコストと効果を考えれば、因子数の相場は10個程度が良いでしょう」と説明されている記事もあります。
また、先述した通りPictMasterが扱える因子の最大数は50と制限されていることから、これは50もあれば十分と考えられているものと想像されます。
とすると、何やら同じ「組み合わせテスト」と言いながら、だいぶ考え方が違うものが混在する状態になってしまっているのではないか、と思えてきます。

少なくともHAYST法は上記したものとは考え方が違っており、その違っている部分に本質があり、効果実績を上げてきたものと考えられます。

以下のサイトを見て頂ければわかりますが、因子数50以下では一つのサブシステム程度しか扱えないことになってしまいます。
私自身の経験では、これまでのところ因子数100～300ぐらいになることがよくあるケースでした。
[https://www.fujixerox.co.jp/solution/management/hayst.html](https://www.fujixerox.co.jp/solution/management/hayst.html)

例えばソフトウエアに何らかの手を入れた場合、その影響範囲を正しく絞り込むことはなかなかに困難であり、しばしば失敗します。そういったミスがあったとしてもバグの流出を防ぐ、そんなことを最も期待できるのが無則組み合わせテストだ、と考えています。ですから、因子を厳選して10個程度に絞り込んでしまったら、そういう意味での効果はほとんど失われてしまうと思います。

開発経験者の方は、欠陥と疑われるインシデントの一報が入ってきたときのことを思い起こしてみてください。
多分幾度となく次のような経験をされたことがあるのではないでしょうか？

- 「こんな値を入れてある操作をしたら動きません。」とか、「おかしな動作をします。」とか言われます。

- 「おかしいなぁ、そんな値もちゃんと入力してテストし、正しく動いていたはずだし、、、」と思いつつ、手元でやってみます。

- やはり正常にちゃんと動きます。

- しかし、お客様のところではどうやら違った動作をしているのです。何か違うはずなので、原因究明のためにはそれを特定するのが最優先課題になります。

- 「他にどんな値を入れましたか？」「その前にどんな操作をしましたか？」「設定を変えましたか？」「どこどこの設定値は何になっていますか？」などなど、いろいろ聞いていくと、手元とは違う何かが見つかります。

- そこで同じ条件を手元でも作り出すと、なんとお客様のいう通り、おかしな動作になることを目の当たりにすることになります。

- 「えっ、なんでこんなところが関係するの？」ということになり、「あっ、そういえば…」と思い当たることもあれば、調査の結果が明らかになるまで何の関係があるのかさっぱりわからないということもあります。

こういう欠陥こそが簡単に通常のテストでは見つからずに市場に流出してしまいます。そして、それを防ぐ効果が最も期待できるのが無則組み合わせテストです。

確かに多くの因子に気を配り、設定や観察の対象とするのには手間がかかることもあります。絞り込みたくなる気持ちはとてもわかります。

しかし一方、因子はテストの時に見ないようにしたり考えないようにしたらなくなるものではありません。値はデフォルトのままになっていたり、その時点までの他のテストの経緯によって決まる何らかの値となって確実に存在し続けています。そのことを忘れてはなりません。

幸い、直交表やPairwise法のおかげで、2因子網羅のテスト項目数は単機能テストと同程度の数(異常値をやらないので少ないぐらい)に収まります。だから因子数が数百であろうが十分に現実的な範囲に収まる、ということになります。

というわけで、存在している因子を減らすことなど決してできない中で、最大50という因子数の制限は、「そんなのあり得ない！」と言いたくなるほど大き過ぎる制限なわけです。

これがきっかけで自分でツールを作り始めることになったのでした。

ところが、出来上がり始めてみると、もともとPictMasterとはコンセプトがだいぶ違っていることに気付くことになりました。

以下に、どう違うかを少し説明してみます。

まず、PictMasterですが、これについてはその説明書の中で、「(PICTの)用意さ れている数多くの機能をできだけ簡単な操作で使えことを目標にして開発されました。PictMasterは、CUI(キャラクターユーザインターフェース)ベー スのPICTとCIT-BACH にExcelのGUI(グラフィカルユーザインターフェース)の 殻をかぶせます。ユーザからは PICT／CIT CIT-BACH の存在はまったく見えせん。GUI ベースですべての作業を行なうことができます。」と説明されています。

これに対し、私の方はそんなことは特に考えませんでした。CUIをGUIに置き換えたからといって簡単になるとは全然思えないからです。もっと実務的な理由から必要な機能を盛り込んだだけです。

環境としてEXCELを選んだのも、実務的にそれで作業する機会が多いから、というだけのことです。

因子・水準を洗い出し、取りまとめて、レビューしたり、また禁則も洗い出し、精緻に調べ、これもまたレビューするといった作業が必要になります。

関係者にさらなる情報をもらったり、確認してもらったりするので、EXCEL形式が便利です。

その後、その情報をツールに渡し、今度はツールが生成したテストケースの出来栄えを評価したり、関係者にどんな品質のテストになっているかを説明したりするためにもEXCEL形式が便利です。

関係者にどんな品質のテストになっているかを説明するのに、以下のような「総当たり表」はかなり便利であり、また効果的です。

![PICT-PAPPサンプルデータと実行結果付き.xlsm-総当たり表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246520/c73890c9-2e60-3b92-1a37-ee759effe99c.png)

これを見せれば「何を網羅しようとしているのか」、また「どれだけたくさんの組み合わせをどれだけ丁寧に網羅しようとしているのか」が一目瞭然となります。

なので「総当たり表」は、無則組み合わせテストやHAYST法に取り組まれようとする方々にとって、まずは自分たちにとっての理解のし易さ、ということはもちろんですが、何よりも自分達の取り組みを上司やお客様に対して分かり易く効果的に説明できるようになる、その点が一番喜ばれるものとなっています。

というわけで、Excelにはちょっと重い機能となってしまっているのですが、その辺りの機能が欠かせないと考え、今回作り込みました。
これでやってみて、その効果や説明力を実感でき、もっと本格的に取り組もうとお考えになった際には、ぜひ[HAYST法ツールをお買い求めください。](https://www.fujixerox.co.jp/solution/management/hayst.html)（いや、もちろん私にはなんの特にもなりませんが。）

さて、PictMasterはユーザとPICTの間に入ってPICTを隠します。なのでこれはFEP(front‐end processor)ということになります。

一方、私が作った方のツールはPICTに渡す情報を整理・作成する前の作業と、PICTが生成したテストケースを受け取って、それを評価したり説明しやすくするために加工処理をするものです。それゆえ[PICT-PAPP(Pairwise Independent Combinatorial Tool - Pre-And-Post Processor)](https://github.com/sho1884/PICT-PAPP)と命名しました。
手順通りにやればそれなりの組み合わせテストができるようにしてあります。

また、外部ツールの呼び出しも自動的に行われるので、一応その存在は意識しなくても処理ができるようにしてあります。そこはPictMasterと同様です。しかし、PICTを隠そうとか、様々な細かい機能を漏れなくGUIでコントロールできるようにしよう、とかいうことはほとんど考えてきていません。

特に凝ったことをやろうとした場合は、生成されたCIT-BACHやPICTのソースに直接手を加えたり、コマンドオプションを設定した方が早いはずです。なので、そういうことはこのツールの外側で自由にやってください、というのが現在の私のスタンスです。

ただ、使ってくれる方がいらっしゃるのであれば、そのご意見も検討して採り入れていきたいと思っています。
テスト自動化の取り組みと合わせて、無則組み合わせテストやHAYST法のようなテスト設計技法との相性の良さ、品質向上への威力や効果、また効率性が理解が進み、少しでもそのメリットを享受する現場が増えることがあれば嬉しいです。