こんにちは、まゆげです。

今回は「便利なツール「Pict Master」が使えない環境でもペアワイズテストのパターンを効率よく作りたい」をテーマに、その際に使用するツール「PICT(Pairwise Independent Combinatorial Testing tool)」を紹介していきたいと思います。

はじめに

以前の記事(「Pict Master」でペアワイズ法のテストケースを高速生成!)でペアワイズテストのパターンをPict Masterで作成する方法が紹介されていました。

ただ、いざ使おうとしたら、作業環境でダウンロード許可が下りないなど様々な事情でPict Masterが使用できなかったというケースに遭遇したことはありませんか。

かくいう私も過去に諸事情でPict Masterを使用できず、PICTのみ使用できる環境で少しだけ苦戦したことがありました。

組み合わせのパターン抽出の際に条件付き制約を考慮するのはPict Masterの制約表に記載するのが視覚的でわかりやすいですよね。それをPICTで実行しようとした時には条件付き制約の構文をPICT実行時のモデルファイルに記載しないといけません。その場合、構文を書くことに慣れていないと導入の際の高い壁になってしまうこともあるのではないかと思います。

便利なPict Masterが使えない環境でもPICTを使用してパターンを作成したい、でもモデルファイルの書き方に自信がなくて一歩踏み出せないという方に向けて、単純な条件付き制約ならば割と簡単に書けてPICTを実行できる方法を紹介したいと思います。

ぺアワイズテストやPict Masterについては先ほど紹介した以前の記事を参照いただくとして、今回使用するPICTを簡単に紹介します。

PICT(Pairwise Independent Combinatorial Testing tool)とは

PICTとはペアワイズテストのテストパターンを条件に合わせて効果的に生成できるコマンドラインツールです。様々な実行オプションと実行時に付けるプレーンテキストで作成したモデルファイルにはベースとして因子と水準を記載し、さらに条件付き制約の構文を記載する(しないケースもある)ことによって目的に合ったテストパターンを生成することができます。

詳しくはGithubのPICT紹介ページを参照してみてください

PICTはコマンドラインから以下のように実行しますが、特に実行オプションなしの場合はシンプルでとても簡単です。

🔸 >PICT.exe モデルファイル名.txt

ただ実行するにあたってのポイントはモデルファイルの書き方になります。ということで条件付き制約を含めて記載方法を紹介していきます。

モデルファイル(条件付き制約を含む)の書き方

以前の記事で使われていたスーツオーダーシステム(勝手に命名...(;^_^A )の例を使ってPICTを実行できるようにしていきたいと思います

因子水準表は以下のようになっていました。

ではこの因子水準表を元にモデルファイルを書いていきます。

モデルファイルの書き方 その1 ※因子と水準の書き方

↓条件付き制約がなければいたって簡単、因子(パラメータ)、水準(値)の書き方

☝ 例のように因子(パラメータ)ごとに行を分け、それぞれの水準(値)をカンマで区切ります。また因子と水準はコロンで区切ります。 
例)<因子> : <水準1>, <水準2>, <水準3>, …

○上記因子水準表を元に書くと以下のようになります

ITEM: Jacket, Pants, TwoPieceSuit, ThreePieceSuit, Tuxedo
FINISH: Single, Double, No
SIZE: Small, Medium, Large, Order
PATTERN: Plain, Stripe, Check, Order
OPTION: No, Yes

モデルファイルの書き方 その2 ※条件付き制約がある場合

  • 手順1 仕様をもとに一文で条件付き制約を書いてみる
    ★下記例の様にシンプルな一文に起こしてみる
    (例)もし因子Aが〇〇であれば(〇〇でなければ)、因子Bは~になる(~にならない)
  • 手順2 記載した一文を構文に書き換えてみる
    ★条件文はIF~THENで記載
    (例)IF [A] =(<>) ”〇〇” THEN [B] =(<>) “~” ;
  1. 「=」の場合は「〇〇が~ならば」
  2. 「<>」の場合は「〇〇が~でなければ」
  3. 因子は[]で囲うこと
  4. 水準が文字列の場合は””(ダブルコーテーション)で囲うこと、数値の場合は””は不要
  5. 構文の文末には;(セミコロン)を記述
  6. ORやAND、INといった論理演算子も使用できます

