ICSE 2011 Refactoring Your Lei I

Slides:



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

ICSE 2011 Comprehending the Drift II
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
東工大佐伯研 飯田 諒 (1) and 林 晋平 (2 & 3)
アルゴリズムとプログラミング (Algorithms and Programming)
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
Heap Cloning: Enabling Dynamic Symbolic Execution of Java Programs
変数間データフローグラフを用いた ソースコード間の移動支援
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
既存Javaプログラムの バイトコード変換による 機能分散
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
進捗 Javaバイトコード変換による 細粒度CPU資源管理
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
リファクタリング中に生じる コンパイルエラーの自動解消手法
ポインタ解析におけるライブラリの スタブコードへの置換の効果
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
Java Bytecode Modification and Applet Security
ソフトウェアメトリクスと メソッド内の構造を用いた リファクタリング支援手法の提案
Javaプログラムの変更を支援する 影響波及解析システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
Java8について 2014/03/07.
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
Java における 先進的リフレクション技術
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
第8回放送授業.
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
保守請負時を対象とした 労力見積のためのメトリクスの提案
dcNavi:デバッグ支援のための グラフベース推薦システム
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
プログラム分散化のための アスペクト指向言語
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
統合開発環境のための プログラミング言語拡張 フレームワーク
JAVA入門⑥ クラスとインスタンス.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
担当 : 阪大 井上研 崔 恩瀞,山中 裕樹,後藤 祥
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

ICSE 2011 Refactoring Your Lei I Refactored! 東工大 佐伯研(incl. OB) 先鋒 Sirinut Thangthumachit 中堅 林 晋平 大将 風戸 広史

Transformation for Class Immutability by F. Kjolstad, D. Dig, G Transformation for Class Immutability by F. Kjolstad, D. Dig, G. Acevedo, and M. Snir Mutable Class → Immutable Class 面倒 時間かかる ミスしやすい 自動化しよう 速くて、手動より効率がいい 本研究 自動化し、ツールを作った 人手より700倍速い 正確で、変換ミスはしない

事例 Transformation for Class Immutability, Figure 1より引用 Mutating Method 入出オブジェクト → Clone 内部手続 呼出とか Transformation for Class Immutability, Figure 1より引用

Immutator プログラム解析 事前条件確認 変換 全体ではなく、注目するクラスとその呼出メソッドだけ 親クラスは Mutable 状態を持たない Mutable 状態を追加できるサブクラスを持たない 変換したいメソッドの戻り値は void、かつ Override ではない 入出オブジェクトは clone() を持つ、または追加可能 変換 クラスとフィールドを final に コンストラクタを生成 ターゲットメソッドを変換 入出オブジェクトを clone() に http://refactoring.info/tools/Immutator

評価 適用可能性 対象 Jutil Coal 0.3, jpaul 2.5.1, Apache Commons Collections 3.2.1. 110/346 *100 = 33.74% 正確性 Table1の実験、変換後にテストを行い、全部成功 Table2で 6つのOSS内のImmutable変換に26ミス発見 Table3で 6人のプログラマ、8クラスを変換してもらうと、51ミス Jutil Coal 0.3,  jpaul 2.5.1 Apache Commons Collections 3.2.1. 性能 ひとつのクラス変換は2.33秒、 人間は8クラスで220分、約700倍 Macbook Pro 4.1, 2.4GHz Core 2 Duo Transformation for Class Immutability, Table 1, 2, 3より引用

Refactoring Pipe-like Mashups for End-User Programmers by K. T Refactoring Pipe-like Mashups for End-User Programmers by K. T. Sotlee and S. Elbaum Yahoo! Pipes に代表されるパイプ式のマッシュアップをリファクタリング SE の知見であるリファクタリングがエンドユーザプログラミングに適用された初の試み 貢献 マッシュアップ例8051個から蔓延の激しい臭いを特定 臭いの影響を被験者評価 臭いの検出/リファクタリングを formal に定義 & 自動化

パイプリファクタリング: Before After パイプの臭い: Duplicate Modules: 重複したモジュール Unnecessary Module: 不要なモジュール Isomorphic Paths: 同型のパス Duplicate Strings: 重複するフィールド値 パイプユニッシュリファクタリング: Collapse Duplicate Paths: 重複パスを束ねる Remove Non-Contributing Modules: 不要を削除 Extract Local Subpipe: 共通パイプとして集約 Pull Up Module: 重複フィールドを括りだし 1 1 4 2 3 3 4 Refactor “Refactoring Pipe-like Mashups for End-User Programmers”, Figure 1, 2 より引用

リファクタリングと臭い 9種類のリファクタリング 10種類(小分類もカウントすれば18)の臭い 既存のパイプにどういった種類の臭いがあるか のデータも提示 E.g. 32%のパイプにDuplicate Strings 被験者実験 RQ1: 臭いパイプよりも臭くないパイプのほうを好む Yes: 24% vs. 63% RQ2: 臭いパイプは臭くないパイプよりも理解が困難 Yes: 正解率67% vs. 正解率80%

評価 既存パイプの多くの臭いを除去できた 複数の臭いがある場合: 貪欲(Greedy)な解決が有効 “Refactoring Pipe-like Mashups for End-User Programmers”, Table 2 より引用

Refactoring Java Programs for Flexible Locking by M. Schäfer, M Refactoring Java Programs for Flexible Locking by M. Schäfer, M. Sridharan, J. Dolby, F. Tip 目的: Java プログラムの並行性を向上させるために、状況に応じて排他制御の機構を容易に変更したい おもな貢献 Java 組み込みのオブジェクトモニタ (synchronized) をjava.util.concurrent API (ReentrantLock / ReadWriteLock) に置き換えるリファクタリングアルゴリズムを定義 支援ツール ReLocker によりその適用を自動化 既存 OSS に支援ツールを適用し、80%以上のオブジェクトモニタが ReentrantLock に変更できることを示した。 ReadWriteLock を人手で導入したプログラムと比較して、ほとんどの場合で正しく Read/Write ロックを使い分けた

例題 ReentrantLock を ReadWriteLock に置き換え synchronized 修飾子を ReentrantLock に置き換え // これもチェックする! SyncMap sm = new SyncMap(map); synchronized(sm) { … } Max Schäfer, M. Sridharan, J. Dolby, F. Tip : “Refactoring Java Programs for Flexible Locking”, In Proc. ICSE 2011, Figure 1 より引用

提案手法 (Convert to Reentrant Lock) How: モニタ式 { synchonized 文, notify(), wait(), etc. } をロック API の呼び出しに置換 Where: ロックオブジェクト l(e) をどこに導入するか オブジェクト e の型となるクラスにインスタンスフィールドを追加 クラス e が表すクラスに静的フィールドを追加 非共有のフィールド e = e’.f のとき、e の型となるクラスに f の兄弟としてインスタンスフィールドを追加 Max Schäfer, M. Sridharan, J. Dolby, F. Tip : “Refactoring Java Programs for Flexible Locking”, In Proc. ICSE 2011, Figure 2 より引用

評価 Convert to Reentrant Lock リファクタリング Convert to Read-Write Lock リファクタリング すでに Read/WriteLock を使用しているプログラムをいったん ReentrantLock に戻し、ツールがどの程度 Read ロックの使用を推論できたか (正解率) Max Schäfer, M. Sridharan, J. Dolby, F. Tip : “Refactoring Java Programs for Flexible Locking”, In Proc. ICSE 2011, Table 1, 2 より引用

Photo Credit http://www.flickr.com/photos/lady_fox/3986972403/