無償でPictMasterを公開する理由は、業務で実用的に使用できる組み合わせテストツールが入手できない現状を打破し、誰もが自由に使用できるツールを提供することによって、ソフトウェアテスト技術者の技術向上の一助になればとの思いからです。
PictMasterとCIT-BACH は以下のサイトからダウンロードできます。
https://sourceforge.net/projects/pictmaster/
PICTは以下のURLからダウンロードできます。
https://github.com/microsoft/pict/releases/download/v3.7.4/pict.exe
このURLを右クリックして「名前をつけて保存」などでダウンロードしてください。ダウンロード後ファイル名が "未確認 " で始まっている場合は "pict.exe" に書き換えてください。
PictMaster 7.1J をリリースしました
PictMaster 7.1J をリリースしました。
変更点は次の通りです。
【バグ修正】
・分析機能の「エイリアスの出現状態を表示」を2回続けて実行すると環境によっては"パラメータ欄または値の並び欄が空白です"というエラー表示となるバグを修正した。
・テストケース生成時の組み合わせるパラメータ数と、現在の環境設定の組み合わせるパラメータ数が異なる場合、分析ボタンでのカバレッジの表示が正しく行われないバグを修正した。
・環境設定の組み合わせるパラメータ数が2以外の場合に直交表方式でテストケースを生成した場合、カバレッジの表示が正しく行われないバグを修正した。
・最初のパラメータの名称が “No.”であるとカバレッジの表示が正しく行われないバグを修正した。
・エイリアスの値が無効値に指定されていて、かつ先頭以外のエイリアスの値に冗長なペアの表示が行われていると、分析機能の「値別の出現状態の表示」で値の個数にカウントされないバグを修正した。
・生成エンジンがCIT-BACHでサブモデルが指定されているとき、サブモデルのパラメータの個数が環境設定の組み合わせるパラメータ数以下の場合にエラー表示が行われないバグを修正した。
・値の重みづけとサブモデルの指定を同時に行った場合、重複した行があっても行の削除が行われないバグを修正した。
・分析機能の「クリップボードへコピー」ボタンのクリックで、環境によってはエラーとなるバグを修正した。この修正に伴い、クリップボードへのコピーが機能するにはVBAプロジェクトで「Microsoft Forms 2.0 Object Library」 が参照設定されている必要がある。
・分析機能の「組み合わせマトリクスを表示」でテストケース数が514以上の場合にVBAのエラーとなるバグを修正した。
・「ゼロサプレスしない」が指定されていて「カバレッジを指定して生成」を実行すると、生成結果の一部がゼロサプレスされる場合があるバグを修正した。
・32ビット版Excelの場合、環境によっては「メモリが不足しています」というエラーになる場合がある問題に対処し、メモリ不足が起きないようにした。
・大きなモデルでカバレッジの測定を行うと表示される「カバレッジを測定中」のユーザーフォームで、キャンセルボタンをクリックしてもキャンセルできないバグを修正した。
【機能改善】
・直交表ライブラリファイルの暗号化方式を変更し、初回インストール後に"TripleDESによる復号化に失敗しました" というエラーが起きないようにした。この変更に伴い、直交表ライブラリファイルを入れ替える必要がある。
・生成結果のファイル“a.xls”を“a.xlsx”に変更し、ファイル形式を正式な xlsx 形式で保存するようにした。
・環境設定フォームの「デフォルトのシードで生成」を削除し、「特定のシードで生成」に一本化した。
・結果表の結果内容に一致するテストケースが見つからなかった場合、これまではその時点でエラーメッセージを表示して処理を中断していたが、処理を中断せずに残りの結果表の処理が完了してから最後に警告メッセージを表示するようにした。
・テストケースを生成した後で分析ボタン機能の「結果表を適用」を実行することで、結果表の記入内容に従った期待する結果(結果内容)をテストケースに記入できるようにした。
・現在のバージョンのPICTで追加された新機能(Mixed-Strength Generation)に対応し、いままでできなかったサブモデルと原型シートの併用ができるようにした。
・環境設定で指定していた「冗長なペアを表示」をテストケース生成後の「分析」ボタンで行えるようにした。
・分析ボタン機能の「冗長なペアを表示」で、エイリアスのそれぞれの値をひとつの値として処理するようにした。
・分析ボタン機能の「カバレッジを表示」を、組み合わせるパラメータ数が2以外の場合も実行できるようにした。
・生成エンジンにCIT-BACHを使用した場合、矛盾した制約が生じたときに、PICTを使用した場合と同じように出現しなくなったすべての値を表示するようにした。
・値の重みづけを行った場合、生成情報で常に「重複削除前の生成数」「重複削除後の生成数」の項目が表示されていたが、これを実際に重複行が存在した場合のみ表示するようにした。
・分析機能の「生成結果を整形」で既に行番号列が追加されている時に、並べ替えのキーとして行番号を除いてパラメータのみがリストに表示されるようにした。
・分析機能の「生成結果を整形」で既に行番号列が追加されている時に「行番号列を追加」が指定された場合、行番号列を重複して追加せずに新たに行番号が振りなおされるようにした。
・「自動整形」を指定した場合、生成結果のセル内容が中央揃えとなるようにした。
・分析機能の「生成結果を整形」で、セル内容を中央揃えとする指定ができるようにした。
・分析機能の「指定パラメータ間のカバレッジを表示」で、環境設定の「組み合わせるパラメータ数」が1の場合も実行できるようにした。この場合は指定された2パラメータ間のカバレッジを表示する。
・「カバレッジを指定して生成」で、希望するカバレッジと生成結果のカバレッジとの差に関して明確な違いが生じないため、「繰り返し回数」のデフォルトを8から5に変更した。
・「分析」ボタンなどで表示される各種ユーザーフォームについて、リターンキーやESCキー押下によるボタンクリックのみなし動作を見直し、使いやすいように修正した。
【その他】
・マニュアルのPictMaster使用規定の記述を変更した。
・Windowsの仕様変更でバージョンが確認できなくなり、機能しなくなっていた自動更新関係のUIを削除した。
・Excelの仕様変更で正しく動作しなくなっていたウインドウ分割の機能を正しく動作するように修正した。
・「統計情報」という表現を「生成情報」に変更した。
・これまでは64ビット版ExcelにはPictMaster64.xlsmを使用するようにマニュアルに記述していたが、近年のOfficeスイートの状況を考慮し、64ビット版ExcelでもPictMaster.xlsmを使用可能と記述を変更した。
・分析機能の「ダミー水準を表示(2水準系)」は、直交表テンプレート決定処理に即した正しい表示が困難であり、実用的でないため機能を削除した。
・以前のバージョンのPICTでは有効だった「制約式の最適化」が、現在のバージョンのPICTでは処理が最適化されており不要となったため、制約式の最適化に関する処理とそのUIを削除した。
PictMaster 7.1J は次のサイトからダウンロードすることができます。
ATM利用手数料問題
ある銀行のATM利用手数料をテストするデシジョンテーブルを取り上げます。この手数料は次の仕様で決まります。
① 8時~18時は無料
② その他の時間外は108円
③ 土日祝日は終日108円
④ 預金残高10万円以上は平日の時間外は無料
⑤ 毎月25日と26日は終日無料
⑥ 25日が土日祝日のときは、その前の窓口営業日が終日無料
⑦ 26日が土日祝日のときは、その次の窓口営業日が終日無料
⑧ 25日と26日が土日祝日と重なる場合は終日108円
このATM利用手数料を決定するデシジョンテーブルのテストケースを生成するPictMasterのモデルを次に示します。
制約1で手数料が110円となる条件の組み合わせを指定しています。今日が土日祝日の場合は、他の条件が何であっても110円ですが、ここでは単独では無料となる条件と組み合わせ、それでも110円となることを確認するようにしています。
制約3から7で無料となる条件の組み合わせを指定していますが、仕様上、動作に影響を与えない条件は単独では110円となる条件を組み合わせ、それでも無料となることを確認するようにしています。
PictMasterの組み合わせるパラメータ数に条件と動作を合わせた数である7を指定し、生成を行なうと次のテストケースが得られます。