ではスーツオーダーシステムの例に記載のあった条件付き制約3つを文章化します。

※本文中で「条件付き制約」と記載しているものは以前の記事では「制約条件」と記載されているため、以下制約1、2、3では原文の表現をそのまま引用しています。

⚠️ 制約1: 
<制約条件> 『購入アイテム(ITEM)』が「ジャケット(Jacket)」の場合
<制約対象> 『仕上げ(FINISH)』は「なし(No)」となる

制約1を一文にすると
もし [ITEM] が "Jacket"であれば [FINISH] は "No"となる。

さらに構文化すると
IF [ITEM] = "Jacket" THEN [FINISH] = "No";
となります

⚠️ 制約2:
<制約条件> 『購入アイテム(ITEM)』が「ジャケット(Jacket)」以外の場合
<制約対象> 『仕上げ(FINISH)』は「シングル(Single)」もしくは「ダブル(Double)」となる

制約2を一文にすると
もし [ITEM] が "Jacket"でなければ [FINISH] は "Single" か "Double"となる。

さらに構文化すると
IF [ITEM] <> "Jacket" THEN [FINISH] = "Single" OR [FINISH] = "Double"; 
となります

⚠️ 制約3:
<制約条件> 『購入アイテム(ITEM)』が「○○スーツ(○○Suit」もしくは「タキシード(Tuxedo)」以外の場合
<制約対象> 『オプション(OPTION)』は「なし(No)」となる

※この制約3の場合、PictMasterの例のようにワイルドカードをつかって、さらに別条件も重なる場合、複雑になってしまい間違えやすくなります。
ですので、ここはシンプルに「〇〇スーツ」と「タキシード」以外というのを「ジャケット」か「パンツ」の場合としてしまった方が間違いは少なくなります。

したがって制約3は以下のように文章化します。
もし [ITEM] が "Jacket" か "Pants" であれば [OPTION] は "No"となる。

この場合、文章のまま以下のように記載しても良いですし、
IF [ITEM] = "Jacket" OR [ITEM] = "Pants" THEN [OPTION] = "No";

ORをひとまとめにしてINという演算子を使って、以下のようにも記載出来ます。
IF [ITEM] IN {"Jacket", "Pants" } THEN [OPTION] = "No";

↓上記条件付き制約を構文化したものを下記にまとめます。

IF [ITEM] = "Jacket" THEN [FINISH] = "No";
IF [ITEM] <> "Jacket" THEN [FINISH] = "Single" OR [FINISH] = "Double";
IF [ITEM] IN {"Jacket", "Pants" } THEN [OPTION] = "No";

前述の「モデルファイルの書き方 その1」で作成した因子、水準のベースと「モデルファイルの書き方 その2」で作成した条件付き制約を記載したものをモデルファイルとして作成します。

↓以下内容を記載してモデルファイル(ファイル名は任意)として保存する

ITEM: Jacket,Pants,TwoPieceSuit,ThreePieceSuit,Tuxedo 
FINISH: Single,Double,No 
SIZE: Small,Medium,Large,Order
PATTERN: Plain,Stripe,Check,Order
OPTION: No,Yes

IF [ITEM] = "Jacket" THEN [FINISH] = "No";
IF [ITEM] <> "Jacket" THEN [FINISH] = "Single" OR [FINISH] = "Double";
IF [ITEM] IN {"Jacket", "Pants" } THEN [OPTION] = "No";

補足 条件(条件付き制約になるもの)が複雑になりそうな場合、まずは一つずつ簡潔な箇条書きで整理してから文章化するのもオススメです

作成したモデルファイルでPICTを実行する

コマンドラインから実行する方法は前述の通りですので以下に実行結果を記載します。

ITEM				FINISH		SIZE		PATTERN	OPTION
TwoPieceSuit		Single		Order		Plain		No
Tuxedo				Single		Medium		Order		Yes
Jacket				No			Large		Check		No
TwoPieceSuit		Double		Small		Order		Yes
ThreePieceSuit	Double		Order		Check		Yes
Pants				Double		Medium		Order		No
ThreePieceSuit	Single		Large		Stripe		Yes
Tuxedo				Double		Small		Plain		No
Jacket				No			Medium		Plain		No
Pants				Single		Small		Stripe		No
Tuxedo				Single		Order		Check		Yes
ThreePieceSuit	Single		Small		Plain		No
Pants				Double		Large		Plain		No
TwoPieceSuit	  Double		Large		Stripe		Yes
Tuxedo				Single		Order		Stripe		Yes
Pants				Single		Order		Order		No
ThreePieceSuit	Single		Medium		Order		Yes
Pants				Single		Small		Check		No
Jacket				No			Small		Stripe		No
TwoPieceSuit		Double		Medium		Check		Yes
Jacket				No			Medium		Stripe		No
Jacket				No			Order		Order		No
Tuxedo				Double		Large		Order		No
ThreePieceSuit	Single		Order		Plain		Yes

いかがでしょうか、このように簡単に生成することが出来ます。

知っておくと便利な実行オプションを活用しよう

便利に使えるオプションを紹介します。

🔸 /e: ファイル名 重要な組み合わせを予め加えることができる

スーツオーダーシステムの例だと最高金額になる以下の組み合わせを加えていましたので上記オプションを適用します。

ファイルへの記載方法はPICTの出力結果と同様にする

↓表の組み合わせを下記の様に記載して例えばケース指定.txt(任意)として保存

ITEM		FINISH		SIZE		PATTERN	OPTION
Tuxedo		Double		Order		Order		Yes

以下のようにファイルを指定して実行します。

🔸 >pict.exe モデルファイル名.txt /e: ケース指定.txt

実行すると指定した組み合わせを含めてパターンが生成されます。

ITEM				FINISH		SIZE		PATTERN	OPTION
Tuxedo				Double		Order		Order		Yes
TwoPieceSuit		Single		Order		Plain		No
Tuxedo				Single		Medium		Order		Yes
Jacket				No			Large		Check		No
TwoPieceSuit		Double		Small		Order		Yes
ThreePieceSuit	Double		Order		Check		Yes
Pants				Double		Medium		Order		No
ThreePieceSuit	Single		Large		Stripe		Yes
Tuxedo				Double		Small		Plain		No
Jacket				No			Medium		Plain		No
Pants				Single		Small		Stripe		No
Tuxedo				Single		Order		Check		Yes
ThreePieceSuit	Single		Small		Plain		No
Pants				Double		Large		Plain		No
TwoPieceSuit	  Double		Large		Stripe		Yes
Tuxedo				Single		Order		Stripe		Yes
Pants				Single		Order		Order		No
ThreePieceSuit	Single		Medium		Order		Yes
Pants				Single		Small		Check		No
Jacket				No			Small		Stripe		No
TwoPieceSuit		Double		Medium		Check		Yes
Jacket				No			Medium		Stripe		No
Jacket				No			Order		Order		No
Tuxedo				Double		Large		Order		No
ThreePieceSuit	Single		Order		Plain		Yes

赤字箇所がオプションで追加した組み合わせです。

その他の便利なオプションをいくつか載せておきます。

  • /o:N 組み合わせるパラメータの数 (N(初期値: 2))
    ★PICTのオプションで3因子間以上(N因子間)でも生成可能★
  • /d モデルファイルに記載するパラメータに対する値の区切り文字を指定する
    (指定なしオプションのデフォルトはカンマ)
  • /r 生成結果をランダム化するので毎回同じ出力結果にはならない
    紹介したPICTの実行オプションで3因子間網羅も出来るし、Excel等で見やすく表示できるようにすることも、生成結果をランダム化することで様々なパターンをテストすることも可能です。

PICTが使用できない!そんな時は!

Pairwise PICT ONLINEの紹介)

