スライド 1

ICSE2011勉強会
セッション: Testing the Water Ⅲ
Parametric Specificationsの(自動)抽出
Mining Parametric Specifications
Choonghwan Lee, Feng Chen, Grigore Rosu (イリノイ大学)
担当: NTTデータ 朱峰錦司
前提知識
“Parametric Specifications”とは?



形式的な仕様記述の一種
実行時のパラメータ(具体的なオブジェクト)に着目
JavaのCollectionとIteratorクラス
ユーザ:「nextしても大丈夫か?」
hasNext:「大丈夫だ、問題ない。」
「神は言っている…ここでCollectionを
操作する定めではないと…」
2
図表はMining Parametric Specifications(ICSE 2011) P.591より引用
目的と貢献
問題


Parametric Specificationsは作成が難しい

形式仕様をminingする研究は様々あるが、(満足のいく)Parametric
なものを抽出できるものはない


複数のオブジェクトが絡むと解析が複雑になる
本質的な部分のみを切り出すSlicingも難しい
汎用的で本質的なParametric Specificationsを抽出する技法の提案
貢献


提案手法を“JMINER”というツールとして実現

3
mining対象のUnitTestCaseと実行系列があれば、mining処理の100%
自動化が可能
提案手法の概要
1. メソッドと関連するクラスのセットを抽出
(outputイメージ)
<{add, iterator, hasNext, next}, {Collection, Iterator}>
2. 異なるオブジェクトセットの系列を分離
3. 分離された系列からFSAを生成
4
図表はMining Parametric Specifications(ICSE 2011) P.591-593より引用
手法の評価
題材


JMINERを用いてOpenJDK6の4つのパッケージをmining


java.util, java.io, java.lang, java.net
実行系列取得にはDaCapo benchmark suiteとApache JAMES Serverを使用
評価観点と結果


Miningに要した時間



わりと現実的な時間で実施可能
系列に含まれるevent数が多ければ多いほど、
時間がかかってしまうが、得られる
出力の品質が高いので大きな問題ではない
出力されたParametric Specificationsの妥当性


例を4つ上げており、全てについて結果はおおむね妥当
手法の特性上、制限もあり


順不同のはず
使用するサンプルに依存してしまう
FSAなので「カウンタ」の概念がない
hasMoreTokensを用いずカウンタで制御
5
図表はMining Parametric Specifications(ICSE 2011) P.598-599より引用
ICSE2011勉強会
セッション: Testing the Water Ⅲ
モデル操作のFootprintを推定する
Estimating Footprints of
Model Operations
Cédric Jeanneret, Martin Glinz (スイス・チューリッヒ大学)
Benoit Baudry (フランス・IRISA)
担当: NTT研 張暁晶
目的と貢献
Footprintとは何か

使われ
た部分

モデルへの操作において、実際に「使われた」モデル要素の集合

モデル操作にはクエリ、シミュレーション、ビュー生成、モデル変換等がある
モデル
ある操作の”Footprint”
Footprintが判ると何が嬉しいか


問題の特定


Footprintが期待する内容やサイズとなっているかを観察することによって、
「モデル」と「操作」の改良点を見つけられる

モデルのスコープや抽象度、目的は適切か?

他のモデル要素をも読むことで、操作を高度化できないか?
インパクト分析

Footprint算出時に作られるモデルの「ビュー」と、操作の「戻り値」との間の相互の影響を把握できる
Footprintを求めるうえでの問題点


計算コストが高い。操作を実行するのと同じだけの計算コストがかかる
操作を実行することなくFootprintを推定する手法を提案

7
貢献:
モデル使用状況
を知るための
効率的かつ精確
な手段を提供した
手法の説明
モデル
メタモデル
操作
発火可能な遷移の名前を全て取り出す
Petrinet :: namesOfEnabledTransitions(): Set(String)
body:
self.transitions −> select(t:Transition | t.enabled) −>
collect(t:Transition | t.name)
Step1 操作の「定義」を分析して
「メタモデル」のどこを使っている
Dynamic Footprint(従来手法) かを抽出
Static Footprint(提案手法)
モデル上のfootprint
Objects
(10個)
Settings
(26個)
p:Petrinet
S1:Place
S2:Place
S3:Place
t1:Transition
t2:Transition
1:Flow
2:Flow
3:Flow
4:Flow
S1.tokens=2
S1.capacity=3
・
・
・
略
8
メタモデル上のfootprint
Step2 Step1で得られたメタモデ
ル要素のインスタンスであるよう
な、モデル要素だけを集める
Cedric Jeanneret, Martin Glinz, and Benoit Baudry. Estimating footprints of model operations. In International
Conference on Software Engineering (ICSE 11), 2011.
Figure 2, 3, Table 1 より引用
評価方法や評価結果
Objects,Settings両方とも精確に推定できるケースが多い
評価方法


