Comprehending the Drift II

ICSE 2011
Comprehending the Drift II
東工大 佐伯研(incl. OB)
先鋒 Sirinut Thangthumachit
中堅 林 晋平
大将 風戸 広史
Non-Essential Changes in Version Histories
by D. Kawrykow and M. P. Robillard
• 大事な変更は Non-Essential変更と一緒に行われることが
多い
– Non-Essential 変更はどれくらい行われるか
– ソースコード差分とメソッドの更新にどれくらい影響があ
るか
• 本研究の貢献
–
–
–
–
–
Non-Essential 変更を版管理履歴から抽出するツールの構築
7 OSS 内の 24000 変更セットに適用
2.8~22.9% は Non-Essential
2.6~15.5% のメソッド更新は Non-Essential
Non-Essential変更の影響を明らかにした
Non-Essential Differences
Trivial Type Updates
Rename Refactorings
Trivial Keyword Modifications
Local Variable Extractions
Whitespace and Documentation Updates
Non-Essential Changes in version Histories, p.2
DiffCAT
• 入力: 版管理ツールからの二つのバージョンの情報
• 出力: Non-Essential 変更の情報、構造変更の情報、Non-Essential変更が
含まれていないAST
1.
2.
3.
4.
5.
6.
SemDiff と PPA を利用し、入力を準備
ChangeDistiller で Method と Field の Rename Refactoring を抽出
独自の手法で Class と LocalVariable の Rename Refactoring を抽出
名前変更されたクラスを同じ名前にして、その中の Rename Refactoring
を抽出
すべての Rename Refactorings を逆適用
もう一度 ChangeDistiller を適用し、構造の変更を抽出
http://www.cs.mcgill.ca/~swevo/diffcat/
評価
Non-Essentialは2.8-22.9%
(Zimmermann et al., 2005)
本手法では
Precisionが10.5%増
93,576 x 0.219 = 20,501
81,162 x 0.242 = 19,631
→ 4.2%減
メソッド更新の9%
Non-Essential Changes in version Histories, Table 2, 3, 5
Aspect Recommendation
for Evolving Software
by T. T. Nguyen, H. V. Nguyen, H. A. Nguyen, and T.N. Nguyen
• いわゆるアスペクトマイニング手法
– 既存手法との違い:
「Non-AO → AO」だけでなく,すでに AO なプログラ
ムの進化の過程でのマイニングにも注目
• 貢献
– 新しいアスペクト推薦アルゴリズム XScan
• AO/Non-AO 両種類のプログラムに適用可能
– スケーラブルで高精度なツールの実現
– 複数の実システムで評価
基本的な考え方
• メソッド呼出によるインタラクションに注目
– 内的(呼出元に注目),外的(呼出先に注目),プロクシ外的 (overrideの影
響)
• Concern peer: インタラクションの類似度が閾値以上のメソッ
ド対
– 類似度: 3インタラクション集合の類似度の重みつき和
–public
集合内の各インタラクションの一致もインタラクション類似度に基
class BankAccount {
呼び出し元 BA.deposit
づく db;
Database
呼び出し先 DB.execute
public
void deposit(double value) {
後呼び出し {DB.unlock}
→ 止まらない再帰.近似アルゴリズムを利用
db.lock();
前呼び出し {DB.lock}
ResultSet r = db.execute(…);
db.unlock();
• BA.deposit の内的インタラクション集合:
}
{ (DB.execute, {DB.unlock}, {DB.lock}) }
public void withdraw(double value) {
• BA.withdraw の内的インタラクション集合
db.lock();
{ (DB.execute, {DB.unlock}, {DB.lock}) }
ResultSet r = db.execute(…);
db.unlock();
• DB.execute の外的インタラクション集合:
}
{ (BA.deposit, {DB.unlock}, {DB.lock}),
…
(BA.withdraw, {DB.unlock}, {DB.lock}) }
アスペクトの推薦
1. Peer の候補を抽出
– クローン検出器 Clever [ASE09] による類似メソッド対
– 名前の似た(語の列として見てLCSの長い)メソッド対
– 共通のメソッドをoverrideするメソッド対
2. Peer候補のスキャン
– 既知のデータを使ってPeer候補の類似度を計算しソート
– 閾値以上の類似度をもつものはPeerとして確定させ,以降の類似
度計算に反映させる
3. Peerグラフの探索
– Peer関係を枝とするグラフの島(Peer groups)をアスペクトとみな
す
• 外的インタラクションを多く持つものを高くランク付け
4. 推薦
– Non-AO → AO: ふつうに推薦
– AOプログラムの更新: 既存アスペクトを展開し,検出結果と比較
評価
• 速い: Peer検出は多くの対象で2分以下
– 全時間で支配的なのは内部で使うクローン解析
• 正確: CBFA [ASE08]を相手に JHotDraw で比較
– AO実装である AJHotDraw を正解として使っている
• 更新もうまくいった:
– 多くのカバレッジ(recall)
は100%
Aspect Recommendation for Evolving Software, Table 7より引用
Identifying Program, Test, and Environmental
Changes That Affect Behaviour
by R. Holmes and D. Notkin
• 目的
– ソフトウェアが意図したとおりに変更できたか (想定
外の動作がないか) を確認する
• おもな貢献
– 動的/静的な呼び出し依存性の差分解析を組み合わ
た依存性の新たな分類手法を提案、実装
– 依存性の分類のうち、プログラマの興味を惹くもの、
無視してよいものを識別
– 3つの OSS のソースコード改版履歴へ適用し、興味を
惹く依存性は全体の 1 % より小さいことを示した
– 商用システム開発の 1 スプリント (2週間) を通じて適
用し、提案手法の分類が実際に役立つことを確認
...
}
private
void
genStore()
{ {
private
void
cache(int
val)
int val = compute();
LocalType
l = new LocalType(val);
cache(val);
...
_collection.add(l);
} }
例題
compute()
== co
cache(int)
== ca
LocalType(int)
== lt
Abbreviations
Collection.add(int)
genStore()
== gs== ad
compute()
== co
cache(int)
== ca
LocalType(int)
== lt
private void cache(int val) {
Collection.add(int)
==
ad
a) Source
code.
Original
code
is
orange,
new
code
is
green.
LocalType l = new LocalType(val);
_collection.add(l);
}
V1S
V2S
a) Source code. Original code
s-is orange, new code is green.
• 呼び出しの依存性を
隣接バージョン間で
比較
private void genStore() {
変化なし
int val = compute();
cache(val);
...
}
private void cache(int val) {
LocalType l = new LocalType(val);
_collection.add(l);
追加
}
s+
s+
s-
s
+
[gs ! sca]
[ca ! lt]
ca]
[ca[gs
! !ad]
[ca ! lt]
[ca ! ad]
[gs ! co]
s
s+
[gs ! co]
ss-
b) Statically observed calls in the source code before and after the change.
Abbreviations
genStore()
== gs
静的解析
V1D
compute()
==
co
cache(int)
== ca
LocalType(int)
== lt
動的解析
Collection.add(int) == ad
2.1
b) Statically observed calls in the source code before and after the change.
We
dassum
dcode w
call ca
+
d
be exe
d+d
d
[gs
!
ca]
a) Source code. Original code is orange, new code
green.
[gs[ca
! is!ca]
genera
lt]
[ca
!
lt]
[gs
!
co]
[ca ! ad]
[gs ! co]int end
[ca ! ad]
[ad ! LocalType.equals(..)]
V2D[ad ! LocalType.equals(..)]
gram i
sR. Holmes, D. Notkin:+“Identifying Program, Test, and Environmental Changes That Affect+Behaviour”, In Proc. ICSE 2011,
c) Dynamically observed
change
s calls in the executing system before- and after theBase
Figure 2 より引用 s
d
s
int o fi
c) Dynamically observed calls in the executing system before and after the change.
提案手法
• 静的解析 (s), 動的解析 (d) による依存性集合
を組み合わせて、4集合ベン図の15区画に分
類
V1D
approach over 10 versions of t hree difrce syst ems, demonst rat ing various quanalit at ive propert ies of our approach. For
ow t hat fewer t han 1% of t he ext ract ed
ely int erest t o t he programmer wit h reoural changes.
approach t o an indust rial code base for
development sprint . T he limit ed feeded suggest s t hat t he behavioural inforvide a useful alt ernat ive view for t rackolut ion. Our indust rial part ner valued
n t hat our approach provided enough
it be incorporat ed int o t heir exist ing
yst em.
– 追加(+), 削除(-), 変化なし(無印)
V1S
s-
V2S
• 区画をさらに分類
d-
s+
s
s-dsd-
s+d-
– Inconsistent
sd+
sd
+
+
+d
– Consistent
sd
s
s-d+ s-d
– Not executed
d+
d
– Unchanged
ur approach for defining t hese part it ions
–D. Notkin:
Unlikely
R. Holmes,
“Identifying
Program, Test,
it also
provides
a concret
e scenario
t o and Environmental Changes That Affect Behaviour”, In Proc. ICSE 2011,
1 より引用
oningFigure
approach.
Sect ion 3 present s t he
V2D
F i gu r e 1: A n al y si s par t i t i ons w i t h d escr i pt i ve l ab el s
評価
無視してよい
依存性
(99.94%)
3つのOSS, 最新
の各10チェン
ジセットに適
用
R. Holmes, D. Notkin: “Identifying Program, Test, and Environmental Changes That Affect Behaviour”, In Proc. ICSE 2011,
Table 2 より引用