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

PictMaster 5.0.1 をリリースしました

PictMaster 5.0.1 をリリースしました。


このバージョンでは、64bit版のExcel2010で最小テストケース生成と3-Wayカバレッジ指定生成を行なった場合に、VBAのエラーとなるバグを修正したバージョンです。


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


http://sourceforge.jp/projects/pictmaster/


64bit版のOffice2010のVBAでは、それまではあった「プログレスバー」コントロールが削除されているようです。5.0.1では、プログレスバーコントロールを使用せず、ラベルコントロールを代わりに使用してプログレスバーを実現しています。


Excelは、Excel2000、Excel2003、Excel2007を使用してPictMasterのテストを行ないましたが、Excel2002とExcel2010は持っていません。このツールのためだけに会社にExcel2010を購入してくれというのは難しいです。個人ではそこまでの出費はできません。


Microsoftは大胆なことをやりましたね。64bit版のOffice2010で、それまではあったプログレスバーコントロールを削除してしまうとは。互換性の維持を放棄したことになります。なぜ、プログレスバーコントロールを削除しなければならなかったのか、謎です。


PictMaster 5.0 をリリースしました

PictMaster 5.0 をリリースしました。


主な変更点は以下の通りです。


【機能改善】
・テストケース生成時に3-Wayカバレッジと2-Wayカバレッジを表示できるようにした。
・生成済みのテストケースの3-Wayカバレッジと2-Wayカバレッジを表示できるようにした。
・希望する3-Wayカバレッジを確保したテストケースを生成することができるようにした。
・通常のテストケース生成と同時に全数組み合わせを生成することができ、網羅すべき重要な組み合わせが網羅されていないかを簡単に確認できるようにした。
・エイリアスの値についても値の重み付けができるようにした。
・統計情報で表示する項目のうち制約式最適化の有無について、環境設定で「制約式を最適化」が指定されていた場合のみ表示するようにした。
・環境設定で「設定を常に表示」が指定されていた場合に、表示する項目の行間が開かないように上に詰めて表示するようにした。
・扱えるテストケースの最大数を30000件から65535件に拡張した。
・64bit OS に正式に対応した。
・パラメータと値の並び欄、制約表および結果表の編集専用ショートカットメニューに次のメニューを追加した。
・行を上に移動
・行を下に移動
・列を左に移動
・列を右に移動

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


http://sourceforge.jp/projects/pictmaster/

希望する3因子間網羅率を確保したテストケースを生成する

 徹底したテストが必要な場合、3因子間の組み合わせを網羅したテストを行ないたいと考えるかもしれません。しかし、テストケース数が、2因子間の組み合わせを網羅した場合と比較して非常に多くなってしまう場合があります。例えば、5水準の因子が5つあるモデルの場合、2因子間の組み合わせを網羅したテストケース数は33件ですが、3因子間の組み合わせを網羅したテストケース数は、約5.4倍の179件となります。


 実際のテストで3因子間の組み合わせを網羅したテストケースを使用することは、工数の面で難しい場合があります。このような場合、3因子間の組み合わせ網羅率が100%のテストケースではなく、例えば75%としたテストケースを作成することができれば、テストケース数をかなり削減することができるようになります。先ほどのモデルに当てはめればテストケース数は104件となります。100%の場合の58%のテストケース数で済むことになります。


 希望する3因子間網羅率を確保したテストケースを生成する手順は次の通りです。