ショップの多重割引問題
あるショップでは条件に応じていくつかの割引を設けています。この割引の仕様は次の通りです。
・子供割引
年齢が12歳以下
・高齢割引
年齢が65歳以上
・特別割引
女性で今日の曜日が水曜日
・クーポン割引
クーポン券持参
それぞれの割引は重複して適用できる。
この問題のデシジョンテーブルでは、ルールによって異なる種類の動作があり、異なるルールが重複して複数の種類の動作に一致しています。このようにすべてのルールが評価されて2つ以上のルールに重複して一致するデシジョンテーブルを多重適合デシジョンテーブルと呼びます。これに対してどれか一つのルールのみが一致するデシジョンテーブルを単適合デシジョンテーブルと呼びます。
この問題の多重適合デシジョンテーブルを次に示します。

この表で太枠内が動作です。一つのテストケースに異なる動作が重複して一致します。条件の欄には空欄があり、それがどのような条件であっても明記されている条件に一致すれば対応する動作になります。例えば12歳以下はルール1に一致しますが、さらにクーポン券を持参していればルール4にも一致します。
単適合デシジョンテーブルはそのプログラム構造が、IF文がさらに分岐する構造に対応しています。
If 条件1 Then 動作1
Else If 条件2 Then 動作2
Else If 条件3 Then 動作3
(繰り返し)
多重適合デシジョンテーブルはIF文が閉じていて、次のIF文が続いている構造に対応しています。
If 条件1 Then 動作1
If 条件2 Then 動作2
If 条件3 Then 動作3
(繰り返し)
ただし、多重適合デシジョンテーブルだからといって、そのプログラム構造が、必ずしもIF文が直列に続いている構造であるとは限りません。例外的でしょうがプログラマーによってはIF文がさらに分岐する構造でコーディングしているケースも考えられます。そのため、不用意なテーブルの圧縮は避けるべきです。
多重適合デシジョンテーブルは、その存在がほとんど知られていませんが、現実の仕様においてはその適用がふさわしい場合が少なくありません。多重適合デシジョンテーブルは、もっと使われてよいテスト技法だと思います。
この問題のデシジョンテーブルのテストケースを生成するPictMasterのモデルを次に示します。

