東工大佐伯研 飯田 諒 (1) and 林 晋平 (2 & 3)

Slides:



Advertisements
Similar presentations
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Advertisements

OWL-Sを用いたWebアプリケーションの検査と生成
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
組み合わせて実施された リファクタリングの調査
Brittany Jonson†, Yoonki Song†, Emerson Murphy-Hill†, Robert Bowdidge‡
ICSE 2011 Comprehending the Drift II
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
WagbyR6.5 Update 12 PPT版 更新情報
F5 を押すか、または [スライド ショー] > [最初から] をクリックして、コースを開始してください。
IM、プレゼンス、連絡先 IM 要求を受け入れる Lync 2013 クイック リファレンス プレゼンスを設定または変更する ユーザーの検索
異種センサを用いた人の行動検知 研究概要 研究の独自性 isi担当 高汐グループ成果 スライド到着待ち yasu担当.
【ICSE2012 勉強会】 Recovering Links between an API and Its Learning Resources 担当 : 岩崎 慎司(NTTデータ)
ICSE 2011 Refactoring Your Lei I
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
Research Session 17: Formal Verification
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
コーディングパターンと キーワードを用いて生成したコードスニペットの推薦
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
リファクタリング中に生じる コンパイルエラーの自動解消手法
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
卒論の書き方: 参考文献について 2017年9月27日 小尻智子.
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
Javaプログラムの変更を支援する 影響波及解析システム
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コンパイラ 2011年10月20日
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
既存ソフトウェア中の 頻出コード片を用いた コード補完手法の提案
コーディングパターンの あいまい検索の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
手書き文字の自動認識アプリケーション 15K1013 坂本 倖輝
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
統合開発環境によって表現された 言語機構によるコードのモジュール化
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
Microsoft® Office® 2010 トレーニング
ソースコードの編集状況に応じた ソフトウェア部品の自動推薦システム
統合開発環境のための プログラミング言語拡張 フレームワーク
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
担当 : 阪大 井上研 崔 恩瀞,山中 裕樹,後藤 祥
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
プログラム理解のための 付加注釈 DocumentTag の提案
FSE/ASE勉強会 A10:Software Maintenance II
Presentation transcript:

東工大佐伯研 飯田 諒 (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