要因列挙テスト + サブモデル = 部分組み合わせテスト
既存機能で重要性が低く変更のない機能の場合、そのレベルダウンテストで組み合わせテストを行うまでの必要がないと判断できる一方で、全くテストをしないのにはリスクがあるときは、要因を組み合わせるのではなく、要因を単に列挙し、個々の要因が最低一回はテスト対象となる要因列挙テストというテスト方法があります。
例えば要因(パラメータ)の値の数がそれぞれ6、5、5、3、2、2、2の場合、要因列挙テストでのテストケース数は最も値の数が多いパラメータの値の数となり、次に示すように6件です。各パラメータはランダムな順番で出現しています。このモデルの2パラメータ間のカバレッジは42.9%です。

こモデルで組み合わせテストを行う場合、テストケース数は30件(PICTで最小テストケース生成の場合)となります。要因列挙テストでは2パラメータ間の組み合わせは行いません。生成エンジンがPICTで「組み合わせるパラメータ数」に1を設定して実行することで、他のパラメータと最低1通りの組み合わせのみが生成されます。
このテストで十分であれば問題ありませんが、組み合わせテストほど多くのテストケース数にしたくはないが、要因列挙テストよりもテスト漏れのリスクを抑えたい場合、要因列挙テストとサブモデルを併用するやり方(部分組み合わせテスト)があります。これは組み合わせテストと要因列挙テストの中間のアプローチ方法です。
部分組み合わせテストでは、重要と考えられるいくつかのパラメータについてのみサブモデルを使用して2パラメータ間の組み合わせとします。先ほどの例で例えばパラメータC、D、Eが重要である場合、サブモデルで次のようにしています。

このサブモデル指定ではパラメータC、D、Eを2パラメータ間の組み合わせと指定しています。この部分組み合わせテストのテストケースを次に示します。

