開発作業のモニタリングによる コードクローン集約支援環境の構築

Slides:



Advertisements
Similar presentations
ゲームプログラミング講習 第2章 関数の使い方
Advertisements

サービス管理責任者等研修テキスト 分野別講義    「アセスメントと        支援提供の基本姿勢」 <児童発達支援管理責任者> 平成27年10月1日.
ヒトの思考プロセスの解明を目的とするワーキングメモリの研究
第27講 オームの法則 電気抵抗の役割について知る オームの法則を使えるようにする 抵抗の温度変化を理解する 教科書P.223~226
コラッツ予想の変形について 東邦大学 理学部 情報科 白柳研究室 山中 陽子.
コンパイラ 第3回 字句解析 ― 決定性有限オートマトンの導出 ―
第5章 家計に関する統計 ー 経済統計 ー.
公共財 公共経済論 II no.3 麻生良文.
VTX alignment D2 浅野秀光 2011年12月15日  放射線研ミーティング.
冷却フランシウム原子を用いた 電子の永久電気双極子能率探索のための ルビジウム磁力計の研究
生命情報学 (8) スケールフリーネットワーク
前半戦 「史上最強」風 札上げクイズ.

認知症を理解し 環境の重要性について考える
フッ化ナトリウムによる洗口 2010・9・13 宮崎市郡東諸県郡薬剤師会 学校薬剤師  日高 華代子.
食品の安全性に関わる社会システム:総括 健康弱者 ハイリスク集団 HACCP (食肉処理場・食品工場) 農場でのQAP 一般的衛生管理
規制改革とは? ○規制改革の目的は、経済の活性化と雇用の創出によって、   活力ある経済社会の実現を図ることにあります。
地域保健対策検討会 に関する私見(保健所のあり方)
公共政策大学院 鈴木一人 第8回 専門化する政治 公共政策大学院 鈴木一人
医薬品ネット販売規制について 2012年5月31日 ケンコーコム株式会社.
平成26年8月27日(水) 大阪府 健康医療部 薬務課 医療機器グループ
平成26年度 呼吸器学会からの提案結果 (オレンジ色の部分が承認された提案) 新規提案 既収載の変更 免疫組織化学染色、免疫細胞化学染色
エナジードリンクの危険性 2015年6月23日 経営学部市場戦略学科MR3195稲沢珠依.
自動吸引は 在宅を変えるか 大分協和病院 院長         山本 真.
毎月レポート ビジネスの情報 (2016年7月号).
医療の歴史と将来 医療と医薬品産業 個人的経験 3. 「これからの医療を考える」 (1)医薬品の研究開発 -タクロリムスの歴史-
社会福祉調査論 第4講 2.社会調査の概要 11月2日.
2015年12月28日-2016年3月28日 掲載分.
2010度 民事訴訟法講義 補論 関西大学法学部教授 栗田 隆.
腫瘍学概論 埼玉医科大学国際医療センター 包括的がんセンター 緩和医療科/緩和ケアチーム 奈良林 至
“企業リスクへの考え方に変化を求められています。 トータルなリスクマネジメント・サービスをプロデュースします。“
情報漏えい 経済情報学科 E  西村 諭 E  釣 洋平.
金融班(ミクロ).
第11回 2009年12月16日 今日の資料=A4・4枚+解答用紙 期末試験:2月3日(水)N2教室
【ABL用語集】(あいうえお順) No 用語 解説 12 公正市場価格 13 債権 14 指名債権 15 事業収益資産 16 集合動産 17
基礎理論(3) 情報の非対称性と逆選択 公共政策論II No.3 麻生良文.
浜中 健児 昭和42年3月27日生まれ 東京都在住 株式会社ピー・アール・エフ 代表取締役 (学歴) 高 校:千葉県立東葛飾高校 卒業
COPYRIGHT(C) 2011 KYUSHU UNIVERSITY. ALL RIGHTS RESERVED
Blosxom による CMS 構築と SEO テクニック
記入例 JAWS DAYS 2015 – JOB BOARD 会社名 採用職種 営業職/技術職/その他( ) 仕事内容 待遇 募集数
ネットビジネスの 企業と特性 MR1127 まさ.
Future Technology活用による業務改革
ネットビジネス論(杉浦) 第8回 ネットビジネスと情報技術.
g741001 長谷川 嵩 g740796 迫村 光秋 g741000 西田 健太郎 g741147 小井出 真聡
自然独占 公共経済論 II no.5 麻生良文.
Autonomic Resource Provisioning for Cloud-Based Software
Webショップにおける webデザイン 12/6 08A1022 甲斐 広大.
物理的な位置情報を活用した仮想クラウドの構築
ハイブリッドクラウドを実現させるポイントと SCSKのOSSへの取組み
寺尾 敦 青山学院大学社会情報学部 第12回 情報デザイン(4) 情報の構造化と表現 寺尾 敦 青山学院大学社会情報学部
【1−1.開発計画 – 設計・開発計画】 システム開発計画にはシステム開発を効率的、効果的に実行する根拠(人員と経験、開発手順、開発・導入するシステム・アプリケーション・サービス等)を記述すること。 システム開発の開始から終了までの全体スケジュールを記載すること。 アプリケーション機能配置、ソフトウェア、インフラ構成、ネットワーク構成について概要を示すこと。
6 日本のコーポレート・ガバナンス 2008年度「企業論」 川端 望.
急成長する中国ソフトウェア産業 中国ソフトウェアと情報サービス産業の規模 総売上高は5年間で約5.3倍の成長
米国ユタ州LDS病院胸部心臓外科フェローの経験
公益社団法人日本青年会議所 関東地区埼玉ブロック協議会 JCの情熱(おもい)育成委員会 2011年度第1回全体委員会
次世代大学教育研究会のこれまでの活動 2005年度次世代大学教育研究大会 明治大学駿河台校舎リバティタワー9階1096教室
子どもの本の情報 大阪府内の協力書店の情報 こちらをクリック 大阪府内の公立図書館・図書室の情報
第2回産業調査 小島浩道.
〈起点〉を示す格助詞「を」と「から」の選択について
広東省民弁本科高校日語専業骨幹教師研修会 ①日本語の格助詞の使い分け ②動詞の自他受身の選択について   -日本語教育と中日カルチャーショックの観点から- 名古屋大学 杉村 泰.
■5Ahバッテリー使用報告 事例紹介/東【その1】 ■iphon4S(晴れの昼間/AM8-PM3) ◆約1時間で68%⇒100%
『ワタシが!!』『地域の仲間で!!』 市民が始める自然エネルギー!!
ポイントカードの未来形を形にした「MUJI Passport」
SAP NetWeaver を支える Microsoft テクノロジーの全貌 (Appendix)
ガイダンス(内業) 測量学実習 第1回.
Python超入門 久保 幹雄 東京海洋大学.
熱力学の基礎 丸山 茂夫 東京大学大学院 工学系研究科 機械工学専攻
京都民医連中央病院 CHDF学習推進委員会
資料2-④ ④下水道.
Accessによる SQLの操作 ~実際にテーブルを操作してみよう!~.
Presentation transcript:

