フリーでオープンソースな直交表方式の組み合わせテストツール DataGan | 組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題

フリーでオープンソースな直交表方式の組み合わせテストツール DataGan

直交表を用いて組み合わせテストケースを作成したいと考えている人には朗報ですかもしれません。

これまで直交表方式の「実用的」な組み合わせテストツールをネット上で探しても見つかりませんでしたが、ひょんなことからフリーソフトでしかもオープンソースのテストツールが見つかりました。「DataGen」というなんだか適当?な名称のツールです。普通に直交表、テストツールをキーワードに検索しても検索結果の上位に現れないので、これまでほとんど知られていないツールだと思いますが、なんと2007年にはすでに公開されていたようです。

DataGenは次のサイトからダウンロードすることができます。

http://www.geocities.jp/takefumi1604/test/tool.html

DataGenはJAVAベースのツールであり、ダウンロードしたJARファイルを展開するためにJAVAの開発環境がインストールされている必要があります。

DataGenはコマンドプロンプト上で動作しますが、HaystGUIというGUIバージョンもあります。HaystGUIの画面例を次に示します。


GUIバージョンとはいっても、入力ファイルの指定がダイアログから行なえるというだけで、GUIのメリットはあまりありません。コマンドプロンプト上で動作するDataGenを使った方がよいでしょう。

DataGenはパラメータと値が記入されたテキストファイルを読み込み、テストケースをCSVファイルに出力します。対応している直交表のサイズはL256までです。生成される直交表は2のべき乗のサイズになります。任意の因子数、水準数を指定することができ、余った水準には重複して値が割り付けられます。

残念ながら制約には対応していません。ですが手作業で行なうことを考えればこのツールの価値はとても大きいでしょう。

パラメータ数には使用する2水準系直交表のサイズに応じて直交表からくる次の制限があります。

例えば、L256直交表では 2水準、4水準、8水準、16水準のパラメータ数を n2、n4、n8、n16 とすると、n2+n4*3+n8*7+n16*15が255以下である必要があります。

これ以外にも直交表の性質からくる制限がありますが、煩雑になるので省略します。制限に違反する指定を行なうとエラー表示を行なって終了します。

サイトの記述によれば、DataGenは「試供品」ということで、上の式の値が64に制限されるとありますが、実際に使ってみると64を超える指定を行なっても生成が完了しました。ただL256の直交表で理論上可能な最大の組み合わせのパターンをいくつか指定するとエラーとなります。しかし生成が完了するパターンもあります。いろいろ試したのですが、どのような組み合わせまで可能かははっきりしませんでした。それでも般的な組み合わせテストで必要とされるであろうパラメータ数と値の数には対応できているようです。

このツールの興味深い点は、探索問題を解く独自のアルゴリズムを用いて2水準の直交表を変形し、多水準のテストケースを作成している点です。直交表でよく知られている線点図の考え方は用いません。

2水準の直交表を多水準に変形するには、どの列を選択するかが重要です。選択した複数の列を多水準にまとめた場合に他の列と互いに直交する関係になる列を選択する必要があるのですが、このツールではそれを探索問題や最適化問題を解くアルゴリズムとして独自に考案し、実装しています。生成された組み合わせの2因子間の網羅の具合を調べてみましたが、きれいに網羅されており、3因子間の網羅も当然ながら均等でした。

サイトの記述によれば、「探索問題の秘伝に狭き門を先に検索するという原則がある」とあり、確かに直感で考えても最初に最も余裕の少ない道を網羅しておけば後で行き詰まることを回避することができます。

2水準の直交表の任意の2つの列を選び、それらの列の番号の排他的論理和をとると、得られる番号の列が元の2つの列の交互作用の列となっており、これら3つの列をまとめることで2水準から4水準の列に変形することができます。ただし、この条件さえ満足すればどの列を選択してもいいという訳ではありません。

例えば2水準のL16直交表を線点図を用いずに4水準5因子の直交表に手作業で変換することは、最も余裕の少ない組み合わせを優先して網羅していくことによって比較的簡単にできます。ですがL64直交表から8水準の直交表に最適化問題を解く手法で変換する方法が分かりません。例えば2水準のL64直交表から任意の数の8水準と4水準の直交表に手作業で変換するには互いに直交する関係となる7列と3列を指定した個数分選択する煩雑な作業が必要となります。ここにこの問題を解決したアルゴリズムを実装しているこのツールの優れた点があります。

ただし、このアルゴリズムが完璧かというとそうではないようです。このツールの作者はL256直交表について、16水準から2水準までのパラメータの数が、6, 13, 21, 11 と 6, 14, 19, 10 についてうまくいったと書いており、実際に実行させてみると確かにどちらも生成が完了します。しかし、L256直交表で多水準のパラメータを多く割り当てる最大の組み合わせパターンはこれだけではありません。例えば、理論上は 7, 15, 10, 15 の組み合わせパターンも可能ですが、実行してみるとエラーとなってしまいます。これが 7, 12, 14, 24 なら生成がうまくいきます。また、L256直交表では16水準のパラメータが17個作れるはずですが実際に動作させてみると8個までしか作れません(ソースを手直しすることで16個までは作れました)。

どうもこのツールのアルゴリズムでは、理論上可能なL256直交表の最大の組み合わせパターンすべてについては完璧な探索ができていないようです。そうであってもこれは必要なペアの組み合わせが欠落するなどといったテスト漏れにつながるような致命的な問題ではないために、ありません。このことが実用上問題となることはほとんどないと考えられます。ただ、与える入力によってはハングアップする場合があるので注意する必要があります。

ソースコードが公開されているので、アルゴリズムを理解できる方は手を加えることができるかもしれません。これほどこのツールがフリーでしかもオープンソースで公開されていることは素晴らしいと思います。

【注】 現在では直交表に対応したオープンソースのフリーソフトである PictMaster v7.0 を利用することができるようになっています。PictMaster v7.0 は約300種類の直交表テンプレートを内蔵し、モデルに最適なテンプレートを決定してテストケースを生成します。テスト対象に応じて直交表方式とPairwise方式のいずれかを選択することができます。


※ 2月14日 記事内容を変更しました。
※ 2017年3月27日 PictMaster v7.0についての記述を追加しました。