大きなコンポーネントの制御パステストにAll-Pair法を適用する | 組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題

大きなコンポーネントの制御パステストにAll-Pair法を適用する

制御パステストにAll-Pair法を適用する事例を何回か取り上げてきましたが、今回はより大きく複雑なコンポーネントの制御パステストにAll-Pair法を適用してみました。

適用したプログラムはAllPairIIのプロシージャである「値一致チェック」です。これは制約表に記入された値の未定義チェック、値の前に付加されることのある演算子の妥当性チェックを行ない、エラーを検出した場合はエラーメッセージを表示しプログラムの実行を停止します。全体で90ステップあり、For文や分岐文が多数存在します。プログラムはVBAで書かれています。

ソースリストを以下に示します。

リスト1.「値一致チェック」プロシージャのソースリスト

組み合わせテストツール PictMaster と AllPairII を使う-ソースリスト


このプログラムの制御パステストのテストケースを生成するモデルと制約表の一部を以下に示します。

表1.モデルと制約表
組み合わせテストツール PictMaster と AllPairII を使う-モデル訂正

組み合わせテストツール PictMaster と AllPairII を使う-制約表訂正

パラメータ名の数字はソースリストの行番号、そのあとの英字は制御パスに影響するIf文やFor文を示しています。以上のモデルと制約表はソースリストを見ながら記入することができます。自分が書いたプログラムなら内容を理解しているはずだからです。フローチャートを作成する必要はありません。今回のように大きく複雑な場合は時間がかかるかもしれませんがそのうち慣れるでしょう。

プログラムが複雑で大きいため、制約の数は40となりました。PictMasterの最大数である30を超えるため、AllPairIIを使用しています。使用する生成エンジンはJennyがよいでしょう。このくらいの規模になるとPICTでは生成時間がかかりすぎて実用的でないからです。

制御パステストでのパラメータはプログラムの制御パスに影響を及ぼす、If文、Else文、For文、Next文、Exit文、End文(プログラムを停止するコマンド)などが対象となります。パラメータの値はIf文なら真となる条件、偽となる条件、If文がElseを持たない場合は偽となる場合を表すためにOtherなどの文を用います。For文などのループの場合は、ループ回数の最小値、最大値などを値として使用します。これはループ回数に同値分割・境界値分析の考え方を適用し、制御パスの爆発を防ぐものです。For文に値として最小値、最大値を採用すると全体のテストケース数が多くなりすぎる場合は値として単に「For」のみとする場合もあります。この場合はテスト実施時にループ回数を決めることになります。

ただし、ここで述べたことは私の方法を述べただけであり、もっと他によりよい記述方法があるかもしれません。言い換えると、制約表への記述内容には色々なバリエーションが考えられるということです。これは生成したテストケースの分かりやすさ(パラメータと値の名称の分かりやすさ)と制約表への記入のしやすさとのトレードオフの問題でもあります。

生成した制御パステストのテストケースを以下に示します。

表2.制御パステストのテストケースの例

組み合わせテストツール PictMaster と AllPairII を使う-生成結果

組み合わせテストツール PictMaster と AllPairII を使う-生成結果2


このテストケースには最後の部分が含まれていません。このテストケースでは21個のテストとなりました。テストケースは一例であり、ほとんどの場合この例とは内容が異なります。
このテストケースではFor文のループ回数は明記していません

以上、掲載したモデルと制約表は一部分ですが、以下のURIから全体をダウンロードすることができます。リンク先を保存することでダウンロードできます。

All-PairII 制御パステスト

All-PairII 制御パステストのテストケースの一例

「All-PairII 制御パステスト」を実行するには生成エンジンの「Jenny」をインストールしておく必要があります。AllPairIIをダウンロードされていない方は、リリースされているAllPairIIをダウンロードして「Jenny」をインストールして下さい。

制御パステストにAll-Pair法を適用すると条件網羅のテストケースが得られますが、単なる条件網羅と異なり、2パラメータ間の組み合わせを網羅したものとなるため、通常の条件網羅よりテストケース数は若干多くなります。例えばIF文が2個連続した場合と、10個連続した場合、通常の条件網羅ではテストケース数はどちらも2個ですが、All-Pair法による場合は当然ながら10個連続した場合、テストケース数は2個連続した場合(4個)より多い数(8個)になります。これが経路網羅では2の10乗となり、1024個のテストケースとなります。

All-Pair法を適用した場合の制御パステストの分類では、「深い条件網羅」とでも言えるものとなります。その深さは採用する値の数で調節することができます。制御パステストの3つの大分類に1つ新しく追加したくなります。