ICSE 2011 Comprehending the Drift II

Slides:



Advertisements
Similar presentations
シーケンス図の生成のための実行履歴圧縮手法
Advertisements

メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
剽窃 他人の作品や論文を盗んで,自分のものとして発表すること. プログラムが剽窃される事例もある. Aさんのプログラム Xさんのプログラム
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
プログラムの動作を理解するための技術として
ICSE 2011 Refactoring Your Lei I
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
ソードコードの編集に基づいた コードクローンの分類とその分析システム
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
Javaプログラムの変更を支援する 影響波及解析システム
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
UMLモデルを対象とした リファクタリング候補検出の試み
プログラム実行履歴を用いたコードクローン検出手法
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
類似度メトリクスを用いた Javaソースコード間類似度測定ツールの試作
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
統合開発環境のための プログラミング言語拡張 フレームワーク
クラスの追加 メソッドの追加 TestCaseの追加 Test Methodの追加.
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Detecting Software Modularity Violations
Presentation transcript:

ICSE 2011 Comprehending the Drift II 東工大 佐伯研(incl. OB) 先鋒 Sirinut Thangthumachit 中堅 林 晋平 大将 風戸 広史

Non-Essential Changes in Version Histories by D. Kawrykow and M. P 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変更の影響を明らかにした Essential = 本質的なさま。絶対必要なさま。不可欠。

Non-Essential Differences Trivial Type Updates Rename Refactorings Trivial = 〈事・物が〉ささいな,取るに足らない,瑣末(さまつ)的な,〈人が〉浅薄な,つまらない Trivial Keyword Modifications Local Variable Extractions Whitespace and Documentation Updates Non-Essential Changes in version Histories, p.2

DiffCAT 入力: 版管理ツールからの二つのバージョンの情報 出力: Non-Essential 変更の情報、構造変更の情報、Non-Essential変更が含まれていないAST 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% 本手法では Precisionが10.5%増 メソッド更新の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 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 両種類のプログラムに適用可能 スケーラブルで高精度なツールの実現 複数の実システムで評価

基本的な考え方 メソッド呼出によるインタラクションに注目 Concern peer: インタラクションの類似度が閾値以上のメソッド対 内的(呼出元に注目),外的(呼出先に注目),プロクシ外的 (overrideの影響) Concern peer: インタラクションの類似度が閾値以上のメソッド対 類似度: 3インタラクション集合の類似度の重みつき和 集合内の各インタラクションの一致もインタラクション類似度に基づく → 止まらない再帰.近似アルゴリズムを利用 public class BankAccount { Database db; public void deposit(double value) { db.lock(); ResultSet r = db.execute(…); db.unlock(); } public void withdraw(double value) { } … 呼び出し元 BA.deposit 呼び出し先 DB.execute 後呼び出し {DB.unlock} 前呼び出し {DB.lock} BA.deposit の内的インタラクション集合: { (DB.execute, {DB.unlock}, {DB.lock}) } BA.withdraw の内的インタラクション集合: { (DB.execute, {DB.unlock}, {DB.lock}) } DB.execute の外的インタラクション集合: { (BA.deposit, {DB.unlock}, {DB.lock}), (BA.withdraw, {DB.unlock}, {DB.lock}) }

アスペクトの推薦 Peer の候補を抽出 Peer候補のスキャン Peerグラフの探索 推薦 クローン検出器 Clever [ASE09] による類似メソッド対 名前の似た(語の列として見てLCSの長い)メソッド対 共通のメソッドをoverrideするメソッド対 Peer候補のスキャン 既知のデータを使ってPeer候補の類似度を計算しソート 閾値以上の類似度をもつものはPeerとして確定させ,以降の類似度計算に反映させる Peerグラフの探索 Peer関係を枝とするグラフの島(Peer groups)をアスペクトとみなす 外的インタラクションを多く持つものを高くランク付け 推薦 Non-AO → AO: ふつうに推薦 AOプログラムの更新: 既存アスペクトを展開し,検出結果と比較

評価 速い: Peer検出は多くの対象で2分以下 正確: CBFA [ASE08]を相手に JHotDraw で比較 更新もうまくいった: 全時間で支配的なのは内部で使うクローン解析 正確: 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週間) を通じて適用し、提案手法の分類が実際に役立つことを確認

例題 呼び出しの依存性を隣接バージョン間で比較 V1S V2S V1D V2D 静的解析 動的解析 変化なし 追加 R. Holmes, D. Notkin: “Identifying Program, Test, and Environmental Changes That Affect Behaviour”, In Proc. ICSE 2011, Figure 2 より引用

提案手法 静的解析 (s), 動的解析 (d) による依存性集合を組み合わせて、4集合ベン図の15区画に分類 区画をさらに分類 追加(+), 削除(-), 変化なし(無印) 区画をさらに分類 Inconsistent Consistent Not executed Unchanged Unlikely R. Holmes, D. Notkin: “Identifying Program, Test, and Environmental Changes That Affect Behaviour”, In Proc. ICSE 2011, Figure 1 より引用

評価 無視してよい 依存性 (99.94%) 3つのOSS, 最新の各10チェンジセットに適用 R. Holmes, D. Notkin: “Identifying Program, Test, and Environmental Changes That Affect Behaviour”, In Proc. ICSE 2011, Table 2 より引用