開発作業のモニタリングによる コードクローン集約支援環境の構築 ○沼田聖也1 吉田則裕2 崔恩瀞3 井上克郎1 1大阪大学 2名古屋大学 3奈良先端科学技術大学院大学 開発作業のモニタリングによるコードクローン集約支援環境の構築という題目で,大阪大学の沼田が発表いたします.よろしくお願いします.

②本環境が対応するコードクローンを検出し,新規関数に集約するように推薦する. 研究概要 開発作業をモニタリングし,メソッド抽出の集約パターンを見つけ,そのコードクローンの同時集約の支援環境を構築する. まず最初に本研究の概要を述べます.本研究では,統合開発環境Eclipseを利用している開発者の作業内容をモニタリング・分析し,メソッド抽出の集約パターンを見つけ,そのコードクローンの同時集約の支援環境を構築します. ①開発者がメソッド抽出リファクタリング を行う. ②本環境が対応するコードクローンを検出し,新規関数に集約するように推薦する.

コードクローン コードクローンの存在は開発・保守コスト増大の要因 同様の修正の検討が必要 ソースコードA ソースコードB 修正 クローンペア コードクローンとは,コピーアンドペースト等が原因で作られる,ソースコード上で互いに一致した,あるいは類似した部分を持つコード片のことを言います.また,コードクローンであるものの内,互いにコードクローンである者のことをクローンペアと呼びます.この,コードクローンの存在は開発および保守コストを増大させる大きな要因の一つとされています.例えば,このようにソースコードAとソースコードBの中にコードクローンが存在したとします.そして,ソフトウェアの保守作業の中でそのコードクローンの一つに対して,バグ等が発見されて修正を行ったとします.すると,その他のコードクローンにも同様のバグ等が含まれる可能性があるため,同様の修正の検討が必要となることが多々あります.これによって,ソフトウェアの保守コストというものが増大してしまいます. 同様の修正の検討が必要

