本日の発表内容

オープンソース・ツールで楽しむ
ソフトウェアテスト改善

１．テスト改善とは何か
１．テスト改善とは何か
２．事例説明２．事例説明３．ツール活用のポイント
３．ツール活用のポイント

キャッツ株式会社
ソフトウェア事業部

４．改善効果４．改善効果
５．まとめ
５．まとめ

穴田 啓樹
2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

1
2006/5/11

１．テスト改善とは何か

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

2

１.１ 何を、なぜ改善するのか
１.１
何を、なぜ改善するのか

目の前の 不便を意識 することから始める

作成
作成

職場から一定周期のリズムを刻む音が聞こえてきませんか？

実行
実行

検証
検証

テストシーケンス作成
ドキュメント作成を楽にしたい！
テストドライバ作成を楽にしたい！
両者を一度に作成したい！

・テストは繰り返しが多い
・３回おなじことを繰り返したら、やり方を考え直せ！

テスト結果検証

日々の 小さな工夫 を積み重ねる
2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

多量のログ解析作業を楽にしたい！
ミスを防ぎたい！
3

2006/5/11

ＣＤプレーヤーhttp://www.ruby-lang.org/ja/

状態遷移表をもとにテストする
テストシーケンスを記述した仕様書を作成する
テストドライバを作成する
実行環境は ZIPC （※） シミュレータを利用する
テストを通して変数が設計の範囲内で変化したか確認する

http://rubyinstaller.rubyforge.org/wiki/wiki.pl

Ruby

4

２．事例説明１.２ 利用したオープンソースツール
１.２
利用したオープンソースツール
スクリプト言語Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

まつもと ゆきひろ氏が開発しているオブジェクト指向スクリプト言語。
インタープリタ型言語で、気軽にプログラミングできる。

Ruby/Tk
Ruby/Tk
RubyからTcl//TkのRubyからTcl
TkのToolkitを利用できるようにした環境。
Toolkitを利用できるようにした環境。

「電源ON・OFFテスト」

手軽にGUI
手軽にGUI を持たせることができる。

1. 電源ON・OFFによるトレーの状態を確認する
1) POWER イベントを発生させる
2) TRAY_OPEN 状態か確認する

特に有効なケース“簡単に”簡単に” 複雑な検索をしたい

3) POWER イベントを発生させる
4) OFF 状態か確認する

ログ解析

文字列を整形したい

規約チェック

文字列を置き換えたい

