Download presentation
Presentation is loading. Please wait.
1
ICSE 2011 Refactoring Your Lei I
Refactored! 東工大 佐伯研(incl. OB) 先鋒 Sirinut Thangthumachit 中堅 林 晋平 大将 風戸 広史
2
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倍速い 正確で、変換ミスはしない
3
事例 Transformation for Class Immutability, Figure 1より引用 Mutating Method
入出オブジェクト → Clone 内部手続 呼出とか Transformation for Class Immutability, Figure 1より引用
4
Immutator プログラム解析 事前条件確認 変換 全体ではなく、注目するクラスとその呼出メソッドだけ
親クラスは Mutable 状態を持たない Mutable 状態を追加できるサブクラスを持たない 変換したいメソッドの戻り値は void、かつ Override ではない 入出オブジェクトは clone() を持つ、または追加可能 変換 クラスとフィールドを final に コンストラクタを生成 ターゲットメソッドを変換 入出オブジェクトを clone() に
5
評価 適用可能性 対象 Jutil Coal 0.3, jpaul 2.5.1, Apache Commons Collections 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 性能 ひとつのクラス変換は2.33秒、 人間は8クラスで220分、約700倍 Macbook Pro 4.1, 2.4GHz Core 2 Duo Transformation for Class Immutability, Table 1, 2, 3より引用
6
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 に定義 & 自動化
7
パイプリファクタリング: 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 より引用
8
リファクタリングと臭い 9種類のリファクタリング 10種類(小分類もカウントすれば18)の臭い
既存のパイプにどういった種類の臭いがあるか のデータも提示 E.g. 32%のパイプにDuplicate Strings 被験者実験 RQ1: 臭いパイプよりも臭くないパイプのほうを好む Yes: 24% vs. 63% RQ2: 臭いパイプは臭くないパイプよりも理解が困難 Yes: 正解率67% vs. 正解率80%
9
評価 既存パイプの多くの臭いを除去できた 複数の臭いがある場合: 貪欲(Greedy)な解決が有効
“Refactoring Pipe-like Mashups for End-User Programmers”, Table 2 より引用
10
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 ロックを使い分けた
11
例題 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 より引用
12
提案手法 (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 より引用
13
評価 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 より引用
14
Photo Credit
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.