東工大佐伯研 飯田 諒 (1) and 林 晋平 (2 & 3) F. Refactoring 下記の "[F]" をセッションIDに,"Refactoring" をセッション名に置換してください. <twitter> se_reading:#sereading [F] --- Refactoring --- </twitter> 東工大佐伯研 飯田 諒 (1) and 林 晋平 (2 & 3)
Reconciling Manual and Automatic Refactoring Presented by X. Ge, Q. L 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 開発者の操作を観察して、進行中の操作がリファクタリングの操作列と一致しているかどうかを検知 Code Modification 進行中の操作を元に戻し、自動でリファクタリングを適用 リファクタリングでない操作もうまく扱う ツールの評価は今後の課題
アイコンを選択することで自動でリファクタリング 使用例: Extract method 開発者がcut操作をする メソッドの宣言を加えるとアイコンが出現 アイコンを選択することで自動でリファクタリング
アイコンを選択することで自動でリファクタリング 使用例:Extract method 開発者がcut操作をする メソッドの宣言を加えるとアイコンが出現 アイコンを選択することで自動でリファクタリング
Presented by S. R. Foster, W. G. Griswold, S. Lerner (カリフォルニア大サンディエゴ校) 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の再利用 手動リファクタリングの進行中に検出! 構文解析不能なコードの考慮 書いている途中のコードは構文エラーを含む リファクタリング手順の多様性 手動リファクタリングの手順は人それぞれ 拡張性 リファクタリングはいっぱいある 信頼できるIDEの再利用 正しいリファクタリング操作の実装は大変
Specification Matching 提案手法 キー入力・マウス操作が起こるたびに プログラム行差分を取得 差分片と AST を対応付け Eclipse を用いて, 構文解析不能なプログラムもそれなりに解析 オフセットに基づく対応付け規則 Change Detection ((Insert, Covers), method_call) Insert, Delete, Update Covers, CoveredBy ASTノード Reteアルゴリズムを利用し, 溜め込んだ変更データと仕様をマッチング 仕様: refactoring 検出手法 [Prete'10] に基づく 例: Extract Method 仕様 Specification Matching ((Delete,Covers), code_block) ∧ ((Insert,Covers), method_call) ∧ ((Insert,Covers), new_method) ∈ Refactoring Handling 仕様にマッチした変更を巻き戻し Eclipse のリファクタリングを自動で実行
評価 200 対象: 3 OSS (Eclipse Compare, Eclipse JFace, Struts) ※ "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 どこが違うの? 「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
CodingSpectator Eclipse での全リファクタリング操作を記録 [PLATEAU'11@SPLASH] http://codingspectator.cs.illinois.edu/ CodingSpectator [ECOOP'12] extract Eclipse での全リファクタリング操作を記録 いつ? 種類 成功した? 失敗した? キャンセルした? コンフィグレーション コード片 QA使った? 問題なく完了したよ 全コード編集操作を記録する CodingTracker の出力も併用 ウィザードの進行状況 ※ "Use, Disuse, and Misuse of Automated Refactorings", Fig. 1 より引用
Use (使われる) Quick Assist (QA) はよく使われている 知見 35%のリファクタリングがQA経由 他の IDE (Intelli○ IDEA, Net○eans, ...) も同様の機能を 臭いの検出→除去 も同様に手軽に実行されるべき 35%のリファクタリングがQA経由 リネームを除けば65% ※ "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 より引用
Credits Witch doctor - Wikipedia http://en.wikipedia.org/wiki/Witch_doctor