ICSEʼ’14勉強会 (2014年年7⽉月22⽇日) 担当者: ⽊木津 栄⼆二郎郎 (kitsu@fse.cs.ritsumei.ac.jp) Y1 Manual Refactoring Changes With Automated Refactoring Valida8on Xi Ge, Emerson Murphy-‐Hill 目的 手作業によるリファクタリングを 短い時間で正確に出来るようにする 貢献 本手法,GhostFactorの提案と実装 8人の被験者をつかった評価実験 効果 本手法を使用しない場合と比較して, 正確さにおいて66.7ポイント向上した 問題背景 ・手作業によるリファクタリングはエラーを起こす ・自動リファクタリングツールは使いにくい 提案手法 手動リファクタリングを監視し, エラー(条件違反)をリアルタイムに通知 GhostFactor コードのスナップショット Ac8ve Editor 警告 Refactoring Warning 条件違反 History Saving Condi8on Checking スナップショット のリスト Refactoring Detec8on 検出されたリファクタリング ・メソッドの抽出 対応している ・メソッドのシグネチャの変更 リファクタリング ・メソッドのインライン化 評価実験 被験者8名をツール使用・不使用グループに分け 6つのコードに対してリファクタリングしてもらう RQ1 : GhostFactorで正確にリファクタリングできるか ツール不使用グループ : 7/24 ツール使用グループ : 23/24 ツールを使用することで 正確さが66.7ポイント向上 RQ2 : GhostFactorで素早くリファクタリングできるようになるか 作業時間を計測し, 使用・不使用に有意差なし マン・ホイットニーのU検定を適用 RQ3 : 手動リファクタリングを支援するために GhostFactorをどのように改善できるか 「利用者の意図するリファクタリングを予測し リファクタリングを終える前にエラーを提示する」 ICSEʼ’14勉強会 (2014年年7⽉月22⽇日) 担当者: ⽊木津 栄⼆二郎郎 (kitsu@fse.cs.ritsumei.ac.jp) Alternate Refactoring Paths Reveal Usability Problems Mohsen Vakilian, Ralph E. Johnson 目的 自動リファクタリングツールにおける ユーザビリティ問題の調査 貢献 臨界事象法を応用した分析手法 大量のデータ収集に基づく調査 効果 15のユーザビリティ問題を発見 そのうち13が未発見の問題 Y2 自動リファクタリングにおける臨界事象の収集 臨 ・ウィザードをいつ・どのように操作したか (naviga8on history) 界 ・リファクタリングを実行したかどうか (invoca8on method) 事 ・選択したコード片とその周辺のスライス (selec8on) 象 ・ツールが提示した,問題を表すメッセージ (messages) 開発者 記録 Coding Spectator 成功時の履歴(primary path)だけでなく, 取り消し・再実行も記録(alternate path) ⇒リファクタリング前の試行錯誤も記録 5分以上 時系列 直前の事象から5分以内に行われた事象をグルーピング 臨界事象データの分析 リファクタリング履歴 (36人3ヶ月2320時間) 1.メッセージごとに提示された回数を計測 ⇒Eclipseリファクタリングツールの提示メッセージは83種類 2.リファクタリングバッチを手作業で抽出 ⇒20分以内に行われた事象をリファクタリングバッチとみなす 3.145個のリファクタリングバッチを手作業で検査 ⇒15種類のユーザビリティ問題を発見,そのうち13が未発見 ⇒Eclipse開発者はそれらを 本手法がユーザビリティ 問題として認識しており 問題を明らかにした 4種類は修正済み ICSEʼ’14勉強会 (2014年年7⽉月22⽇日) 担当者: ⽊木津 栄⼆二郎郎 (kitsu@fse.cs.ritsumei.ac.jp) Y3 A Study and Toolkit for Asynchronous Programming in C# Semih Okur, David L. Hartveld, Danny Dig, Arie van Deursen 目的 C#非同期プログラミングにおける 古い記法(APM-‐based)や 新しい記法(async/await)の誤用を正す 効果 本手法によるリファクタリングを行った 314パッチを開発者に認めてもらった 理由:研究の全体的な完成度の高さ 実態調査,手法とツール,評価実験と実績 実態調査 WindowsPhone7,8で動作するアプリの プロジェクトファイルをOSSから収集 総アプリ数 1378 総行数 12000 総開発者数 3376 RQ1:開発者はどのような方法で非同期プログラミングを利用するか • 古い記法(APM)が最も広く使われている Answer • WP8の半数で新しい記法(async/await)が使われていた • WP7で新しい記法は10プロジェクトでしか使われていなかった RQ2:開発者はasync/await記法をどのくらい誤用しているか Answer 誤用パターン 事例数 メソッド% アプリ% Fire & Forget Methods 460 19% 76% Unnecessary async/await Methods 324 14% 26% Using Long-‐running Opera8ons under Async Methods 115 5% 22% Unnecessary Capturing Context 1770 74% 86% 自動リファクタリングを行うツールを2つ開発 1. ASYNCIFIER「古い記法を新しい記法へ変換」 2. CORRECTOR「新しい記法の誤用を正す(P2,3,4のみ)」 4つの観点でツールを評価 1. Applicability 2. Code Impact 3. Tool Performance 4. Usefulness of Patched Code 「事例全体でツール適用が成功した割合」 「1つの事例で平均何行書き換えたか」 「1つの事例で平均何ミリ秒掛かったか」 「それぞれのプロジェクトにパッチを提案し, どのくらいのパッチを開発者が認めたか」 ASYNCIFIER CORRECTOR Applicability 54% 100%(P2,3,4のみ) Code Impact 28.9行 2.1行 Tool Performance 508ミリ秒 47ミリ秒 Usefulness of Patched Code 28事例 286事例 ICSEʼ’14勉強会 (2014年年7⽉月22⽇日) 担当者: 丸⼭山 勝久 (maru@cs.ritsumei.ac.jp) Y4 Reuse-‐‑‒Oriented Reverse Engineering of Functional Components form X86 Binaries Dohyeong Kim, William N. Summer, Xiangyu Zhang, Dongyan Xu Hira Agrawal ⽬目的 バイナリコードにおける再利利⽤用の容易易化 l レガシーシステムの⼀一部の機能を⼊入れ替えたい バイナリコードにおける機能抽出の容易易化 l 悪意のあるコードにおいて特定の機能に対して セキュリティ解析を適⽤用したい Coverageに基づく⼿手法※1に⽐比べて機能の特定が狭い 効果 ※1 ある機能に関して実⾏行行された部分 ∩ 他の機能に関して実⾏行行されなかった部分 アプローチ X86バイナリコード Dual Slicing プログラムの実⾏行行履履歴 (特定のフィーチャーに関する) 関数の特定 call_mailer: MOV ecx, [ebx] … Interface Casting 関数 値や参照先の固定化 call_mailer: MOV ecx, 0x7ffee00 … アドレス値 Dual Slicing ≒ 異異なる⼊入⼒力力に対して作成したdynamic slicesで異異なる 部分(値や条件)を抽出 ※正確な定義は論論⽂文を参照 dynamic slice = { .. , 18, 36, 37, 38, 42, 43 } - Figure 4より引⽤用 – 17 18 19 command = read(stdin) if (command == SEND) { pine_send(); 28 pine_send() { 31 editor(&env, &body); 35 editor(ENVELOPE* env, BODY* body) { 36 env->recipient = read(stdin); 37 env->subject = read(stdin); 38 env->text = read(stdin); 39 } 32 call_mailer(smtp_server, env, body); 41 call_mailer(…) { 42 s = connect(smtp_server); 43 send_to(s, …); slice criterion 46 } SPES 2011 実⾏行行1 の値 実⾏行行2 の値 SEND SEND R1 S1 B1 R2 S2 B2 1 1 Interface Casting ≒ 実⾏行行時の値に応じて,レジスタの値や参照先を固定化 - Figure 6より引⽤用 – 1 call_mailer(METAENV *header, …) { 3 smtp_mail(…, header->env, …); Concretization } 12 smtp_mail(…, EMVELOP *env, …) { 14 rfc822_output_header_line(…, env->subject); 642182: MOV eax, [ecx + 8] if ecx + 8 == 0x7ffab40: MOV ecx, 0x7fff080 else: MOV ecx, [ebx + 8] } 21 rfc822_output_header_line(…, char *subject) { … 23 while(n-- > 0 && (**d = *subject++) != ‘¥0’) 664fc9: MOV eax, [edx] SPES 2011 } if 0x7fff080 ≤ edx < 0x7fff080 + 10: MOV eax, nSubject[edx-0x7fff080] else: MOV eax, [edx] Redirection
© Copyright 2025 Paperzz