75個のモデルと6種の操作を
用いて実験
評価結果


9
提案したStatic Footprintは…

適合率
Dynamic Footprintに対して精確に
推定できている

計算速度
Dynamic Footprint
より計算が速い
Settingsがイマイチなケースもある
Cedric Jeanneret, Martin Glinz, and Benoit Baudry. Estimating footprints of model operations. In International
Conference on Software Engineering (ICSE 11), 2011.
Figure 9, Table 4 より引用
ICSE2011勉強会
セッション: Testing the Water Ⅲ
テストを自動生成できなかった原因を特定する
Precise Identification of Problems for
Structural Test Generation
Xusheng Xiao, Tao Xie (ノースカロライナ大学)
Nikolai Tillmann, and Jonathan de Halleux (Microsoft Research)
担当: NTT研 丹野治門
目的と貢献

目的


現状の問題点


テスト生成(テストデータ生成)でより高いカバレッジを実現する
ツール(例えば,PEX)でテストを自動生成できないパスがある
提案

ツールで生成できなかった原因を特定し,人が補助してテストを生成する
ツールの
未到達
箇所!
…
if ( … ){
…
}
else{
…
}
…
原因特定,
分類する
External-Method-Call Problem(EMCP)
Object-Creation-Problem (OCP)
※ツールで生成できない原因の65%を占める
OCPか.じゃあ,この
Factory Methodを使うよう
ツールに指示してみよう
貢献:ツールと人の協調でカバレッジを上げる初の試みであり,
そのために必要な原因(EMCP,OCP)の特定手法を考案
11
External-Method-Call Problem(EMCP)の特定

手順


未到達箇所の直前までの外部ライブラリメソッド呼び出しEMCP候補
EMCP候補の中で未到達箇所の直前の分岐条件とデータ依存関係に
あるメソッドEMCP特定
XUnitの例(C#)
static string GetDefaultConfigFile(string assemblyFile) {
string configFilename = assemblyFile + ".config";
Console.WriteLine(“…searching ” + assemblyFile);
bool exists = File.Exists(configFilename);
if (exists)
return configFilename;
未到達箇所
return null;
}
12
EMCP候補
・Console.WriteLine
・File.Exists
絞り込み
EMCP特定
・File.Exists
Xusheng Xiao, Tao Xie, Nikolai Tillmann, and Jonathan de Halleux “Precise Identification of Problems for Structural Test
Generation” In International Conference on Software Engineering (ICSE 11), 2011. Figure 1 より引用(一部修正有り)
Object-Creation Problem(OCP)の特定

手順


メソッドの引数(及びそのフィールド)OCP候補
OCP候補の中で未到達箇所の直前の分岐条件とデータ依存関係に
あるメソッド引数(もしくはそのフィールド)OCP特定
Stackを用いたFixedSizeStackの実装例(C#)
public class FixedSizeStack {
private Stack stack;
public FixedSizeStack(Stack stack) {
this.stack = stack;
}
public void Push(object item) {
if(stack.Count() == 10) {
throw new Exception("full");
}
stack.Push(item);
}
未到達箇所
...
}
13
OCP候補
・FixedSizeStack (引数this)
・FixedSizeStack.stack
・Stack.items (直接代入不可)
・items._size (直接代入不可)
・object (引数item)
絞り込み
OCP特定
・FixedSizeStack.stack
※直接代入不可の
場合はメンバとして
もつクラスをOCPと
して選ぶ
Xusheng Xiao, Tao Xie, Nikolai Tillmann, and Jonathan de Halleux “Precise Identification of Problems for Structural Test
Generation” In International Conference on Software Engineering (ICSE 11), 2011. Figure 2 より引用(一部修正有り)
評価

対象

XUnit(8.3KLOC),Quick Graph(11.4KLOC)
Object-Creation Problem(OCP)
External-Method-Call Problem(EMCP)
候補
特定
正解
FP
FN
候補
特定
正解
FP
FN
335
107
108
17
18
1313
39
41
0
2
Quick 116
Graph
48
57
3
12
297
4
3
1
0
Total
155
163
20
30
1610
43
44
1
2
XUnit
451
65.63%除外
絞り込み(候補→特定)の効果
97.33%除外
高い正解率
(False Positive,
False Negativeが少ない)
データ依存関係を利用した絞り込みは効果があり高い正解率となった
14
Xusheng Xiao, Tao Xie, Nikolai Tillmann, and Jonathan de Halleux “Precise Identification of Problems for Structural Test
Generation” In International Conference on Software Engineering (ICSE 11), 2011. Table2, Table3 より引用(一部修正有り)