F - qwik.jp

F. Refactoring
東工大佐伯研
飯田 諒 (1) and 林 晋平 (2 & 3)
Reconciling Manual and Automatic
Refactoring
Presented by X. Ge, Q. L. DuBose, E. Murphy-Hill (ノースキャロライナ州大)
• 自動リファクタリングツールがあるにも関わらず実
際にはほとんど使用されていない
– すでに手動でリファクタリングの一部を行っているために
ツールを利用することができない
→Late Awareness
• 本論文の貢献
– 被験者実験を行い、手動のリファクタリングが一般的で、
誤りがちであることを示した
– 上記の問題点を解決する自動リファクタリングツール
BeneFactorを開発
手動リファクタリングの実際
• 12人の被験者に実際に手動でリファクタリングを
行わせた結果とアンケート結果を利用
• RQ1:どれくらい手動リファクタリングは正確?
– 正確でない
• complex refactoringにおいては90%が不正解
• non-complex refactoringにおいても21%が不正解
• RQ2:Late Awareness問題はどれくらい重要?
– さまざまな被験者が重要と回答
• 半分以上の被験者が一度手動でリファクタリングを始めれば、
8割において最後まで手動でリファクタリングを行う
RQ3:開発者のリファクタリングの作業の流れは?
• 複数の作業の流れをオートマトンで表現
• Rename Fieldリファクタリングの例
7人はフィールドの宣
言の書き換え
7人はすべての参照
を書き換え
4人は”find and replace”を利用し
てフィールド名を書き換え
• 得られた操作列を進行中のリファクタリングの検知に利用
BeneFactor
• 2つの機能
– Refactoring Detection
• 開発者の操作を観察して、進行中の操作がリファクタ
リングの操作列と一致しているかどうかを検知
– Code Modification
• 進行中の操作を元に戻し、自動でリファクタリングを適
用
• リファクタリングでない操作もうまく扱う
• ツールの評価は今後の課題
使用例:
Extract method
開発者が
cut操作を
する
メソッドの宣言
を加えるとアイ
コンが出現
アイコンを選
択することで
自動でリファ
クタリング
WitchDoctor:
IDE Support for Real-Time
Auto-Completion of Refactorings
Presented by S. R. Foster, W. G. Griswold, S. Lerner (カリフォルニア大サンディエゴ校)
手動リファクタリングを進行中に検出, 完遂
select
& cut
もしかして: Extract Method
insert
※ "WitchDoctor: IDE Support for Real-Time Auto-Completion of Refactorings",
Figs. 2, 3, 4 より引用
考慮すべき要素
• 速度
– 手動リファクタリングの進行中に検出!
• 構文解析不能なコードの考慮
– 書いている途中のコードは構文エラーを含む
• リファクタリング手順の多様性
– 手動リファクタリングの手順は人それぞれ
• 拡張性
– リファクタリングはいっぱいある
• 信頼できるIDEの再利用
– 正しいリファクタリング操作の実装は大変
提案手法
Change
Detection
((Insert, Covers), method_call)
Insert,
Delete,
Update
Covers,
CoveredBy
Specification
Matching
ASTノード
• キー入力・マウス操作が起こるたびに
プログラム行差分を取得
• 差分片と AST を対応付け
• Eclipse を用いて, 構文解析不能なプロ
グラムもそれなりに解析
• オフセットに基づく対応付け規則
• Reteアルゴリズムを利用し, 溜め込んだ変更デー
タと仕様をマッチング
• 仕様: refactoring 検出手法 [Prete'10] に基づく
• 例: Extract Method 仕様
((Delete,Covers), code_block) ∧
((Insert,Covers), method_call) ∧
((Insert,Covers), new_method)
Refactoring
Handling
∈
• 仕様にマッチした変更を巻き戻し
• Eclipse のリファクタリングを自動で実行
※ "WitchDoctor: IDE Support for Real-Time Auto-Completion of Refactorings",
Figs. 6, 7 より引用
評価
•
•
対象: 3 OSS (Eclipse Compare, Eclipse JFace, Struts)
Extract Method を様々な手順で実行する bot を実行
– 手順をランダムに生成し,50ミリ秒ごとに自動打鍵
– おちゃめ: しばしばセミコロン ; や閉じブレース } を打ち忘れる
結果1: かなり正確だった
結果2: 十分速かった
200
(人間のタイピング速度)
BeneFactor と WitchDoctor
どこが違うの?
• BeneFactor 論文には少し書いてある
– 「WitchDoctor はコード変更のみに注目している
が, BeneFactor はコピペ等の開発者の振る舞い
も見ている」
Use, Disuse, and Misuse of Automated
Refactorings
Presented by M. Vakilian, N. Chen, S. Negara, B. A. Rajkumar, B. P. Bailey, R. E. Johnson (UIUC)
開発者の観測・アンケートに基づき
自動リファクタリングツールの利用のされ方を調査
• リファクタリングツールはあまり使われていない
[Murphy-Hill,
ICSE'09]
• 目的: 自動リファクタリングツールの利用について
のより深い理解
– 開発者26人, 1,268時間の開発データを分析
• 学内外, 7人が経験年数10年以上
• うち9人にインタビュー
– Use, Disuse, Misuse の観点で分析
※ 詳細版が TR として公開されてます http://hdl.handle.net/2142/27730
http://codingspectator.cs.illinois.edu/
[PLATEAU'11@SPLASH]
[ECOOP'12]
CodingSpectator
• Eclipse での全リファク
タリング操作を記録
extract
いつ?
種類
成功した?
失敗した?
キャンセルした?
コンフィグレーション
コード片
QA使った?
問題なく完了したよ
ウィザードの進行状況
全コード編集操作を記録
する CodingTracker の出
力も併用
※ "Use, Disuse, and Misuse of Automated Refactorings", Fig. 1 より引用
Use (使われる)
• Quick Assist (QA) はよく使われている
• 35%のリファクタリン
グがQA経由
• リネームを除けば
65%
• 知見
– 他の IDE (Intelli○ IDEA, Net○eans, ...) も同様の機能を
– 臭いの検出→除去 も同様に手軽に実行されるべき
※ "Use, Disuse, and Misuse of Automated Refactorings", Fig. 2 より引用
Disuse (使われない)
•
•
•
•
•
ニーズに乏しい (Pull up, Pull down)
存在を知らなかった (Generalize Declared Type など)
名前が悪い (Extract Class など)
信用できない
挙動が予測できない
– 複雑
– プレビューが使いづらい
• 設定が煩雑
• 知見
– 訓練が必要, 新しいレビュー手段が必要, シームレスな設
定方法, ...
Misuse (間違って利用)
• 開発者は, 警告やエラーが出ていてもリファクタリングを
実行する (警告: 88%, エラー: 68%)
1 をローカル変数 i として抽出
→ 変数名の重複で振る舞い変化
警告が出ても開発者はリファクタリ
ングを強行(5/6回)
- 設定のし直しが面倒,後で直せる, ...
• "振る舞いが保存されているか" よりもむしろ "結果が予
測できるか", "インタラクティブ性" のほうが大事
– 我々は振る舞い保存の監獄から抜け出すべき
リファクタリングツール利用における問題の多くはユーザビリティ
※ "Use, Disuse, and Misuse of Automated Refactorings", Fig. 5 より引用