ここではモデルファイルを同じように入力欄に直接記載して実行することで同じ結果が得られます。

※ただし、インターネット上のサイトを利用することになりますので、セキュリティ上のリスクを考慮しないといけません。お客様に使用許諾を得るなどの対策が必要ですので使用する際には慎重を期すようにしましょう。

まとめ

  • 条件付き制約をわかりやすい文章に出来れば構文化は簡単にできます
  • 結果誰でも条件付き制約の構文を記述するというハードルが下がってPICTを気軽に使いやすくなります
  • まずは簡単な条件付き制約の構文を書くところから始めて、慣れてきたら色々な演算子などを駆使してより複雑な条件付き制約の構文を書いてみましょう

おまけ

せっかくなので作成例をもう一つ、仕様から文章化して実行結果までを参考までに記載しておきます。

ホテルの予約システムの仕様例 ※PICT適用のためのサンプル仕様(オリジナル)です

【仕様】

・ 部屋のタイプは4種類(シングル、ツイン、ダブル、ダブル2台)
・ 一部屋の宿泊人数は1名~4名
・ 宿泊プランには朝食付き、朝夕食付き、素泊まりがある
・ 一回の予約で可能な宿泊日数は1泊~5泊
・ シングルは1名利用に限る
・ ツインとダブルの1名利用は可能
・ ダブル2台の部屋は2名から4名の利用が可能
・ 3泊以上の場合に限り、素泊まり利用が可能
・ 連泊は5連泊までを上限とする