この例では15件となりました。組み合わせテストの30件に比べて半減しています。部分組み合わせテストではサブモデルの対象とするパラメータは値の数が少ないパラメータを対象とするほうがテストケース数は組み合わせテストよりも少なくなります。一方で、値の数が多いパラメータを対象としたときはテストケース数は減少しないので、その場合は本来の組み合わせテストとしたほうがよいでしょう。
部分組み合わせテストでは、値の数が少ないパラメータのみをサブモデルの対象としない限り、要因列挙テストよりもテストケース数が増えるのが一般的です。このことでサブモデルの対象としなっかったパラメータについても2パラメータ間のカバレッジがある程度向上します。ちなみにこのモデルの2パラメータ間のカバレッジは71.4%です。
部分列挙テストは、テストケース数を抑えながら要因列挙テストよりもカバレッジの高いテストが行えるため、比較的リスクが低く変更がない既存機能についてのテストでは、実施するメリットがあるといえるでしょう。
最小テストケース生成とシード値
PictMasterが組み合わせを生成するために使用している生成エンジンであるPICTとCIT-BACHは、組み合わせを生成する際に「ヒューリスティックアルゴリズム」を用いて組み合わせを生成しています。このアルゴリズムは問題を厳密に解くのではなく、効率的に近似解や満足できる解を見つけることを目的としたアルゴリズムのひとつです。これは、特に計算資源が限られている場合や、厳密解を見つけるのに非常に長い時間がかかる場合に有用です。
ペアワイズテストでは、すべてのパラメータのすべてのペアの組み合わせが少なくとも1回はカバーされるようなテストケースを生成します。この問題は、パラメータやその値の数が増えると、組み合わせが爆発的に増加するため、すべての可能な組み合わせを列挙するのは現実的ではありません。厳密に全組み合わせを生成しようとすると、計算量が急激に増加しますが、ヒューリスティックは効率的に「必要十分な」組み合わせを生成します。この問題では、「すべてのペアを1回以上網羅する」という要件が満たされれば良いので、必ずしも最適解(最もテストケースが少ない組み合わせ)を求める必要はありません。
PICTやCIT-BACHはヒューリスティックアルゴリズムのなかでも貪欲法(グリーディアルゴリズム)と呼ばれるアルゴリズムで組み合わせを生成しています。このアルゴリズムには次の特徴があります。
・まだカバーされていないペアを優先的に網羅するテストケースを順次生成する。
・実装が比較的簡単で、効率よく組み合わせをカバーできる。
組み合わせを順次生成していく際に、次にどの値と組み合わせればよいかを決めるとき、同じ優先度の候補が複数存在する場合に、どの値を選択すべきかを決定づけているものに「シード」があります。これはSeed、いわゆる種と呼ばれるもので、組み合わせの種の役割を果たします。PICTやCIT-BACHは、このシードの値によって組み合わせる複数の候補の中からひとつの値を選び出します。
グリーディアルゴリズムでは最適解とは言えないが最適解に近い組み合わせを短時間で完成させることができます。この際、シードの値によって組み合わせが異なるため、多くの場合に最終的なテストケース数も異なることになります。PictMasterには「最小テストケースを生成」という機能があり、ランダムなシードで複数回組み合わせを生成してみて、次図に示すように最もテストケース数が少ない組み合わせを最終的なテストケースとして出力します。
この例では、ランダムにシードを変えながら30回生成を繰り返しています。初期数が0をシードに用いた場合のテストケース数であり、異なるシードを用いて生成を繰り返した際の最小数と最大数が表示されています。最小数の36件となったときのシードが最小時シードであり、この値を用いて「特定のシードで生成」を1回実行すると、同じ最小のテストケースを生成することができます。ここでの最小という意味は30回生成を繰り返した中での最小という意味であり、最適解という意味ではありません。
値の数がパラメータごとに大きく異なる場合は最小テストケース生成を行ってもあまりテストケースの削減は望めませんが、最も多くの値を持つパラメータが3つ以上ある場合は最小テストケース生成でテストケース数の削減が期待できます。
PictMasterがダウンロードできるようになりました
PictMasterのダウンロード元であったosdn.netのサイトが使用できない状態が続いていますので、PictMasterのダウンロード元を別のサイトに作りました。今後は次のサイトからダウンロードするようにしてください。
https://sourceforge.net/projects/pictmaster/
なお、PICTは次のURLからダウンロードしてください。このURLを右クリックして「名前をつけて保存」などでダウンロードできます。
https://github.com/microsoft/pict/releases/download/v3.7.4/pict.exe
ダウンロードしたファイルの名前がブラウザのセキュリティ機能によってpict.exeでないときはpict.exeにリネームしてください。
OSDNからのダウンロードができなくなっています
PictMasterがダウンロードできない状況が続いているため、ダウンロード元を別のサイトに作りました。今後は次のサイトからダウンロードするようにしてください。
https://sourceforge.net/projects/pictmaster/
数日前からPictMasterのダウンロード元である osdn.net のサイト障害により、PictMaster がダウンロードできなくなっています。
サイト管理者側では7月中に復旧を目指すとしておりますので、新たにダウンロードされたい方はしばらくお待ちください。
OSDNへアクセスできない状態が長期に渡っているため、緊急退避先でSourceForgeのスペースを準備中です。ソースが閲覧できない状況の解消ですが、今月中を目途に解消致します。
— open.Yellow.os🌻 (@openyellowos) July 19, 2023
生成エンジンには CIT-BACH を推奨します
PictMasterは生成エンジンにPICTとCIT-BACHの2種類が使用できますが、PICT特有の機能が必要でない限り、生成エンジンにはCIT-BACHの使用を推奨します。
CIT-BACHの基本性能はPICTよりも優れており、生成されるテストケース数の少なさ、生成にかかる時間のいずれをとってみてもCIT-BACHがかなり優れています。
PictMasterでテストケースの生成を行う場合は環境設定で「最小テストケース生成」を選択してください。多くの場合、PICTよりもCIT-BACHのほうが少ないテストケース数となります。
PictMasterで複雑な制約のあるモデルで生成を行うと、PICTではハングアップ状態となる場合がありますが、そのようなモデルでもCIT-BACHなら瞬時に生成が完了します。
CIT-BACHを使用するデメリットはないといっていいでしょう。JAVAをインストールしておく必要がありますのでユーザーズマニュアルの0章を参照してインストールしてください。