コードクローンの集約 集約により開発・保守コストを削減 コードクローンの存在は開発・保守コスト増大の要因 ソースコードA ソースコードB ソースコードC コード クローンの集約 新規関数 コードクローン コードクローン コードクローンの量を減らすことができれば,その分コード片の修正後に同様の修正を検討するべき箇所は減ることになります.コードクローンを,新たに関数等を用意して,その単一の関数に集約することを,コードクローンの集約と言います.この,コードクローンの集約を適切に行うことにより,コードクローンの量を減らすことができ,開発,保守コストを大幅に削減することにつながります. クローンペア 集約により開発・保守コストを削減

先行研究:Clone Notifier[1]  コードクローン変更管理システム ソースコードの 更新をコミット ソースコードの取得 バージョン管理システム コードクローンの集約支援において,先行研究にclone notifierというツールを使ったコードクローン変更管理システムがあります.このシステムは,ソースコードの2つのバージョン間でコードクローンに変更があったものを通知するシステムです.コードクローンの変更とは,前バージョンでコードクローンでは無かったものが,新しいバージョンではコードクローンになったり,逆に,前バージョンでコードクローンであったものがコードクローンでは無くなったりというものを表します.この図がclone notifierの動作を表します.開発者は,ソースコードをバージョン管理システムで管理し,ソースコードに対して修正を加えるとソースコードの更新をコミットし,バージョン管理システムを更新します.そして,Clone notifierはバージョン管理システムから2つのバージョンのソースコードを取得して,その間にコードクローンの変更があればその情報を開発者に通知します.そのコードクローンの変更情報を基に,開発者はコードクローンの集約を検討して行うことができます. 開発者 コードクローンの変更情報送信 Clone Notifier [1]山中 裕樹, 崔 恩瀞, 吉田 則裕, 井上 克郎, 佐野 建樹: "コードクローン変更管理システムの開発と実プロジェクトへの適用", 情報処理学会論文誌, Vol.54, No.2, pp.883-893, 2013

先行研究:Clone Notifier[1] 企業のソフトウェア開発に適用実験を行った. Java,350ファイル,約12万行 40日間,Clone Notifierの結果を1日1回開発者に通知した.結果,10個のコードクローンの集約を支援した. いずれのコードクローンについても,開発者は Clone Notifierの通知無しでは気づかないものであった. しかし,Clone Notifierはコミット間の分析を行う. コミットされたコードを分析する必要があるため,作業内容に応じて適切な時期に支援を行うことが難しい. 先行研究では,企業のソフトウェア開発にclone notifierを導入して適用実験を行いました.40日間,clone notifierの結果を1日1回開発者に通知し,ソフトウェアの保守に役立つかどうか調査しました.結果として,clone notifierは10個のコードクローンの集約を支援しました.また,いずれのコードクローンについても,clone notifierの通知無しでは開発者が気づかないものであったこともわかっています.しかし,clone notifierはコミット間の分析を行うものであり,コミットされたコードを分析する必要があるため,作業内容に応じて適切な時期に支援を行うことが難しいという問題点があります.

