組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題 -12ページ目

フリーでオープンソースな直交表方式の組み合わせテストツール 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についての記述を追加しました。

PictMaster 6.4.2J をリリースしました

PictMaster 6.4.2J をリリースしました。

このバージョンでの変更点は次の通りです。

【バグ修正】
・「カバレッジを指定して生成」で、生成結果の1行目が削除されてしまうバグを修正した。(v6.4.1のバグ)

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

https://osdn.jp/projects/pictmaster/

冗長なペアの組み合わせを省略してテスト実行時間を短縮する

組み合わせテストではテストケースごとに多くのパラメータの値を変更してテストを実施する必要があります。テスト対象によってはこの値の変更に多くの時間がかかる場合が少なくありません。テスト実行時間を短縮するには、この値の変更にかかる時間を短縮する方法が有効です。値の変更に時間がかかるパラメータをキーにしてテストケースを並べ替えるということはよく行なわれていることでしょう。

それでもテストを行なっていて、このパラメータの値はこれまでのテストケースでテストできているので、これ以上いちいち値を変更しても意味がないのにと思ったことのある方は多いのではないでしょうか。

組み合わせテストにおいて、各パラメータが同じ重要度を有している場合はそう多くはありません。重要度が低いパラメータの場合は2パラメータ間の組み合わせまでを網羅し、3パラメータ以上の組み合わせを考慮しないことで、パラメータの値を変更する作業を削減して、テスト実行時間を短縮することが可能です。

環境設定で「冗長なペアをチェック」を指定してテストケースを生成することで、2パラメータ間の組み合わせが100%網羅されて冗長なペアの組み合わせとなっている値の先頭に半角記号 (^) が付加されるようになります。3パラメータ以上の組み合わせを考慮する必要がないパラメータであれば、この値を任意の値で代替することが可能です。この値の代替で直前のテストケースの値に置き換えることで値の変更が不要となり、テスト実行時間を短縮することができます。

次にモデルの例を示します。


このモデルに対して「冗長なペアをチェック」を指定してテストケースを生成し、パラメータAをキーとして昇順にソートした結果を次に示します。


この生成結果で値の前に半角記号 (^) が付加されている値が冗長なペアに該当する値です。任意のパラメータについて3パラメータ以上の組み合わせ網羅を必ずしも必要としない場合は、この値を任意の値で代替することが可能です。直前のテストケースの値と同じ値に置き換えることで値の変更回数を減らすことができます。

このテストケースでテストを実行するにはすべてのパラメータについて冗長なペアの値の変更を省略した場合、茶色で示した合計134回の値の変更で済みます。青色の値は冗長なペアのチェックを行なわない場合に追加で変更が必要となる値です。冗長なペアのチェックを行なわない場合は合計169回の値の変更が必要となります。

このテストケースでは冗長なペアの値の変更を省略した場合は、省略しなかった場合に比べて20%ほど値の変更回数が少なくなっています。

値の数が少ないパラメータほど冗長なペアが多く、変更を省略できる値が多くなります。省略できるかどうかは直前の値に依存するため、どのパラメータをキーとしてソートするかで変更を省略できる値の個数が変化します。

重要度があまり高くなく、値の変更にかかる時間が多いパラメータについては、ここで説明したように冗長なペアのチェックを適用してテスト実行時間を削減することが可能です。


【テストケースが増えない値の重み付けも可能】

PictMasterの値の重み付け機能では、重み付けを行なった結果として生成されるテストケース数が増加する場合があります。これに対してPICTオリジナルの値の重み付けではテストケース数が増えません。この重み付けは冗長なペアの組み合わせとなっている値に対してのみ値を書き換えて重み付けを行なうのでテストケース数が増えないのです。

PictMasterの冗長なペアの組み合わせでチェックされた値に対して、重み付けをしたい値に書き換えることによりテストケース数が増えない値の重み付けを行なうことが可能です。


【制約がある場合は要注意】

モデルに制約がある場合は冗長なペアのチェックで値の書き換えには注意が必要です。値の書き換えは制約に違反しない組み合わせとなるようにする必要があります。ここで間違うとテストができない組み合わせとなってしまいます。制約がある場合は値の書き換えを行なわないほうが無難でしょう。

PictMaster 6.4.1J をリリースしました

PictMaster 6.4.1J をリリースしました。

このバージョンでの変更点は以下の通りです。

【バグ修正】
・環境設定の「制約式を最適化」と「ゼロサプレスしない」の指定が正しく処理されなかったバグを修正した。(v6.4のバグ)
・カバレッジを指定して生成で、環境設定で「ゼロサプレスしない」を指定してもゼロサプレスされてしまうバグを修正した。(v6.3以前からのバグ)

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

https://osdn.jp/projects/pictmaster/

PictMaster 6.4J をリリースしました

PictMaster 6.4J をリリースしました。

このバージョンでの変更点は以下の通りです。

【機能改善】
・環境設定で「冗長なペアをチェック」を指定すると、生成結果の冗長なペアとなる値の先頭にマーク(^)を付加することができるようにした。
 このマークが付加された値は2パラメータ間の組み合わせがそれ以前のテストケースで100%網羅されているので、任意の値に置き換えることが可能であり、テストケースごとに組み合わせる値の変更に要する作業時間を削減できる。

【その他】
・ライセンス規定をFreeBSDライセンスに変更した。
・環境設定の「プログレスバーを表示」は使い勝手が良くないため削除した。

PictMaster 6.4J はExcel2007以降で使用できます。Excel2003で使用したい場合は 6.1.1J をダウンロードしてください。

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

https://osdn.jp/projects/pictmaster/