組み合わせテストをオールペア法でスピーディに!

第4回PICTの機能説明と使用例 (中編)

モデルオプション

PICTでは、モデルオプションとしてさまざまな機能を提供しています。今回と次回に分けて詳しく解説していきます。

制約条件

パラメータの組み合わせを行う場合、組み合わせることのできない値の組み合わせが現れることがあります。たとえば、最大2台のハードディスク(HD)が収容可能な、あるパソコンの構成モデルを表すリスト1の場合、HD1とHD2の両方が「なし」という構成はできません。少なくとも一方のHDは「なし」以外でなければなりません。この組み合わせることのできない条件を制約条件といいます。組み合わせテストでは、制約条件のある場合が少なくありません。

リスト1 パソコンの構成モデル
メモリ:  1GB, 2GB, 4GB
HD1:     なし, 250GB, 500GB, 750GB
HD2:     なし, 250GB, 500GB, 750GB

制約条件表

制約条件は、表1の制約条件表でモデル化することができます。制約条件を表の形式で表すことができるので理解しやすくなります。また他の人に制約条件を説明するのにも便利です。

表1 パソコンの構成モデルの制約条件表
パラメータ値セット1値セット2
HD1250GB, 500GB, 750GBなし, 250GB, 500GB, 750GB
HD2なし, 250GB, 500GB, 750GB250GB, 500GB, 750GB

表1は、値セット1と値セット2の可能な2つの値の組み合わせに分かれるという制約条件を表しています。この場合のメモリのように、表に明記されていないパラメータが存在する場合、そのパラメータには制約条件がないことを意味します。

表1は2パラメータ間の制約条件ですが、現実には3パラメータ間以上にわたる制約条件もありえます。たとえばリスト2のモデルがあるとき、その制約条件表が表2であるとします。

リスト2 モデルの例
A:   a1, a2, a3, a4, a5
B:   b1, b2, b3, b4, b5
C:   c1, c2, c3, c4, c5
D:   d1, d2, d3, d4, d5
表2 リスト2の制約条件(1)
パラメータ値セット1値セット2値セット3
Aa1a2a3
Bb1b2b3
Cc1c2, c3, c4, c5c2, c3, c4, c5
パラメータ値セット4値セット5
Aa4a5
Bb4b5
Cc2, c3, c4, c5c2, c3, c4, c5

表2は、3パラメータ間にわたる可能な組み合わせが5つに分かれることを示しています。PICTでは3パラメータ間以上にわたる制約条件も容易に取り扱うことができます。

以上は制約条件の結果、複数の可能な組み合わせに分かれる場合でしたが、制約条件によっては可能な組み合わせが1つの場合もありえます。リスト2のモデルで組み合わせが1つの場合の例を表3に示します。

表3 リスト2の制約条件(2)
パラメータ値セット1
Aa1, a2, a3, a4
Bb1, b2, b3, b4

表3は、パラメータAの値のうちa5はパラメータBのすべての値と組み合わせ可能ですが、a1, a2, a3, a4はパラメータBの値b5とは組み合わせできないことを示しています。

制約条件の指定ができなければテスト業務で実用的に使用することはできません。また、いかに容易に制約条件の指定ができるかも重要な点です。

モデルファイルを作成する際は、この制約条件をPICTに指示します。制約条件には、条件付き制約無条件制約の2種類があります。PICTでは制約条件の記述に独自のスクリプト言語を用いており、それが制約条件の指定を極めて柔軟なものにしています。

制約条件の記述は、パラメータを [ ] で囲み、値が文字列の場合は、" " で囲み、ステートメントの末尾は ; で終わります。

条件付き制約

条件付き制約は、パラメータと値の関係を評価する関係式を用いて制約条件を宣言します。条件付き制約の構文は if 関係式 then 関係式 else関係式 の形式をとります。else以降は省略できる場合があります。if文の中にif文を入れ子にすることはできません。関係式はパラメータとその値、またはパラメータと他のパラメータの関係を表し、基本的にパラメータ 演算子 値 または パラメーラ 演算子 パラメータ で記述します。表4に演算子の一覧を示します。

表4 使用できる演算子
演算子説明
=, <>, >, >=, <, <=パラメータの値(または他のパラメータ)を比較します。
INパラメータに含まれる複数の値を指定します。
NOT, AND, OR関係式に対して論理演算を行います。
LIKEワイルドカード(*または?)で複数の値を指定します。

(1) =, <>, >, >=, <, <=

表1の制約条件を演算子(=, <>)で記述するとリスト3となります。

リスト3 制約条件を(=, <>)で記述
if [HD1] = "なし"
	then [HD2] <> "なし";
if [HD2] = "なし"
	then [HD1] <> "なし";

この条件で生成される組み合わせを表5に示します。

表5 生成された組み合わせ
No.メモリHD1HD2
11GB250GB500GB
21GB500GBなし
31GB750GB750GB
41GBなし250GB
52GB250GB250GB
62GB250GB750GB
72GB250GBなし
82GB500GB500GB
92GB750GB250GB
102GBなし500GB
114GB250GBなし
124GB500GB250GB
134GB500GB750GB
144GB750GB500GB
154GB750GBなし
164GBなし750GB

生成されたHD1、HD2の組み合わせに、⁠なし⁠どうしの組み合わせがないことがわかります。

(2) IN

