コードクローン変更管理システムの 開発と実プロジェクトへの適用 〇山中 裕樹1,崔 恩瀞1,吉田 則裕2, 井上 克郎1,佐野 建樹3 1 大阪大学 2 奈良先端科学技術大学 3 日本電気株式会社 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 発表内容 1. 本研究の背景 2. コードクローン変更管理システム 3. 適用実験 4. まとめと今後の課題 2 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University コードクローン 同一・類似した部分を持つコード片 ►ソースコードのコピー&ペーストなどによって発生 ソフトウェアの保守コストを大きくする要因 コードクローン クローンセット 3 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University コードクローンに対する保守作業 同時修正 修正 バグが存在 一貫して 修正する 修正 保守対象となるコードクローンを効率よく発見する ために コードクローンの変更管理が必要である 同一メソッド 集約 にまとめる 集約 呼出し 4 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University コードクローンの変更管理の必要性(1/2) 同時修正が行われていないクローンセットの発見 ► 修正漏れの可能性がある 他のコードクローンも修正が必要 バグが 存在 修正 旧バージョン 最新バージョン 5 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University コードクローンの変更管理の必要性(2/2) 新たに発生したコードクローンの発見 集約するか否かの判断が必要 コード片 コピー 旧バージョン 最新バージョン 6 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 研究の目的 既存のコードクローン検出技術では変更されたコードクローン の確認は人手で行う必要がある 検出されたコードクローンが膨大な量となる場合変更された コードクローンの確認コストは大きい コードクローン変更管理システムの開発 ► コード片の編集に基づくコードクローンの自動的な分類 ► 保守作業の対象となるコードクローンの分析 7 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 発表内容 1. 本研究の背景 2. コードクローン変更管理システム 3. 適用実験 4. まとめと今後の課題 8 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University コードクローン変更管理システムの概要 ソースコードの取得 変更情報に基づき コードクローンを分類 版管理システム ソースコード のコミット コードクローン 変更管理システム 開発者 コードクローンの 分類結果の提示 9 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University システムの処理 1. ソースコードの取得 2. コードクローンの検出 3. コードクローンの対応関係の取得 4. コードクローンの分類 5. クローンセットの分類 10 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1. ソースコードの取得 前回分析時の ソースコードを利用 旧バージョン 版管理システム からチェックアウト 最新バージョン 11 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2. コードクローンの検出 コードクローン検出ツールCCFinder[1]を利用 旧バージョン 最新バージョン [1] T. Kamiya, S. Kusumoto, and K. Inoue, “CCFinder: A multilinguistic token-based code clone detection system for large scale source code”, IEEE Transactions on Software Engineering, 28(7):654-670, 2002. 12 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 3. コードクローンの対応関係 同ファイル,同位置にあるコードクローンの関係を調べる 対応 対応 旧バージョン 最新バージョン 13 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4. コードクローンの分類 Stable:コード片が編集されなかったコードクローン Added:新たに発生したコードクローン Modified:コード片が編集されたコードクローン Deleted:消滅したコードクローン 旧バージョン 最新バージョン 14 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4. コードクローンの分類 Stable:コード片が編集されなかったコードクローン Added:新たに発生したコードクローン Modified:コード片が編集されたコードクローン Deleted:消滅したコードクローン Stable 旧バージョン 編集なし Stable 最新バージョン 15 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4. コードクローンの分類 Stable:コード片が編集されなかったコードクローン Added:新たに発生したコードクローン Modified:コード片が編集されたコードクローン Deleted:消滅したコードクローン Stable 編集なし 追加 旧バージョン Stable Added 最新バージョン 16 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4. コードクローンの分類 Stable:コード片が編集されなかったコードクローン Added:新たに発生したコードクローン Modified:コード片が編集されたコードクローン Deleted:消滅したコードクローン Stable Modified 旧バージョン 編集なし Stable 追加 Added 編集 Modified 最新バージョン 17 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4. コードクローンの分類 Stable:コード片が編集されなかったコードクローン Modified:コード片が編集されたコードクローン Added:新たに発生したコードクローン Deleted:消滅したコードクローン Stable 編集なし Stable 追加 Added Modified 編集 Modified Deleted 削除 旧バージョン 最新バージョン 18 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 5. クローンセットの分類 Stable Clone Set ► 2バージョンに渡って存在し,変更がなかったクローンセット ► Stableのコードクローンのみから構成される Changed Clone Set ► 2バージョンに渡って存在し,変更されたクローンセット ► Stable以外のコードクローンも含まれる New Clone Set ► 最新バージョンのみに存在するクローンセット Deleted Clone Set ► 旧バージョンのみに存在するクローンセット 19 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 分類例– Changed Clone Set 一貫した修正が必要となる可能性がある 編集 Modified Modified Stable Stable Stable Stable クローンセットA 旧バージョン クローンセットA 最新バージョン 20 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 分類例– New Clone Set 集約するか否かの判断が必要である Added コード片 コピー Added Added クローンセットA 旧バージョン 最新バージョン 21 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 分類例 – Deleted Clone Set 計画通りに集約されたクローンセットを確認できる コード片 Deleted 集約 Stable Deleted Deleted Stable クローンセットA 旧バージョン 最新バージョン 22 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 開発者への情報提示 テキストベースの提示 ►Eメールにより開発者に通知する ►変更されたコードクローンの存在を開発者に認識させる ウェブベースの提示 ►ウェブユーザインタフェースを提供する ►変更されたコードクローンに対する保守作業の必要性 の判断を支援する 23 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University Eメールを用いた通知の例 ************************************************************* @1 ************************************************************* @1.0:MODIFIED \src\main\org\apache\tools\ant\listener\MailLogger.java 375.9-380.34 @1.1:STABLE \src\main\org\apache\tools\ant\filters\FixCrLfFilter.java 143.13-148.34 コードクローン @1.2:STABLE \src\main\org\apache\tools\ant\filters\FixCrLfFilter.java 144.13-149.43 一覧 @1.3:STABLE \src\main\org\apache\tools\ant\taskdefs\MacroInstance.java 248.9-253.25 ---------------------------------------------### @1.0 ### \src\main\org\apache\tools\ant\listener\MailLogger.java 372 } コードクローンID 分類情報 ソースファイル ソースファイル中の位置 373 // convert the replyTo string into a vector of emailaddresses 374 Vector replyToList = vectorizeEmailAddresses(values.replytoList()); <START MODIFIEDCLONE> 375 mailer.setHost(values.mailhost()); 376 mailer.setPort(values.port()); 377 mailer.setUser(values.user()); 378 mailer.setPassword(values.password()); 379 mailer.setSSL(values.ssl()); コード片 380 + mailer.setEnableStartTLS(values.starttls()); <END MODIFIEDCLONE> mailer.setEnableStartTLS(values.ssl()); 381 Message mymessage = 382 new Message(values.body().length() > 0 ? values.body() : message); 383 mymessage.setProject(project); ---------------------------------------------- クローンセットID 24 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University ウェブユーザインタフェースの例 クローンセット 一覧ページ 変更されたクローンセットの確認 ソースファイルページ • 編集されたコードクローンの確認 • 保守対象となるコードクローンの確認 25 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 発表内容 1. 本研究の背景 2. コードクローン変更管理システム 3. 適用実験 4. まとめと今後の課題 26 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 評価実験(1/2) NECで行われているソフトウェア開発への適用 開発者(マネージャ)に対してアンケートを実施 ►変更されたクローンセットの各々の分類に対して保守作業 が必要であると判断されたか,システムの有用性の調査 アンケート デイリーレポート コードクローン 変更管理システム フィードバック 開発者 著者 27 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 評価実験(2/2) 適用期間 ► 2011 / 12 / 19 – 2012 / 01 / 31 ( 約40日間 ) ► 保守段階のソフトウェアに適用 対象プロジェクト ► 開発言語: Java ► 開発人数: 6人 ► 開発規模: 約120万行 ► クローンセット数: 約850 アンケート対象者 ► プロジェクトマネージャ ( コードクローンの管理者 ) 28 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University アンケート内容 質問1 本システムを用いて,保守作業が必要である コードクローンを発見することができたか 質問2 コードクローンに対してどのような保守作業が必要か 29 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University アンケート結果 – 質問1 質問1 本システムを用いて,保守作業が必要である コードクローンを発見することができたか 回答結果 11個のクローンセットを発見 30 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University アンケート結果 – 質問2 1 2 3 4 5 6 7 8 9 10 11 分析日 2011/12/28 2011/12/28 2012/1/13 2012/1/13 2012/1/13 2012/1/13 2012/1/13 2012/1/16 2012/1/16 2012/1/18 2012/1/24 分類 New New New New New New New New New New New 質問2 集約 集約 集約 コメント 集約 集約 集約 集約 集約 集約 集約 質問2 保守作業の方法 31 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University アンケート結果 – 質問2 1 2 3 4 5 6 7 8 9 10 11 分析日 2011/12/28 2011/12/28 2012/1/13 2012/1/13 2012/1/13 2012/1/13 2012/1/13 2012/1/16 2012/1/16 2012/1/18 2012/1/24 分類 New New New New New New New New New New New 質問2 質問2 集約 保守作業の方法 集約 集約 コメント 集約 集約 集約 大部分のクローンセット 集約 が集約の対象 集約 集約 集約 32 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University アンケート結果 – 質問2 1 2 3 4 5 6 7 8 9 10 11 分析日 2011/12/28 2011/12/28 2012/1/13 2012/1/13 2012/1/13 2012/1/13 2012/1/13 2012/1/16 2012/1/16 2012/1/18 2012/1/24 分類 New New New New New New New New New New New 質問2 質問2 集約 保守作業の方法 集約 集約 コメント 集約 集約 集約 集約 コードクローンの位置を コメントとしてソースコードに記述 集約 集約 集約 33 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University アンケート結果 – 質問2 質問2 分類 質問2 分析日 集約 1 2011/12/28 New 保守作業の方法 集約 2 2011/12/28 New 集約 3 2012/1/13 New 4 2012/1/13 New コメント 11個のNew Clone Setに分類された 集約 5 2012/1/13 New 集約 6 クローンセットが保守作業の対象である 2012/1/13 New 集約 7 2012/1/13 New 集約 8 2012/1/16 New 集約 9 2012/1/16 New 集約 10 2012/1/18 New 集約 11 2012/1/24 New 34 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 評価実験に対する考察(1/2) 大部分のクローンセットがStable Clone Set 1000 900 800 700 100 0 Stable Changed Deleted New 35 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 評価実験に対する考察(2/2) 大部分がStable Clone Set ►以前に保守作業の必要性が判断された可能性がある ►変更されていないクローンセットの確認は冗長である 変更があったクローンセットのみを確認することで 保守対象となるコードクローンを効率良く発見できる 36 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守対象のコードクローンの調査 目的 ► 保守対象となる可能性が高いコードクローンの情報を 開発者に提供できるようにシステムを改善する 調査方法 ► コードクローン分析ツールGemini[2]を用いてメトリクス抽出 ► 保守対象外のコードクローンのメトリクスとの違いを調査 [1] Ueda, Y., Kamiya, T., Kusumoto, S. and Inoue, K.: Gemini: Maintenance support environment based on code clone analysis, Proc. of METRICS '02, pp. 67{76 (2002) 37 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 調査結果 RNRメトリック値による違いが顕著に現れた ►クローンセット中のコード片の非繰り返しの程度を表す 100 80 RNR 60 40 保守対象のクローンセットの 20 RNR値は大きい 0 保守対象 のクローンセット 保守対象以外 のクローンセット 38 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 調査結果に対する考察 RNR値が小さいクローンセット ►繰り返し処理が多いクローンセットを指す 変数宣言の羅列 / 連続したimport文 ►保守作業の対象となる可能性が低い RNR値によるクローンセットのフィルタリング ►閾値以下のRNR値のクローンセットを除去 ►保守対象の可能性が高いクローンセットを提示可能 39 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 発表内容 1. 本研究の背景 2. コードクローン変更管理システム 3. 適用実験 4. まとめと今後の課題 40 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University まとめと今後の課題 まとめ ►コードクローン変更管理システムの開発 ►適用実験によりシステムの有用性を確認 今後の課題 ►様々なプロジェクトに対して評価実験 ►保守対象となる可能性が高いクローンセットの情報提示 RNR値によるフィルタリング 41 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University ご清聴ありがとうございました 42 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
© Copyright 2025 ExpyDoc