ドキュメント整形char Test(void){/* POWER イベントを発生させる*/
EXEC_POWER;/* TRAY_OPEN 状態か確認する */CHECK_TRAY_OPEN;

2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

5

2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

6

1

２
.１ システム構成
２.１
システム構成作成
作成実行実行２.２ 事例
２.２
事例 「テストシーケンス作成」「テストシーケンス作成」

デモ

テスト仕様書とテストドライバを作成する

検証
検証

定型、同単語が多数出現 ⇒ 入力の手間を減らしたい

自動生成コード

テスト結果検証

変数設計書

実行結果ログ

テストドライバ

テストシーケンス作成

それぞれ作ると手間 ⇒ 両者を一度に作りたい
状態遷移表

テスト仕様書ＧＵＩ

中間フォーマット

変換ツール
テストドライバ

テスト実行

ZIPC シミュレータ
2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

7

2006/5/11

２.２ 表現の工夫
２.２
表現の工夫 （中間フォーマット）（中間フォーマット）

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

２.３ 事例
２.３
事例 「テスト結果検証」「テスト結果検証」

テストシーケンスの構成要素を分類する

変数の可変範囲が設計通りか確認する⇒ データを再利用したい

毎回のログ解析作業が手間 ⇒ 自動化したい

事前準備
事前条件
イベント
事後条件
事後処理

自動テスト

テストシーケンス作成支援ツール

このテストを始める前に整えておくこと
このテストを始める前にあるべき状態
このテストで発生させる事象
このテストを終えた後にあるべき状態
このテストを終える前に後始末しておくこと

8

デモ

変数のプロトタイプ宣言
スクリプト２

変数設計書

変数の最小値
最大値： 結果

スクリプト１「<タグ>タグ>データ」でシーケンスを構成する⇒ 追跡支援の手がかりにしたい例）
ある状態遷移表のセルの遷移先が変更されたら、「事前条件」「イベント」で特定されるテストシーケンスの事後条件を修正する。

変数の最小値
最大値： 定義

テスト実行結果ログ

スクリプト１： 実行結果のログから変数アクセスを抽出し、変数の最小値、最大値を求めるツール

状態遷移・変数アクセス等の記録

スクリプト２： スクリプト１で求めた変数の最小値、最大値と変数の可変範囲情報を比較するツール

ログ解析支援ツール
2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

9

2006/5/11

２.４ ログ解析の基本
２.４
ログ解析の基本 （１）（１）

ポイントは正規表現

while line = gets
if /正規表現/ =~line処理

文字列の中から特定パターンを探すときのルールを表現する方法。文字とメタ文字で構成する。

#１行読み込む→繰り返す# マッチする行を探す# 必要な処理を行う

end

例１）
文字列「aaaaa test bbbbb」において正規表現 /¥s¥w+¥s/（空白で囲まれた1文字以上の英数字）がマッチするのは「 test 」である。

end# sample.rb#test.txt

while line = gets

これはテストです。

print line

test testC:¥Develop>ruby sample.rb < test.txt#test.txt
test testC:¥Develop>

end

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

11

代表的なメタ文字¥w¥W¥s¥S¥d¥D
*+()

英数字
非英数字
空白文字
非空白文字
数字
非数字
直前の表現の0回以上の繰り返し
直前の表現の1回以上の繰り返し
グループ化例２）
文字列「aaaaa test bbbbb」において「空白で囲まれた1文字以上の英数字に続く文字列を得たい。
正規表現 /¥s¥w+¥s(¥w)/ ⇒「bbbbb」

end

2006/5/11

10

２.４ ログ解析の基本
２.４
ログ解析の基本 （２）
（２）

基本構造

if /test/ =~line

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

122

３．ツール活用のポイント

２.４ ログ解析の基本
２.４
ログ解析の基本 （３）（３）

テンプレートを準備しておく

２.３の事例での解析例#拡張子が log の全ファイルを処理する#sample.rb
sample.rb##sample.rb
Dir::glob("./*.log").each {|log_file|
whileline ==gets
gets
fr = open(log_file,'r')whileline
whileline= gets
while line = fr.gets
if/test//test/ =~line=~lineifif/test/ =~line# 処理を書く
printline
line
print
print
line
end
end
end
end
fr.close
end}
end
end

不便を感じたときに、すぐ作れるように「シミュレーションログから変数毎の最小値、最大値を求める」- テキスト処理の基本

ログの例：- 複数ファイル処理

28 SME 67000000 RUN “CD” “CD” “ubSpeed” “1” “2“

小さなツールを組み合わせる※変数 「ubSpeed」
ubSpeed」 ： 「1」 → 「2」 へ変化

１） ログから、変数名「ubSpeed」 と変数値「2ログから、変数名「ubSpeed」と変数値「2」を抜き出したい複数ファイル処理のテンプレート

再利用性を高めるためデバッグに時間を費やさないため/¥d+¥s¥w+¥s¥d+¥s¥w+¥s”¥w+”¥s“¥w+”¥s“(¥w+)”¥s“¥d+”¥s“(¥d+)”/

入力
ファイル

ツール
A

ツール
B

出力
ファイル

保守性を高めるため
２） にマッチさせると、$1に変数名、$2$2に変数値（の文字列）が入るに変数値（の文字列）が入るにマッチさせると、$1に変数名、リダイレクト

2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

13

2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

14

５．まとめ

４．改善効果定量的

パイプツール連携（組合せ）の様子

３） これらを利用して、変数毎の最小値、最大値を求める

定性的＜テストシーケンスの作成支援＞＜テストシーケンスの作成支援＞

改善後： 約１．５日

文章のゆらぎ改善前： 約３日

文章の曖昧さ目の前の不便を意識しよう！
目の前の不便を意識しよう！
スクリプト言語を活用しよう！
スクリプト言語を活用しよう！

※あるテストにおいて＜テスト結果検証＞＜開発者の意識向上＞

ツール： 約３秒
手作業： 約１５分

小さな工夫を積み上げよう！
小さな工夫を積み上げよう！

工夫するのって 「楽しい」！
こんなに早くなるなんて 「すごい！」楽（ラク）したい！

※あるテストにおいて

2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

2006/5/11

Copyright(C) 2006 CATS CO.,LTD. All rights reserved.

16153