先行研究:Clone Notifier[1]  開発者の作業内容に応じて適切な時期に支援 バージョン管理 システム ソースコードの更新を コミット ソースコードを取得 Clone Notifier 開発者 コードクローンの 変更情報を送信する コードクローンの集約支援手法には,開発者の作業内容に応じて適切な時期に支援を行うことも求められます.Clone Notifierでは,バージョン管理システムにコミットされているソースコードに対して分析を行います.バージョン管理システムに開発者がソースコードをコミットする際には,コーディングを終え,そのソースコードに対してテストまで終えていることが多くあります.よって,開発者はClone Notifierから通知された情報を用いて,コードクローンの集約作業を実際に行おうとすると,作業の後戻りが必要になり,また,その作業に関する記憶も薄れている可能性もあるため,記憶を参照しながらコードクローンの集約を行うにも,コストが増大してしまいます. 作業の後戻りが必要になり保守コストが大きくなる[1] [1]山中 裕樹, 崔 恩瀞, 吉田 則裕, 井上 克郎, 佐野 建樹: "コードクローン変更管理システムの開発と実プロジェクトへの適用", 情報処理学会論文誌, Vol.54, No.2, pp.883-893, 2013

研究動機 開発者の作業内容に応じて適切な時期に支援 ・コミットを挟む必要がない ・作業の後戻りが不要になる 開発者の 作業内容を  開発者の作業内容に応じて適切な時期に支援 開発者の 作業内容を モニタリングする バージョン管理 システム コーディング,テストをし, コミットする 本環境 開発者 集約支援を 提供する そこで,本研究では,開発者の作業内容をモニタリングして,その作業内容に応じて,適切な時期に支援を行うことを目指しております.Clone Notifierのようにコミット後のソースコードに対して分析するのではなく,開発者の作業内容を常にモニタリングします.そして,その作業内容に応じて開発者に対して集約支援を提供します.それにより,コミットを挟む必要なく,またテストを行う前にコードクローンの集約を行うことができ,作業の後戻りも減らすことができます. ・コミットを挟む必要がない ・作業の後戻りが不要になる

Eclipse Pluginによる集約支援環境 開発作業をモニタリングし,メソッド抽出の集約パターンを見つ け,そのコードクローンの同時集約の支援環境を構築する. 機能3 機能4 差分ノード取得 メソッド抽出パターン照合 ASTノード リスト 機能2 機能1 CCFinder 検出結果 メソッド抽出 パターン  キー入力 追跡 コードクローン検出 それでは,ここから本研究の集約支援環境について具体的に説明させていただきます.こちらが本環境の全体概要図となっています.図に示す通り,本システムは機能1~機能5の5つの機能を有しています.これらの機能は機能1から機能5までがこの番号順で実行されていきます.まず,機能1のコードクローン・・・.これらの機能を図のように循環させることでメソッド抽出の集約パターンを見つけ,そのコードクローンの同時集約の支援を行います.ここから,それぞれの機能について説明させていただきます. 開発者 エディタ 機能5 メソッド抽出が行われた コード片のコードクローン  クローンペア照合 本環境

Eclipse Pluginによる集約支援環境 開発作業をモニタリングし,メソッド抽出の集約パターンを見つ け,そのコードクローンの同時集約の支援環境を構築する. 機能3 機能4 差分ノード取得 メソッド抽出パターン照合 ASTノード リスト 機能2 機能1 CCFinder 検出結果 メソッド抽出 パターン  キー入力 追跡 コードクローン検出 まずは機能1のコードクローン検出の説明をします.この機能では,Eclipseのエディタで開いているプロジェクトからコードクローンの検出を行います. 開発者 エディタ 機能5 メソッド抽出が行われた コード片のコードクローン  クローンペア照合 本環境

機能1 コードクローン検出 トークン単位のコードクローン検出ツールCCFinderX[2] タイプ1(完全に一致),タイプ2(変数名等の違いを許容)のコードクローンを高速に検出することができる. モニタリング開始時に実行し,その後は定期的に実行する. public int add(int a, int b){ int ans; ans = a + b; Sysem.out.println(ans); return ans; } public double add(double a, double b){ double answer; answer = a + b; Sysem.out.println(answer); return answer; } タイプ2の クローン 本環境では,コードクローンの検出にCCFinderXというツールを利用します.CCFinderXはトークン単位のコードクローン検出ツールであり,2つのコード片が完全に一致するタイプ1のコードクローンと,タイプ1に加えて,下の図で色を変えている部分のように変数名や型の違い等を許容するタイプ2のコードクローンを高速に検出することができます.このツールは,多くの研究や企業で使用実績があり,また,先行研究のClone Notifierでも利用されていたため,本研究でも利用することにしました.本環境では,モニタリング開始時にCCFinderXによるコードクローン検出を行い,その後は定期的に実行することになっています. [2]Toshihiro Kamiya, Shinji Kusumoto, and Katsuro Inoue. CCFinder: a multilinguistic token-based code clone detection system for large scale source code. IEEE Trans.Softw. Eng., Vol.28, No.7, pp. 654-670, 2002.

