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

PictMasterで「コンパイルエラー」が起きる場合の対処法

使用する環境によってはPictMasterでVBAの「コンパイルエラー」が起きる場合があります。最近、会社の特定のPCでPictMasterを使用すると「コンパイルエラー」となるという現象が起きました。いろいろ試したのですがどうしてもエラーが解消されません。そのPCの環境はOSはWindows 7 32bit版、ExcelはExcel2010でした。そのときのスクリーンショットを次に示します。

1


このエラーは2013年3月17日の「PictMasterを実行するとVBAのエラーとなる場合の対策について」の記事で説明した対策を行なっても解消されません。コンパイルエラーが起きるとVBAのエディタが起動され、コンパイルエラーとなった箇所がハイライトされます。今回のケースでは「Trim関数」でエラーとなっています。Trim関数はVBAでよく使われるごくありふれた関数です。なぜエラーとなるのかいろいろ調べてみたところ、VBAの参照設定ダイアログで参照不可のライブラリのあることが原因だと分かりました。

2


ここで参照不可となっている「Microsoft Windows Common Controls 6.0」のチェックを外すことでコンパイルエラーは起きなくなりました。もし、読者のみなさんでコンパイルエラーが起きるPCがある場合はこのチェックを外してみて下さい。エラーが起きなくなるはずです。

ライブラリが参照不可になる理由は、PictMasterを開発した環境で参照設定されたライブラリが、実行する環境には存在しない、あるいはパスが異なる、といったことが主な原因です。OSやExcelのバージョンが異なると、VBAが参照するライブラリのパスも変わります。そのほとんどは、自動的にその環境に合わせて読み変えられますが、一部のライブラリは元のパスのままになっているため、参照不可になります。

PictMasterではMicrosoft Windows Common Controls 6.0のライブラリは使用していません。ですので本来このライブラリを参照する必要はありません。それではなぜVBAはMicrosoft Windows Common Controls 6.0のライブラリを参照しようとしたのでしょうか。ここからは推測ですが、PictMasterを開発している最中に、Microsoft Windows Common Controls 6.0を必要とするコントロール(部品)をVBAエディタで追加したが、不要であることが分かり削除したものと思われます。コントロールを追加するとVBAは自動的にそのコントロールを含むライブラリへの参照設定を追加します。コントロールを削除してもコントロールへの参照設定は残ったままとなります。ここで参照設定を外せばよかったのですがこのことがこれまで分かりませんでした。

使用するPCの環境によっては、ライブラリが参照不可となる場合があります。どの環境でそれが起きるかは分かっていません。現在PictMasterを使用されていてコンパイルエラーが起きていない場合でもMicrosoft Windows Common Controls 6.0のライブラリへの参照は行なわれています。このままですと、他のPCへ移動した場合にコンパイルエラーが起きる可能性があります。次の手順でMicrosoft Windows Common Controls 6.0のライブラリへの参照設定を外しておくことを推奨します。

1. ExcelのVBAエディタを開く。
2. ツールメニューから「参照設定」を選択する。
3. 参照設定のダイアログが表示されるので、Microsoft Windows Common Controls 6.0のチェックを外す。
4. OKをクリックする。
5. PictMasterのファイルをセーブする。

近いうちにMicrosoft Windows Common Controls 6.0のライブラリへの参照設定を外したPictMasterをリリースする予定です。

開発ツールでの使用に特化したWebベースの組み合わせテストツール CTWeb

今回紹介するツールは、開発ツールを使用した単体テストでの適応を想定したCTWebというWebベースのツールです。組み合わせテストは単体テストにも適用することができますが、総合テストと比較すると適用例はそれほど多いとはいえないようです。その理由として、生成された組み合わせテストケースを開発ツールの環境に移植するうえで、ソースレベルでの作り込みが必要な場合のあることが一因と考えられます。

CTWebは開発ツールでの使用に対応した機能を備えた珍しい組み合わせテストツールです。CTWebは次のサイトにあります。

このサイトはAlarcos Research Groupが運営しており、同グループはスペインの Castilla-La Mancha大学・情報技術システム学科の教授らで構成されています。

このサイトでは、Combinatorial toolとState machines toolのふたつのツールが公開されています。State machines toolは状態遷移のテストケースを生成するツールです。状態遷移テストの自動化に興味のある方は調べてみてはいかがでしょう。私にはハードルが高くて理解できませんでした。

Webページ左端のCombinatorial toolの文字をクリックすると、Combinatorial testing pageに切り替わります。ここではAlgorithmsにAETG、DataにパラメータA、B、Cとそれぞれの値を2つ指定してみます。Executeのボタンをクリックすると組み合わせが生成されます。

