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 より引用
© Copyright 2024 ExpyDoc