Eclipse Pluginによる集約支援環境 開発作業をモニタリングし,メソッド抽出の集約パターンを見つ け,そのコードクローンの同時集約の支援環境を構築する. 機能3 機能4 差分ノード取得 メソッド抽出パターン照合 ASTノード リスト 機能2 機能1 CCFinder 検出結果 メソッド抽出 パターン  キー入力 追跡 コードクローン検出 続いて,機能2のキー入力の追跡について説明します. 開発者 エディタ 機能5 メソッド抽出が行われた コード片のコードクローン  クローンペア照合 本環境

… 機能2 キー入力追跡 メソッド抽出の集約パターンを見つけるためには,1行以上の行差分情報が必要となる. 開発作業のモニタリングを行うために,開発者のキー入力の追跡を行い,1行以上の変更を検知する. 行差分を取得する際には,差分が小さい場合に高速検出可能なMyersの差分検出アルゴリズム[3]を適用した. キー入力追跡 … 本環境では,開発作業のモニタリングを行うために,キー入力の追跡を行います.のちに説明しますが,メソッド抽出の集約パターンを見つけるためには,1行以上の行差分情報が必要となります.そこで,キー入力を追跡し,1行以上の変更を検知できるようにしました.行差分を取得する際には,Myersの差分検出アルゴリズムを適用しました.このMyersの差分検出アルゴリズムは差分が小さい場合に高速で検出することができ,キー入力から行差分を取得する本手法と相性が良いため採用しました. キー入力追跡 1行以上の追加を取得 1行以上の削除を取得 [3] Myers, E. W.: An O (ND) difference algorithm and its variations., Algorithmica, pp. 251–266 (1986).

Eclipse Pluginによる集約支援環境 開発作業をモニタリングし,メソッド抽出の集約パターンを見つ け,そのコードクローンの同時集約の支援環境を構築する. 機能3 機能4 差分ノード取得 メソッド抽出パターン照合 ASTノード リスト 機能2 機能1 CCFinder 検出結果 メソッド抽出 パターン  キー入力 追跡 コードクローン検出 続いて,機能3の差分ノード取得機能について説明します. 開発者 エディタ 機能5 メソッド抽出が行われた コード片のコードクローン  クローンペア照合 本環境

機能3 差分ノード取得 1行以上の変更をAST(抽象構文木)のノードとマッピングし,組(delta_type,ast_node)として蓄積する. delta_type:Insert,Deleteのいずれかの値を取る. ast_node:ASTのノードの情報(名前,種類,位置等)を持つ. … 1行以上の削除 1行以上の追加 機能3では1行以上の変更を抽象構文木,ASTのノードとマッピングし,組(delta_type,ast_node)として蓄積していきます.ここで,delta_typeとは,InsertあるいはDeleteのいずれかの値を取り,それぞれノードが挿入されたことと削除されたことを表します.Ast_nodeとは,実際のASTのノードであり,ノードの名前,種類,位置等の情報を持っています. 差分ノード (Insert, MethodDeclaration) 差分ノード (Delete, MethodInvocation)

Eclipse Pluginによる集約支援環境 開発作業をモニタリングし,メソッド抽出の集約パターンを見つ け,そのコードクローンの同時集約の支援環境を構築する. 機能3 機能4 差分ノード取得 メソッド抽出パターン照合 ASTノード リスト 機能2 機能1 CCFinder 検出結果 メソッド抽出 パターン  キー入力 追跡 コードクローン検出 続いて機能4のメソッド抽出パターン照合機能について説明します.この機能では,機能3で取得して蓄積した差分ノードを基にメソッド抽出の集約パターンを検出します. 開発者 エディタ 機能5 メソッド抽出が行われた コード片のコードクローン  クローンペア照合 本環境