.3因子間の組み合わせでテストケースを生成する。
.生成したテストケースをPictMasterの原型シートに貼り付ける。
.組み合わせる因子数に2を指定して、原型シートを使用したテストケースを生成する。
.生成したテストケースの3因子網羅率の値に応じて次の手順を行なう。
 (1) 希望する3因子間網羅率よりも高い場合
  1) 生成されたテストケースの件数を確認し、その件数よりも少ない件数に相当する原型シートの行に空きの行を挿入する。
  2) 再度、テストケースの生成を行ない、3因子間網羅率を確認する。
  3) 希望する3因子間網羅率よりも高い場合、原型シートに挿入する空きの行の位置をさらに小さい位置とする。希望する3因子間網羅率よりも低い場合、原型シートに挿入する空きの行の位置をより大きい位置とする。
  4) 希望する3因子間網羅率に近いテストケースが生成されるまで、前項2) ~ 3)の手順を繰り返す。
 (2) 希望する3因子間網羅率よりも低い場合
  1)原型シートのテストケースをすべてコピーし、生成されたテストケース全体に上書きし、生成されたテストケースの件数よりも大きい任意の位置の行に空きの行を挿入する。
  2) テストケースの3因子間網羅率を確認する。
  3) 希望する3因子間網羅率よりも高い場合、挿入する空きの行の位置をさらに小さい位置とする。希望する3因子間網羅率よりも低い場合、挿入する空きの行の位置をより大きい位置とする。
  4) 希望する3因子間網羅率に近い値が得られるまで、前項2) ~ 3)の手順を繰り返す。
  5)希望するテストケースが得られたら、上書きしたテストケースに挿入された空きの行から以降のテストケースをすべて削除する。


 ④の(1)の方法は、原型シートに貼り付けられた3因子間網羅率100%のテストケースのうち、2因子間網羅率が100%となる部分までが、生成されるテストケースにそのまま流用されるというPICTの機能を利用しています。原型シートの途中に空きの行があると、それ以降のテストケースはPICTに取り込まれなくなります。


 ④の(2)の方法は、テストケースの途中に空きの行があると、それ以降は3因子間網羅率測定の対象とはならないものとしています。


 最終的に得られるテストケースでは、3因子間網羅率に少ない値が指定された場合でも、2因子間網羅率は100%であることを保証する必要があります。


 以上の手順を人手で行なうとかなり煩雑な作業になりますが、まもなくリリースする予定の PictMaster v5.0 ではこれを自動的に行なうことができます。


 PictMaster v5.0 では、30% ~ 90% の範囲内で任意の3因子間網羅率を指定することができます。3因子間網羅率測定で必要となる比較対象データ取得のために1回だけ3因子間の組み合わせ生成を行なう必要があるので、大きなモデルでは時間がかかる場合がありますが、それ以降は2因子間の組み合わせ生成の繰り返しであり、それほど時間はかかりません。希望する3因子間網羅率よりも低い場合ならば、2因子間の組み合わせ生成は必要なく3因子間網羅率の測定を繰り返すだけです。


 希望する3因子間網羅率に近い値が得られるまでの繰り返し処理には、2分探索法を用いて最小の回数で希望する3因子間網羅率に近い値を得ることができるようにしています。実測では、多くの場合5回の繰り返しで±2%以内に収まる結果となっています。


 3因子間網羅率に低い値が指定された場合、モデルによっては最終的に得られるテストケースの3因子間網羅率が、指定された3因子間網羅率よりもかなり高い結果となる場合があります。これはそのモデルの2因子間網羅率を100%とした場合の3因子間網羅率が、指定された値よりも高い場合です。3因子間網羅率を指定された低い値にしてしまうと、2因子間網羅率100%が確保できなくなるため、この場合の3因子間網羅率の指定は無効となり、2因子間網羅率100%が確保できる最小のテストケースが生成されます。


 Pairwise法(All-Pair法)のツールであるPICTは、生成するテストケース数を最小にすることを最優先とする思想で作られています。PICTオリジナルの値の重みづけ機能は、テストケース数が増加しない範囲内でしか有効ではありません。そうした背景があるため、希望する3因子間網羅率を確保したテストケースを生成する、といった発想はあり得ないのでしょう。


 PictMasterの今回の新しい機能は、特にリスクの大きいテスト対象に適用することで、テストケース数をそれほど増加させずに高い3因子間網羅率を確保することが可能となるため、有効に活用することができると思われます。

3因子間網羅率を測定する

PictMasterの次期バージョン 5.0 では生成したテストケースの3因子間網羅率を表示する機能を追加する予定です。すでに実装は完了しており、テスト中の段階です。


3因子間網羅率は次の式で表されます。


 3因子間網羅率 = 生成された3因子の組み合わせ数/(制約がない場合の3因子の全組み合わせ数 - 組み合わせできない3因子の組み合わせ数)


ここで問題となるのが「組み合わせできない3因子の組み合わせ数」を算出することが極めて困難であるということです。PICTは非常に複雑な制約指定が可能であり、制約指定を分析して、組み合わせできない3因子の組み合わせ数を算出することは事実上不可能です。


ここで発想を変えてみます。PICTは組み合わせる因子数に3を指定してテストケースを生成することができます。こうして生成されたテストケースの3因子間網羅率は100%ですから、先ほどの式は次の式で置き換えることができます。


 3因子間網羅率 = 生成された3因子の組み合わせ数/組み合わせる因子数に3を指定して生成された3因子の組み合わせ数


この方法では、組み合わせる因子数に3を指定して生成する必要があるので、大きなモデルでは生成が完了するまでに時間がかかるという難点がありますが、どんなに複雑な制約指定を行なっても正確な3因子間網羅率が簡単に得られるという大きなメリットがあります。


3因子の組み合わせ数は次の手続きで求めることができます。ここで、Pnは全体の因子数、qは全体の因子のうち3つの因子に着目した場合の可能な因子の組み合わせ数です。配列Aには特定の3因子の組み合わせに属するユニークな値の組の数を格納します。rはすべての3因子の組み合わせでのユニークな値の組の合計数(3因子の組み合わせ数)です。


  q = 1
  For i = 1 To Pn - 2     '3因子の全組合せを網羅する
    For j = i + 1 To Pn - 1
      For k = j + 1 To Pn
        A(q) = 値組数算出(i, j, k)    '特定の3因子の組み合わせに属するユニークな値の組の数を保存する
        q = q + 1
      Next k
    Next j
  Next i
  q = q - 1


  r = 0
  For i = 1 To q
    r = r + A(i)     'すべての3因子の組み合わせでのユニークな値の組の合計数を求める
  Next i


