制御構造が直列型の場合の制御パステスト プログラム内で値が変化する場合の値の決め方 | 組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題

制御構造が直列型の場合の制御パステスト プログラム内で値が変化する場合の値の決め方

前回に続いて今回は制御構造が直列型の制御パステストについて取り上げます。

直列型では、プログラム内で値が変化することによって制御パスが変化するという副作用を持つ場合があります。今回はこうした副作用を持つ場合に、条件網羅をカバーする値の初期値を決める方法を紹介します。

一般的に言って制御パステストを実施する際に、すべての経路を網羅する適切な初期値を決めることが難しい場合があります。プログラム内で制御パスの違いにより値が異なる変化を起こすためです。

それでは副作用を持つ直列型の例として以下のソースリストを示します。このプログラムでは値Aと値Bは0以上の整数とします。

リスト1.直列型制御構造のソースリストの例

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

このソースリストのフローチャートを以下に示します。
組み合わせテストツール PictMaster と AllPairII を使う-フローチャート

図1.直列型制御構造のフローチャートの例

このフローチャートを見ると、制御パスに影響を与える値が何回も変化しています。これはどの制御パスから通ってきたかによって次に通る制御パスが異なることを意味します。

こうした副作用を持つケースでは、これまでの、制約対象が次の制約条件になる、という従来の制約表の記入方法だけでは対処できません。モデルと従来の方法だけで記入した制約表を示します。

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

図2.直列型制御構造のモデルと制約表の例

このモデルと制約表で生成したテストケースを示します。このときの生成エンジンはPICTである必要があります。Jennyでは生成エンジンの仕様上の制限事項でエラーとなります。

表1.従来の方法でのテストケース
組み合わせテストツール PictMaster と AllPairII を使う-修正前の生成結果

このテストケースを見ると、No.3,4で値Aまたは値Bが条件を満たすことができません
そこで条件を満たすように以下の制約を追加します。

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

図3.追加した制約

この制約を追加して改めて生成した結果を以下に示します。

表2.副作用を考慮したテストケース
組み合わせテストツール PictMaster と AllPairII を使う-修正後の生成結果

表の右側の黄色のAとBの値は、その行のテストケースを実施する際に採用する値です。この値は当該テストケースの条件と命令文を考慮することでおのずと決まります。

今回のプログラムのテストケースは4個となりました。数が少ないのでフローチャートをなぞってみて実際にすべての条件文の真と偽の両方を通ることを確認できます。

通常の条件網羅とは異なり、All-Pair法によるテストケースのため、2つの要因の組み合わせによる障害を検出することができます。