機能4 メソッド抽出の集約パターン照合 コードブロックの削除 機能3で取得して蓄積した組 メソッド抽出の集約パターン Delete, 𝑐𝑜𝑑𝑒__𝑏𝑙𝑜𝑐𝑘 ∧ 𝐼𝑛𝑠𝑒𝑟𝑡, 𝑀𝑒𝑡ℎ𝑜𝑑𝐷𝑒𝑐𝑙𝑎𝑟𝑎𝑡𝑖𝑜𝑛 ∧ 𝐼𝑛𝑠𝑒𝑟𝑡, 𝑀𝑒𝑡ℎ𝑜𝑑𝐼𝑛𝑣𝑜𝑐𝑎𝑡𝑖𝑜𝑛 𝑤ℎ𝑒𝑟𝑒 𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑐𝑜𝑑𝑒__𝑏𝑙𝑜𝑐𝑘 =𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑀𝑒𝑡ℎ𝑜𝑑𝐼𝑛𝑣𝑜𝑐𝑎𝑡𝑖𝑜𝑛 ∧𝑛𝑎𝑚𝑒 𝑀𝑒𝑡ℎ𝑜𝑑𝐷𝑒𝑐𝑙𝑎𝑟𝑎𝑡𝑖𝑜𝑛 =𝑛𝑎𝑚𝑒(𝑀𝑒𝑡ℎ𝑜𝑑𝐼𝑛𝑣𝑜𝑐𝑎𝑡𝑖𝑜𝑛)

機能4 メソッド抽出の集約パターン照合 メソッド呼び出しの追加 メソッド宣言の追加 メソッド抽出の集約パターン Delete, 𝑐𝑜𝑑𝑒__𝑏𝑙𝑜𝑐𝑘 ∧ 𝐼𝑛𝑠𝑒𝑟𝑡, 𝑀𝑒𝑡ℎ𝑜𝑑𝐷𝑒𝑐𝑙𝑎𝑟𝑎𝑡𝑖𝑜𝑛 ∧ 𝐼𝑛𝑠𝑒𝑟𝑡, 𝑀𝑒𝑡ℎ𝑜𝑑𝐼𝑛𝑣𝑜𝑐𝑎𝑡𝑖𝑜𝑛 𝑤ℎ𝑒𝑟𝑒 𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑐𝑜𝑑𝑒__𝑏𝑙𝑜𝑐𝑘 =𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛 𝑀𝑒𝑡ℎ𝑜𝑑𝐼𝑛𝑣𝑜𝑐𝑎𝑡𝑖𝑜𝑛 ∧𝑛𝑎𝑚𝑒 𝑀𝑒𝑡ℎ𝑜𝑑𝐷𝑒𝑐𝑙𝑎𝑟𝑎𝑡𝑖𝑜𝑛 =𝑛𝑎𝑚𝑒(𝑀𝑒𝑡ℎ𝑜𝑑𝐼𝑛𝑣𝑜𝑐𝑎𝑡𝑖𝑜𝑛)

Eclipse Pluginによる集約支援環境 開発作業をモニタリングし,メソッド抽出の集約パターンを見つ け,そのコードクローンの同時集約の支援環境を構築する. 機能3 機能4 差分ノード取得 メソッド抽出パターン照合 ASTノード リスト 機能2 機能1 CCFinder 検出結果 メソッド抽出 パターン  キー入力 追跡 コードクローン検出 続いて,機能5のクローンペア照合機能について説明します.この機能では,CCFinderXの検出結果と,メソッド抽出のパターンと認識された差分ノードを入力として利用します. 開発者 エディタ 機能5 メソッド抽出が行われた コード片のコードクローン  クローンペア照合 本環境

機能5 クローンペア照合 メソッド抽出リファクタリングで抽出されたコード片のクローンペアを検出する. 機能1のCCFinderXの出力情報と,機能4でメソッド抽出パターンと認識された差分ノードを利用する. 抽出されたコード片の位置情報とコードクローンの位置情報が一致するコードクローンを探す. EclipseのViewを用いてコードクローンの一覧を開発者に対して提示する. このコードクローン照合機能では,メソッド抽出の集約パターンが検出された際,そのメソッド抽出により抽出されたコード片のクローンペアを検出します.先ほども述べたように,この機能では機能1のCCFinderXの出力情報と,機能4でメソッド抽出パターンとして認識された差分ノードを利用します.具体的には,コードクローンの位置情報と,抽出されたコード片の位置情報を比較してそれらが一致するコードクローンを探します.そして,EclipseのViewを用いて,照合の結果一致したコードクローンの一覧を開発者に対して提示します.