CTWebの最もユニークな点は、生成結果を単体テスト用の関数に変換できることです。次に示す生成結果では、Expression to generate test cases: のボックスにExampleの関数を指定しています。

0


生成結果には4件のテストケースが含まれています。その右には各テストケース対応に4個の関数のパラメータに生成結果の値が組み込まれています。パラメータ名の先頭にシャープ(#)を付記することで、それがテストケースの値に置き換えられます。これらの関数部分は、その下にあるPress here to download the test case file.の文字をクリックすることで、そっくりそのまま関数部分のみを抽出したtest case fileを新しいWebページに出力することが可能です。これをコピーしてテキストファイルにペーストして保存することができます。

1


単体テストで必要とされるパラメータに合わせてExpression to generate test cases: のボックスにテスト用の関数を適切に設定することで、単体テストでそのまま使用できるソースコードを得ることができます。

CTWebでできることはこれだけにとどまりません。見かけによらず驚くほど多機能なツールです。

テストケースを生成した後で、In order to assist you in the oracle generation, you can obtain a decision table by following this linkのthis linkをクリックすると、テストオラクル(期待する結果)を指定するページが表示されます。Actionsのボックスに期待する結果に対応する関数を記入します。次にBuild Oracle Functionのボタンをクリックすると、期待する結果の組み合わせに対応した関数を呼び出す関数 oracle のソースコードが生成されます。

2



3


CTWebは、PICTのmodel fileに相当する variables file を定義することで、より高度な機能を使用することができます。variables fileの例を次に示します。これは、摂氏(C)、華氏(F)およびケルビン温度(K)の値を相互に変換する関数 c.convert() の単体テストで用いるソースコードを生成するためのものです。

4


variables fileは文字(%)で始まるいくつかのセクションで構成されています。最初のSetsセクションでは、パラメータとその値を宣言します。Includesセクションでは、生成結果に必ず含める必要のある組み合わせを指定します。Oracleセクションでは、生成結果の組み合わせに応じた期待する結果を定義します。Test templateセクションでは、単体テストで使用するソースコードのひな型を定義します。このひな型の "#A", "#B", #C の部分に生成結果のパラメータ SOURCE、TARGET、MAGNITUDEの値が代入されて出力されます。Test templateセクションでORACLEと書かれた部分は、Oracleセクションで指定された組み合わせと一致する組み合わせについて、同セクションのoracleステートメントの記述に置き換えられて出力されます。

なお、variables fileでは区切り文字としてカンマ(,)が使われているステートメント以外のステートメントは、各語句がすべてTABで区切られている必要があります。

テキストファイルでvariables fileを保存した後、CTWebのページの上部にある Upload variables file をクリックするとファイル選択画面になるのでvariables fileを選択し、Submitのボタンをクリックすることでサーバ側に取り込まれます。続いてAlgorithmsにAETGを指定し、Executeボタンをクリックすることで生成が行なわれます。ここでPress here to download the test case file.の文字をクリックすると、test case fileが出力されます(一部のみを示す)。

5



6


ここで示した例は、CTWebのuser's manualに掲載されています。user's manualはCTWebのページの上部にあるuser's manual.の文字をクリックすることでダウンロードすることができます。user's manualは詳しく説明が記述されていて、かなりわかりやすくなっています。またCTWebのフレームワークとインプリメンテーションについての解説をページの下部にあるA framework and a web implementation for combinatorial testing. の文字をクリックすることでダウンロードすることができます。

variables fileには組み合わせできない組み合わせ(制約)を指定するExcludesセクションを定義することができます。ここで指定された組み合わせが除外されて組み合わせが生成されます。Weightsセクションで指定されたペアの組み合わせは、それ以外のペアの組み合わせより多く出現(値の重みづけ)するようになります。ただし、このWeightsの指定はPictMasterの値の重みづけとは異なり、PICTオリジナルの値の重みづけと同じく、相対的に値の数が少ないパラメータの値でしか有効とはならないようです。

CTWebのページの上部にある(see example of structure).の部分をクリックすると、この例で示したよりも規模の大きい度量変換関数を扱ったvariables fileが表示されます。

CTWebは開発ツールを使用する単体テストへの適用に特化したとてもユニークな組み合わせテストツールです。残念ながら日本語は文字化けしてしまいます。現在はすべての機能が自由に使用できますが、将来的に商用利用では一部機能が有料となるようです。

なお、CTWebのサイトは時々数日に渡って運用を停止していることがあります。

パラメータの入出力関係を指定できる組み合わせテストツール TVG

今回紹介する組み合わせテストツールTVGは、パラメータの入出力関係を指定することができる異色のツールです。残念ながら制約は指定できません。一般のPairwiseのツールでは、二つのパラメータ間の組み合わせを生成しますが、TVGではこの他に任意のパラメータの組み合わせが指定できます。PICTにおけるサブモデルの機能に似ていますが、よりきめ細かい指定が可能です。

TVGにはJavaとネイティブの二つのアプリケーションがありますが動作はどちらも同じです。

TVGを起動すると次の画面が表示されます。

0


この画面でパラメータと値を入力します。IORのメニューからInput Variables → Edit Variable Listを選択すると、Input Variable listの画面が表示されます。ここではあらかじめ初期値が入っていますが、いったんすべてRemoveし削除します。そしてパラメータとしてA、B、C、D、Eを定義します。続いてIORメニューからInput Variables → Edit Data Valuesを選択すると、Input Data Valuesの画面が表示されるので、あらかじめ定義されている初期値をすべてRemoveし、値としてそれぞれ1、2、3の値を定義します。

1


2


IORメニューにはInput Variables → Edit Constraintsのメニューもありますが、これを選択しても何も起こりません。

次にIORメニューからOutput Variables → Create N-Way IORを選択します。すると「Thie action will overwite the existing IOR Do you want to continue?」というメッセージが表示されるので はい(Y) をクリックします。「Enter N for N-Way algorithm」というダイアログが表示されるので「Enter Number」に 2 を入力し、closeボタンをクリックします。closeボタンをクリックすると、次の画面となります。

3


ここでOUT_1~OUT_10は、パラメータA、B、C、D、Eの出力パラメータの組み合わせであり、2パラメータ間の組み合わせを表しています。チェックマークが入った黄色のセルが、各出力パラメータごとに2つずつあることが見て取れます。このことで2-Wayの組み合わせを生成することがわかります。

パラメータの数がn個の場合、出力パラメータの組み合わせの数Snは、初項=a、公差=d、末項=nとする次式の等差数列の和=Snで表されます。

4


ここで、初項a=0、公差d=1です。n=5の場合、Sn=10、n=20の場合、Sn=190となります。

AlgorithmメニューからT-Reducedを選択します。続いてRunメニューからStart Algorithmを選択します。生成結果の名称とセーブする場所を指定するダイアログが開かれるので入力し、Select Fileボタンをクリックします。続いて生成結果に含めるコメントを記入できるダイアログが表示されますが、そのままSaveボタンをクリックします。

生成結果が拡張子tvfのファイルでセーブされます。この拡張子をtxtに書き換えることでエディタで開くことができます。

5


最初の2行のコメント行を削除し、セーブした後、Excelで区切り記号にコロン(:)を指定することで生成結果をExcelで読み込むことができます。

ここまでは普通の使い方ですが、TVGではパラメータの入出力関係を指定することができるという特徴があるため、この機能を利用することで次のような使い方ができます。

1. 任意のパラメータのみ他のパラメータとは異なるパラメータ組み合わせ数とする。
2. 任意のパラメータのみ他のパラメータとの組み合わせを行なわないようにする。

例えば、パラメータAとBのみ他のパラメータとの3パラメータ間の組み合わせとするには出力パラメータのOUT_1からOUT_3を次のようにします。

6


パラメータA、B、Cの三つのみ全数組み合わせ(3パラメータ間の組み合わせ)とすることはもっと簡単です。上図のOUT_1の指定だけですみます。

パラメータA、B、Cの三つのみ他のパラメータとの組み合わせを行なわないようにするには次の指定を行ない、パラメータA、B、Cが他のパラメータと組み合わせとなっている出力パラメータOUT_4からOUT_9を、IORメニューのOutput Variables → Edit Variables Listで削除します。この指定により、パラメータA、B、Cについては他のパラメータとの組み合わせが行なわれず、値が列挙されるだけになります。比較的重要ではないと考えられるパラメータのみをこうして列挙だけにすることによって、テストケース数を合理的に削減することができます。

7


出力パラメータは横方向にドラグすることができるので見やすいように移動することができます。

TVGでは、出力パラメータの組み合わせを直接編集することができるため、PICTのサブモデルでは不可能なきめ細かいパラメータの重みづけが可能となっています。例えば、特に重要と考えられるひとつのパラメータのみ、3パラメータ間の組み合わせとすることができます。これはPictMasterの拡張サブモデルの機能でも実現できないことです。また、4つ以上の任意のパラメータ同士のみ3パラメータ間の組み合わせとすることができます。

AlgorithmにPlus Oneがありますが、これを指定しても生成が行なわれないようです。Random Setsを指定すると、Random Set Infoのダイアログが表示されます。

8


Number Of Random Setsでランダムな組み合わせを何組生成するかを指定し、Size Of Random Setsで生成するランダムな組み合わせの件数を指定します。ただし、この件数に97以上を指定するといつまでたっても生成が完了しないようです。

TVGは出力パラメータの組み合わせを直接編集することができるとてもユニークな組み合わせテストツールです。

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


http://sourceforge.net/projects/tvg/

制約が指定できる組み合わせテストツール VPtag

フリーの組み合わせテストツールで制約が指定できるツールはごく限られています。VPtagは制約が指定できる数少ないツールのひとつです。VPtagはJAVAアプリケーションのため、PC環境にJAVAがインストールされている必要があります。


VPtagでの制約の指定方法は独特です。最初はとっつきにくい感じですがコツを覚えれば使えないことはありません。


VPtagをダブルクリックすると次の画面が表示されます。


0


EditメニューからEdit Configurationを選択します。VPtag Configuration Editorが開きます。FactorsのAddボタンとValuesのAddボタンをクリックしてパラメータと値を入力します。


2 


ここではA、B、Cの三つのパラメータがあり、それぞれ1、2、3の三つの値を持つものとします。


続いて例として次の制約の指定を行なうことにします。


1. A=1の場合、B=1
2. A=2またはA=3の場合、B=2またはB=3


制約を指定するにはDependenciesのAddボタンをクリックしてVPtag Dependency Editorを開きます。Create New Dependencyのタブで、制約対象となるB=1を選択し、Name欄に適当な名称(ここではB1)を入力し、Addボタンをクリックします。


4

続いて制約対象となるB=2を選択し、Name欄にB2を入力し、Addボタンをクリックします。同じように制約対象となるB=3を選択し、Name欄にB3を入力しAddボタンをクリックします。


次にCreate Compound Dependencyのタブをクリックします。この画面ではひとつの制約で複数の値が関係する制約を定義します。VPTagでは、基本としてひとつの制約ではひとつの値しか指定できません。この例のように「A=2またはA=3の場合、B=2またはB=3」といった、複数の値を指定するにはCompound Dependencyというように、異なる複数の制約をひとつにまとめる指定が必要になります。


ここでは、制約対象として「B=2またはB=3」という二つの制約をひとつの制約にまとめることにします。Dependency AのB2:B=2とDependency BのB3:B=3を選択し、ORのラジオボタンを選択し、Name欄に適当な名称(ここではB23)を入力してAddボタンをクリックします。そうするとDependency AとBの欄にB23:B2 OR B3という合成された制約が追加されます。


6

ここでCancelボタンをクリックしてVPtag Dependency Editorを閉じます。


続いて制約条件と、それに対応する制約対象を指定します。まず、VPtag Configuration Editorで制約条件であるA=2を選択します。


11

次にDependenciesのAddボタンをクリックし、Use Existing dependencyのタブをクリックし、制約対象であるB23:B2 OR B3を選択します。


8

次にDoneボタンをクリックします。これでA=2の制約指定は完了です。同じようにA=3の制約指定を行ないます。最後にA=1の場合の制約指定を行ないます。異なる点はVPtag Dependency EditorでB1:B1=1を選択する点です。


VPtag Configuration Editorに戻って、A=1、A=2、A=3を選択するとDependenciesにそれぞれB=1、B2 OR B3、B2 OR B3が表示されればOKです。


9


ようやくこれで制約指定が完了しました。VPtag Configuration EditorのDoneボタンをクリックします。


最後にModalityのメニューからDouble Mode(Pairwise)を選択し、Generate Double Mode(Pairwise)ボタンをクリックするとテストケースが生成されます。


10


生成結果を見ると、A=1の場合はB=1、A=2またはA=3の場合はB=2またはB=3であり、制約指定通りとなっていることが分かります。生成結果を選択してコピーし、テキストファイルにペーストすることでTAB区切りのCSVファイルとして保存することができます。また制約指定も含めたモデルはファイルとしてセーブすることができ、後で読み込むことができます。


制約指定の合成を繰り返すことで複雑な制約指定を行なうことができます。とはいえ、制約指定の方法が煩雑なため、手軽に使用できるとは言い難いものがあります。制約指定が可能な他には特にこれといった機能がある訳ではないので、実用的に使用することは難しいかもしれません。ただ、使いにくいとはいえ、制約指定の方法はとてもユニークだということは言えます。


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

http://sourceforge.net/projects/vptag/

PICTを生成エンジンに使用する組み合わせテストツールTest Case Generator  

今回から数回にわたっていくつかのフリーの組み合わせテストツールを紹介していく予定です。最初に紹介するのはTest Case Generatorというツールです。

フリーの組み合わせテストツールTest Case Generatorは生成エンジンにPICTを使用します。このツールの最もユニークな点は、PictMasterの結果表に相当する機能を備えていることです。期待する結果を出力することのできるツールは非常に珍しいものです。その一方で、PICTを使用しているにもかかわらず、制約を扱うことができません。

ツールのマニュアルには期待する結果を出力できるメリットとして次の点があげられています。なおこのツールでは全数組み合わせを生成することができる点に留意してください(この場合、PICTは必要としません)。

・ソフトの仕様をもとにすべての起こりえる期待する結果を定義することで、実際にこのツールで動作させたときにどの期待する結果とも一致しない組み合わせが存在した場合、仕様のバグを発見することができる。
・この機能を逆に利用して、テストが不要な組み合わせを「期待する結果」に一致させてテストケースから除外することができる。
・パラメータの値の組み合わせによってはあるパラメータがNULL(不要)となる場合があり、それを検出させることができる。

これらの点にメリットがあることは分かりますが、制約を扱えないことで適用範囲がかなり制限されるようになると思います。マニュアルにはログイン画面のテストを例にあげて使い方が説明されています。

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

インストールは専用のインストーラを使って行います。この際、デフォルのProgram Filesフォルダにインストールした場合、テストケースを生成しようとするとインストールされたフォルダ内にファイルを作ろうとしてエラーとなってしまいます。通常、Program Filesフォルダは読み取り専用になっているのでこの動作ではうまくいきません。

インストーラでインストール先としてデスクトップなどを指定するとよいでしょう。インストールはあらかじめ作成しておいた任意のフォルダ内に行なうようにします。インストール後、フォルダ内にPICT.exeをコピーしておく必要があります。

TestCaseGenerator.exeを起動すると次に示すウインドウが画面いっぱいに表示されます。

0


パラメータと値は左上のParameters / Equivalence classesから入力します。

期待する結果を定義するにはまず左下のResultsのタブをクリックします。そして期待する結果Resultの名称とResult Typeを指定します。Result TypeにはとりあえずデフォルトのAllgemeinを指定すればよいでしょう(なぜかドイツ語が使われています)。

続いて期待する結果の一致条件を指定するために左下のRulesタブをクリックします。左上のNew ruleをクリックすると一致条件を指定する次のダイアログが表示されます。

1


左側に表示されているパラメータや値をダブルクリックすると右側の条件式の欄に入力されます。演算子は真ん中のボタンをクリックして入力します。条件式の評価の優先を指定する括弧が使えないのであまり複雑な条件は指定できないようです。

下にある「Test cases matching this condition are...」にチェックを入れると、テストケース生成時にこの一致条件に一致したテストケースは最終結果から除外されます。

最後にGeneratorとComb. depthを指定し、Generate casesのボタンをクリックすると結果が表示されます。

2


この例ではResultにABC 1、ABC 2、ABC 3の三つを指定しています。各Resultに一致したテストケースにはチェックマークが表示されます。日本語は問題なく使用できるようです。

この状態でCheckModelのボタンをクリックすると、どの一致条件にも一致しなかったテストケースが次のように赤く表示されます。

3


この機能はResultの数が多い場合にはどれにも一致しないテストケースが一目で分かるので便利だと思います。

Test Case Generatorにはこの他に主な機能として次の機能をそなえています。

(1) 生成結果も含めたテストモデル全体をファイルに保存し、後で読み込むことができる。
(2) テンポラリティファイルとして生成結果に名前をつけて保存することができ、再度呼び戻すことができる。
(3) 生成結果をSQL Server, SQL CE, Excel, XMLの各フォーマットでエクスポートすることができる。
(4) 同値分割の考え方で一時的に値に別の値(Example Data)を割り当ててテストケースを生成することができる。

Test Case Generatorは、期待する結果の機能に特化した異色の組み合わせテストツールです。せっかくPICTを使用することができるのに制約を扱う機能がないのですが、このツールの作者は制約のない場面を想定しているのだと思います。制約のないテストではそれなりに活用できるのではないかと思います。