【因子水準の整理】

部屋タイプ:シングル、ツイン、ダブル、ダブル2台
宿泊人数:1、2、3、4
プラン:朝食付き、朝夕食付き、素泊まり
宿泊数: 1、2、3、4、5

【条件付き制約の文章化】

もし[部屋タイプ]が”シングル”だったら、[宿泊人数]は1名であること
もし[部屋タイプ]が”ツイン”か”ダブル”だったら、[宿泊人数]は2名以下であること
もし[部屋タイプ]が”ダブル2台”だったら、[宿泊人数]は2名~4名であること
もし[宿泊数]が”素泊まり”だったら、[プラン]は”朝食付き”か”朝夕食付き”であること
もし[プラン]が”素泊まり”だったら、[宿泊数]は3~5泊であること

【モデルファイル(因子水準、条件付き制約の構文化)】

type:   Single, Twin, Double, Doublex2
Guests: 1, 2, 3, 4
Plan:   breakfast, dinner, stay
Stays:  1, 2, 3, 4, 5

IF [Type] = "Single" THEN [Guests] = 1;
IF [Type] = "Twin" OR [Type] = "Double" THEN [Guests] <= 2;
IF [Type] = "Doublex2" THEN [Guests] IN {2,3,4};
IF [Stays] <= 2 THEN [Plan] = "breakfast" OR [Plan] = "dinner";
IF [Plan] = "stay" THEN [Stays] IN {3,4,5};

【実行コマンドと実行結果】

🔸 > PICT.exe モデルファイル.txt

↓ ↓ ↓

以下は出力結果を表に転記してナンバリングしたものです。

一連の流れを載せてみました。水準が数値の場合だった際の条件付き制約の構文の例も併せて記載してあります、これらを参考に是非色々試してみてください。。

参考資料

PICTについて詳細なことはこちらを読むとさらに理解が深まります。

  • PICTの最新版(2023年12月現在の最新はVer.3.7.4)の在り処の紹介

以前はインストーラでインストールが必要でしたが、現在は.exe(実行ファイル)のみの配布となっています。

最後までお読みいただき、ありがとうございました。

SHARE

  • facebook
  • twitter

SQRIPTER

AGEST Engineers

AGEST

記事一覧

AGESTのエンジニアが情報発信してます!

株式会社AGEST

Sqriptsはシステム開発における品質(Quality)を中心に、エンジニアが”理解しやすい”Scriptに変換して情報発信するメディアです

  • 新規登録/ログイン
  • 株式会社AGEST