このモデルでは「組み合わせるパラメータ数」に1を設定し、サブモデルで条件についてのみ全数組み合わせを指定しています。条件の組み合わせではなく、個々の条件に対応してそれぞれの動作が決定されるため、動作に関しては組み合わせる必要がありません。
個々の条件に対応してそれぞれの動作が決定されるので、各条件を制約条件とし、各動作を制約対象としています。
男性の場合は特別割引がないので水曜日と組み合わせても意味がないのですが、水曜日と組み合わせても特別割引が「あり」とならないことを確認するために制約7で水曜日と組み合わせています。
このモデルで生成されたテストケースを次に示します。

この表で太枠内が動作です。18件となりましたが、プログラム構造が、IF文が直列に連続したものであると分っている場合は、表中の茶色で網掛けした7件あれば十分でしょう。この7件には、すべての可能な割引が「あり」となる2件(No.2、No.7)と、一つの割引のみ「あり」となる4件(No.6、No.11、No.13、No.18)、そしてどの割引もない1件(No.17)が含まれています。
スーパーのタイムサービス割引問題
あるスーパーでは時間帯によって商品を割り引くサービスタイムを設けています。その割引率をテストする問題です。その仕様は次の通りです。
・サービスタイムには夕方のイブニングタイムと夜のナイトタイムがある
・商品には割引を行う対象商品と割引を行わない対象外商品がある
・イブニングタイムには10%を割引、ナイトタイムには15%を割引く
・対象商品はサービスタイムであれば会員、非会員とも同じ割引となる
・会員であれば、サービスタイムなら対象外商品も5%割引く
この問題のデシジョンテーブルのテストケースを生成するPictMasterのモデルを次に示します。
それぞれの割引率となる組み合わせを制約表で指定しています。仕様ではサービスタイム以外ではどのような条件でも割引なしとなっています。そこで制約5のサービス対象やお客の条件にはDon't Careを意味する「-」と組み合わせるというやり方が多いですが、ここでは他の条件との組み合わせで割引を行う条件である対象商品、会員と組み合わせ、それでも割引なしという動作になることを確認するようにしています。
「組み合わせるパラメータ数」に条件と動作の合計数である4を設定して生成を行います。
生成されたテストケースを次に示します。
デシジョンテーブルのテストケースを生成する 遊園地の入場料問題
テスト対象が論理関係を持っている場合にデシジョンテーブルを用いたテストを行なうことができますが、テスト対象が複雑な論理関係を持っている場合、手作業でデシジョンテーブルを作成しようとすると時間がかかり誤りも起きやすいという問題があります。
デシジョンテーブルは条件の全数組み合わせですが、PictMasterは全数組み合わせを生成することができます。また動作に対応する条件の組み合わせのルールは制約表として表現することができます。
適用事例のひとつとして、ある遊園地の入場料をテストするデシジョンテーブルを取り上げます。この入場料は次の仕様で決まります。

この問題では県内在住の条件はユーザーインターフェース上、小学生の場合のみ指定可能としています。
この入場料を決定するデシジョンテーブルのテストケースを生成する PictMaster のモデルを次に示します。パラメータには条件と動作の名称を、値には条件と動作が取りうる値を記入します。
デシジョンテーブルの動作である入場料を制約条件とし、その入場料となる条件の組み合わせを制約表で指定しています。
PictMasterの仕様により、同じ制約条件(ここでは入場料が無料の場合)は必ず隣同士となるように配置する必要があります。これは異なる制約間で異なる制約対象をOR条件で組み合わせるためです。
小学生以外の場合は県内在住の条件が指定できないのでDon't Careを意味する「-」と組み合わせています。
制約5と6で区分1のすべての値(個人と団体)と組み合わせるために区分1の欄は空白にしています。
環境設定の「組み合わせるパラメータ数」に条件と動作の合計数の4を設定して生成を行い、生成されたテストケースを次に示します。





