PICTというツール(2)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、森永です。
前回の続きで、テストケース生成ツール PICTの検証をしたいと思います。
いざっ!と思ったのですが、自宅のWindows機が何故だか起動しません…。
色々とやってみても、状況は変わりません(泣)
仕方がないので、今回は「Ubuntu10.04 + Wine」というあまり賛同を得られそうにない環境で検証することにしました。
前回使用したデータをサルベージすることが出来たのは、不幸中の幸いでした。

再びPICTのインストール

Ubuntu + Wine上への、PICTの再インストールです。
ターミナルから「cmd.exe」を起動し、更に「msiexec.exe」を使用してPICTのインストーラを実行します。
全く問題なくインストール作業が完了しました。

生成結果の検証

まず、エミュレーター上で生成するテストケースは正しいのか、つまりWindows上で生成した結果とWineの結果の差異を検証します。
最初に、分かり易くWindowsの結果ファイルを「Windows.txt」と変名もしておきます。
それと、前回のパラメーターに路線名を付け加えます。例えば、「東京」といっても、山手線と丸の内線がありますからね。
Windows上で生成した結果ファイルにも、同じく路線名を付加しておきます。
head windows.txt
次に、いよいよUbintu上でPICTを実行します。
pict.exec all_paird.txt > ubuntu.txt これも、問題なく実行することができました。
そして、WindowsとUbuntuの結果の差異検証。
diff windows.txt ubuntu.txt 2つのファイルをdiffで比較した結果、差異はないことが確認できました。

さて、お待たせしました。いよいよ、テストケースの妥当性の検証です。
PICTは基本的に2つのパラメーターの組合せを網羅するツールですので、今回はこのケースについて検証をします。
組合せが可能なパラメーターの一覧を作成します。
head all_pairs.txt 全部で、28×(11+9+9)+11×(9+9)+9×9=1,091通りになります。
これらの組合せが、生成されたテストケースに全て含まれているのでしょうか?
折角のUbuntuなので、検証ツールをシェルで作成しました。

#!/bin/bash

###############################################################################
# シェル内関数定義
###############################################################################
helpMessage() {
	echo ""
	echo "名称: verify.sh"
	echo "形式: verify.sh [-r resultfile -p candidatefile | [-h | --help]]"
	echo "概要: パラメタの組合せ候補が、pictが生成した組合せ結果に含まれる"
	echo "       かを検査します。組合せ結果に含まれない候補を、標準出力に出"
	echo "       力します。"
	echo "引数: -r resultfile	組合せ結果ファイルを指定します。"
	echo "       -p candidatefile	組合せ候補ファイルを指定します。"
	echo "       -h | --help	このヘルプを表示します。"
	echo ""
	exit 0
}

usageMessage() {
	echo "usage: verify.sh [-r resultfile -p candidatefile | [-h | --help]]" 1>&2
	exit 1
}

nofileMessage() {
	echo "$@: file not found." 1>&2
	exit 2
}

###############################################################################
# 引数処理
###############################################################################

# ヘルプ表示処理
for argv in $@
do
	if [ "$argv" = "-h" -o "$argv" = "--help" ]; then
		helpMessage
		exit $?
	fi
done

# 引数の数をチェック
if [ $# -lt 4 ]; then
	usageMessage
	exit $?
fi

# パラメタの初期化
unset RESULT_FILE
unset ALL_PAIRS

# パラメタの取得
while getopts r:p: argv
do
	case "$argv" in
	"r")
		RESULT_FILE="$OPTARG"
		;;
	"p")
		ALL_PAIRS="$OPTARG"
		;;
	esac
done

# パラメタの長さチェック 
if [ ${#RESULT_FILE} -le 0 ]; then
	usageMessage
	exit $?
fi
if [ ${#ALL_PAIRS} -le 0 ]; then
	usageMessage
	exit $?
fi

# ファイルの存在チェック
if [ ! -f "$RESULT_FILE" ]; then
	nofileMessage "$RESULT_FILE"
	exit ?
fi
if [ ! -f "$ALL_PAIRS" ]; then
	nofileMessage "$ALL_PAIRS"
	exit ?
fi

###############################################################################
# メイン処理
###############################################################################

# 組合せ候補をファイルから1行ずつ読み出す
cat $ALL_PAIRS | while read pair_line
do
	# 組合せを分解する
	PAIR_MEMBERS=(`echo $pair_line | sed -e 's/\t/ /g'`)
	
	# PICTの出力結果から検査対象になる全行を読み出す
	res_line=`grep ${PAIR_MEMBERS[0]} $RESULT_FILE`
	RES_MEMBERS=(`echo $res_line | sed -e 's/\t/ /g'`)

	# PICT出力結果に組合せ候補が含まれるか検査する
	found=0
	for res_mem in ${RES_MEMBERS[@]}
	do
		if [ "$res_mem" = ${PAIR_MEMBERS[1]} ]; then
			found=1
			break;
		fi
	done

	# 検査結果の出力
	if [ $found -eq 0 ]; then
		echo "${pair_line}: not found." 1>&2
	fi
done

引数で、テストケースと組合せ候補のファイルを渡す仕様です。検出できなかった組合せは、メッセージを表示します。
Ubuntu.txtの文字コードをUTF-8に変更することと、改行コードからCRを取り除くことも忘れずに。
verify -r ubuntu.txt -p all_pairs.txt 実行の結果、全ての組合せが網羅されていることが分かりました。

念の為、検証ツールにバグはないのかを検証してみます。
組合せ候補の最後に、1つ余計な行を追加しました。
tail all_pairs.txt; ./verify.sh -r ubuntu.txt -p all_pairs.txt 追加した候補のみが検出されました。これで、バグの疑念が少しは晴れたかと思います。

次回のお題

次回は、3つのパラメーターの組合せの検証を予定しています。

それでは、また。