集約支援環境の利用例(1/5) メニューを選択してモニタリング開始 このResult Viewで コードクローンの検出結果を表示 ここから集約支援環境の利用例についてお話します.こちらが実際のEclipseの画面となります.メニューのリファクタリング検出モニタリングを選択することでモニタリングを開始します.モニタリングを行う対象としては,エディタで開いているファイルに対してモニタリングを行います.そして,画面右のResult Viewにて,メソッド抽出が行われたコード片のコードクローンを開発者に対して提示します. エディタで開いているファイル に対してモニタリング

集約支援環境の利用例(2/5) タイプ1のクローンペア 機能2のキー入力追跡機能により編集作業をモニタリングする. 集約支援環境の利用シナリオを説明します.それにあたって下図のようなコードクローンを例として用います.この例は,ユーザーIDとパスワードを設定するものであり,長さが4文字以上で16文字以下という部分は一緒でありコードクローンであるが,ユーザーIDに関しては,他との重複が許されず,またパスワードに関しては,使う記号など他のフォーマット指定があるようなシステムを想定しています.本環境は,モニタリング開始時に,まず機能1のコードクローン検出機能により,あらかじめこのコードクローンを検出しておきます.開発者はこの後,右側のパスワードをチェックするメソッドにおいて,長さをチェックする部分をフォーマットをチェックする部分同様メソッドとして抽出する作業を行います.本環境はその編集作業を機能2のキー入力追跡機能によりモニタリングします.そして,編集の都度機能3の差分ノード取得機能により,差分ノードを蓄積していきます. 機能2のキー入力追跡機能により編集作業をモニタリングする. 機能1のコードクローン検出機能によりあらかじめこのコードクローンを検出しておく. 機能3の差分ノード取得機能により差分ノードを蓄積する.

集約支援環境の利用例(3/5) メソッド抽出 機能5のコードクローン照合機能によりメソッド抽出により抽出されたコード片のコードクローンを検出する. そして,実際に開発者の編集作業を経て,このようにメソッド抽出が行われたとします.長さをチェックする部分をcheckLengthメソッドとして抽出しています.このメソッド抽出が行われたことを,本環境の機能4のメソッド抽出の集約パターン照合機能により検知します.そして,機能5のコードクローン照合機能により,メソッド抽出により抽出されたコード片のコードクローンを検出します. 機能4のメソッド抽出の集約パターン照合機能により,メソッド抽出が行われたことを検知する.

集約支援環境の利用例(4/5) メソッド抽出の集約パターンが検知され,コードクローンが検出されると,ResultViewにより,その結果を開発者に対して提示します.

コードクローン部分をハイライトして表示する. 集約支援環境の利用例(5/5) コードクローン部分をハイライトして表示する.

まとめと今後の課題  まとめ 開発作業をモニタリングし,メソッド抽出の集約パターンを見つけ,そのコードクローンの同時集約の支援環境を構築. 本環境の利用シナリオをコードクローンの例を用いて紹介.  今後の課題 適用できるリファクタリングパターンの拡張. 評価実験でその有効性と改善点を調査. 最後にまとめと今後の課題についてお話させていただきます.本研究では,開発作業をモニタリングし,メソッド抽出の集約パターンを見つけ,そのコードクローンの同時集約の支援環境を構築しました.また,本支援環境の利用シナリオをコードクローンの例を用いて紹介しました.今後の課題としては,まず1つ目に適応できるリファクタリングパターンの拡張が挙げられます.今回適応できるリファクタリングのパターンはメソッド抽出だけであるが,メソッドの移動,メソッドの引き上げ,テンプレートメソッドの生成等もコードクローンの削除につながると考えられるため,拡張したいと思います.今後の課題の2つ目としては,評価実験を行い,本手法の有効性と改善点を調査したいと考えています.

ご清聴ありがとうございました 以上で発表を終わります.ご清聴ありがとうございました。