演算子INは、複数の値を一度に指定したいときに便利な演算子です。たとえば表1の制約条件を、演算子INを用いて記述するとリスト4のとおりとなります。

リスト4 制約条件を(IN)で記述
if [HD1] = "なし"
	then [HD2] in {"250GB", "500GB", "750GB"};
if [HD2] = "なし"
	then [HD1] in {"250GB", "500GB", "750GB"};

この例では、IN演算子で指定する値が多いのでよい例とはいえませんが、多くの値の中から、複数の値を指定する場合にIN演算子は便利に使うことができます。

IN演算子では、あるパラメータのすべての値を指定することはできません。

(3) NOT、AND、OR

演算子NOT、AND、ORは論理演算子です。表1の制約条件を論理演算子で記述するとリスト5のとおりとなります。このように論理演算子で関係式を連結することにより、制約条件を記述することができます。なお論理演算子が混在する式の場合は、論演算子の優先順位が問題になることがあるので、各関係式を括弧( )で囲み優先順位を明確にしたほうがよいでしょう。

リスト5 制約条件を(OR)で記述
if [HD1] = "なし"
then [HD2] = "250GB" or
           [HD2] = "500GB" or
           [HD2] = "750GB";
if [HD2] = "なし"
then [HD1] = "250GB" or
           [HD1] = "500GB" or
           [HD1] = "750GB";

(4) LIKE

演算子LIKEは、複数の値をワイルドカード(*、?)で指定することができます。⁠*⁠はすべての任意桁数の文字と一致します。⁠?⁠はすべての半角1文字と一致します。表1の制約条件を演算子LIKEで記述するとリスト6のとおりとなります。

リスト6 制約条件を(LIKE)で記述
if [HD1] = "なし"
     then [HD2] LIKE "*GB";
if [HD2] = "なし"
     then [HD1] LIKE "*GB";

このようにLIKE演算子は適切なパラメータの名称、値の名称を用いることで便利に使える場合があります。

以上、説明した(1)から(4)までの4種類の演算子を用いた結果、生成される組み合わせは、いずれも表5と同じになります。

これまでの例では、いずれもif文にelseがない例でした。elseを使用する例を以下に示します。

リスト7 モデルの例
A:   a1, a2, a3
B:   b1, b2, b3, b4
C;   c1, c2
表6 elseを必要とする制約条件表
パラメータ値セット1値セット2
Aa1, a2a3
Bb1, b2, b3b4

この制約条件を記述する式の一例はリスト8のとおりとなります。

リスト8 elseのある条件付き制約
if [A] = "a3"
    then [B] = "b4"
    else [B] <> "b4";

無条件制約

無条件制約は、かならず成立する制約条件を指定します。たとえば、パラメータとしてあるテーブル上の位置を示す3つのテーブル番号があり、それぞれ同じ番号、または異なる番号を組み合わせたい場合、無条件制約が役に立ちます。無条件制約で扱う各パラメータの値は同一の値のセットである必要はありません。

この条件式を適用するモデルをリスト9に示します。 条件式1~4と生成された組み合わせを表7~10に示します。

リスト9 テーブル番号のモデル
テーブル番号a:  1,128,255
テーブル番号b:  1,128,255
テーブル番号c:  1,128,255
# 条件式1  3つのパラメータのうちすくなくとも1つは異なる値を組み合わせる。
# (<>とOR演算子を使用)
[テーブル番号a] <> [テーブル番号b] or [テーブル番号b] <> [テーブル番号c] or 
[テーブル番号c] <> [テーブル番号a];
表7 3つのパラメータのうちすくなくとも1つは異なる値を組み合わせる
No.テーブル番号aテーブル番号bテーブル番号c
111128
211281
31255255
41281128
5128128255
61282551
725511
82551255
9255128128
10255255128
# 条件式2  3つのパラメータはすべて異なる値を組み合わせる。
# (<>とAND演算子を使用)
[テーブル番号a] <> [テーブル番号b] and [テーブル番号b] <> [テーブル番号c] and 
[テーブル番号c] <> [テーブル番号a];
表8 3つのパラメータはすべて異なる値を組み合わせる
No.テーブル番号aテーブル番号bテーブル番号c
11128255
21255128
31281255
41282551
52551128
62551281
# 条件式3  3つのパラメータのうちすくなくとも2つは同じ値を組み合わせる。
# (= とOR演算子を使用)
[テーブル番号a] = [テーブル番号b] or [テーブル番号b] = [テーブル番号c] or 
[テーブル番号c] = [テーブル番号a];
表9 3つのパラメータのうちすくなくとも2つは同じ値を組み合わせる
No.テーブル番号aテーブル番号bテーブル番号c
111255
21128128
312551
41281128
51281281
6128255128
7128255255
825511
9255128255
10255255128
# 条件式4  3つのパラメータはすべて同じ値を組み合わせる。
# (= とAND演算子を使用)
[テーブル番号a] = [テーブル番号b] and [テーブル番号b] = [テーブル番号c] and 
[テーブル番号c] = [テーブル番号a];
表10 3つのパラメータはすべて同じ値を組み合わせる
No.テーブル番号aテーブル番号bテーブル番号c
1111
2128128128
3255255255

無条件制約は、使い方によってはこのように強い力を発揮することができます。表7表9は意味的には同じですが、組み合わせ結果は若干異なります。

次回は、残りのモデルオプションについて解説します。いずれも強力な機能が控えています。

おすすめ記事

記事・ニュース一覧