因子数が50の場合、3つの因子に着目した場合の可能な因子の組み合わせ数は19600となります。


関数の値組数算出では、特定の3因子の組み合わせに属するユニークな値の組の数を算出しています。生成されたテストケースには、特定の3因子の組み合わせに属する値の組に、3つの値の組み合わせが同一の値の組が含まれている場合があります。同じ組み合わせの値の組は1組を残して後は除外する必要があります。


同じ値の組が含まれているかを判定するには、テストケース数が100件の場合、1組の3因子の組み合わせだけに限っても4950回の比較演算が必要です。VBAはDictionaryオブジェクトを使うことができます。Dictionaryオブジェクトには様々なものを入れることができますが、これから入れようとするものと同じものがすでに入っているかが瞬時に分かるようになっています。Dictionaryオブジェクトを使うことで高速に比較演算ができるようになります。


値にエイリアスが含まれていると、正確な3因子間網羅率を求めることができません。テストケース中に出現するアイリアスの値は、テストケース数によって異なります。このため3因子間網羅率の比較対象のテストケースと、3因子間網羅率100%のテストケースとで、エイリアスの出現パターンが異なり、すべての3因子の組み合わせでのユニークな値の合計数に影響を与えます。3因子間網羅率を計算する前に、テストケースに含まれるエイリアスの値の名称は、元の値の名称に戻す必要があります。


こうした処理を行なうことで正確な3因子間網羅率を高速に測定できるようになりました。今回の実装で感じたのはVBAの持つポテンシャルの高さです。たかがマクロではないかと馬鹿にしがちですが、高速なコードを書くことで処理速度を1桁も2桁も高速化することができました


Pairwise法(All-Pair法)のフリーソフト HEXAWISE を使ってみる

Pairwise法(All-Pair法)のツールには無償のツールがたくさんありますが、そのほとんどは制約をサポートしておらず、実用にならないものです。その中で、HEXAWISEというツールは制約をサポートしている数少ないツールのひとつです。


HEAXWISEはWebベースで動作し、同時に5人までなら無償で使うことができます。同時に50人までで、スタンドアロンで動作するものも用意されていますが、年間5万ドルの有償となります。


HEXAWISEは、制約をサポートしているほか、PICTでいうところのエイリアスの機能をサポートしています。また任意の3つ以上のパラメータのみ3パラメータ間の組み合わせとする「Mixed-strength interactions」という機能を備えています。PICTにもサブモデルという似たような機能がありますが、実用性という点ではどちらも同じように使いづらい面があるように感じました。Webベースで生成したテストケースはCSVファイルとして外部に出力することが可能です。


面白い機能として、生成したテストケース数に応じて、1件からテストケースの件数まで1件ごとに2-Wayカバレッジ(2パラメータ間の組み合わせ網羅度)がいくつになるかが分かるグラフを表示する機能があります。このグラフがあると、仕様変更のない機能のテストについては、2-Wayカバレッジに100%は必要ないので、30件のうち、2-Wayカバレッジが80%となる15件だけテストする、といったことが可能になります。


HEXAWISEは、3-Wayまでの組み合わせを生成することができます。Webベースですので全体の動作はもっさりしています。


なかなか良くできていると感じましたが、残念ながら日本語を使うとエラーとなり、それ以降、何か指定するたびにエラーとなり、使えなくなってしまいます。英文字だけでテストケースを生成し、Excelなどで日本語に置き換えるといった手間を厭わなければ使えるでしょう。


HEXAWISEは次のサイトで使用することができます。


http://hexawise.com/


まず登録を行なう必要があります。ログインに必要なのは、メールアドレスとパスワードです。メールアドレスにWebメールは使用できないようです。


HEXAWISEの制約指定の方法は独特です。組み合わせできる値同士の組み合わせを指定する「married Pair」。組み合わせできない値同士の組み合わせを指定する「invalid pair」。この2つで制約を指定します。どのような制約を行なったかは関係式で表現されます。制約指定を行なう画面は次のようになります。


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


異なるパラメータの1つの値同士の組み合わせを1つづつ個別に指定する方式なので、複雑な制約では異なる制約同士の関係を把握することが困難です。制約条件として指定できるのは1つのパラメータに限られます。2つのパラメータのある値が特定の値のときに他のパラメータの値がこうなる、といった指定はできません。


とはいえ、HEXAWISEでサポートしている制約指定の機能でも、たいていの場合は間に合うと思います。日本語が使えない点に目をつぶれば、これだけの機能を備えた組み合わせテストツールを、無償で公開している点は非常に好感が持てます。