コードクローン編集者数に着目した開発履歴の分析

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 識別子名のタグクラウドを用いた.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
コードクローン履歴閲覧環境を用いたクローン評価の試み
TF-IDF法とLSHアルゴリズムを用いた 関数単位のコードクローン検出法
Javaプログラムの開発履歴における アクセス修飾子過剰性の分析
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析
剽窃 他人の作品や論文を盗んで,自分のものとして発表すること. プログラムが剽窃される事例もある. Aさんのプログラム Xさんのプログラム
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
FreeBSD Ports Collection におけるファイルクローンの検出
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
大規模ソースコード集合を対象とした 類似関数集合群の抽出
コードクローン分析ツールGeminiを用いたコードクローン分析手順
コードクローンの分布情報を用いた特徴抽出手法の提案
ギャップを含むコードクローンの フィルタリング手法の提案
ソースコードの同時修正支援における関数クローン検出ツールの有効性調査
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
ソードコードの編集に基づいた コードクローンの分類とその分析システム
開発履歴を用いたコードクローン作成者と利用者の 分析手法とその適用
コード片の生存期間がコードクローンと欠陥修正の有無に与える影響分析
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
クローンセットに対する主要編集者の分析法の提案と調査
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コード片のベクトル表現に基づく 大規模コードクローン集合の特徴調査
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードの生存期間を考慮したコードクローンと欠陥修正の関係調査
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
Token Comparison Approach to Detect Code Clone-related Bugs
柔軟に変更可能な字句解析機構を持つ コードクローン検出ツールの開発
UMLモデルを対象とした リファクタリング候補検出の試み
プログラム実行履歴を用いたコードクローン検出手法
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
プログラム理解におけるThin sliceの 統計的調査による有用性評価
コードスメルの深刻度がリファクタリングの実施に与える影響の実証的研究
グラフマイニングアルゴリズムを用いた ギャップを含むクローン抽出手法の提案
コードクローンのメトリクス値と 開発者の相関の調査
Geminiを用いた効果的なコードクローン分析方法
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
コードクローンの分布情報を用いた特徴抽出手法の提案
ソフトウェアプロダクト集合に対する 派生関係木の構築
メトリクス値の変化に基づく コードクローンの編集傾向分析
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
大阪大学 大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
容易に使用可能な grep風コードクローン検索ツール
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
Don’t Touch My Code! Examining the Effects of Ownership on Software Quality C. Bird (マイクロソフト・リサーチ) et al. 担当者:吉田(NAIST)
Geminiを用いた効果的なコードクローン分析方法
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Presentation transcript:

コードクローン編集者数に着目した開発履歴の分析 辻 健二1 ,崔 恩瀞1,吉田則裕2, 春名修介1, 井上克郎1 1 大阪大学 2 名古屋大学

コードクローン ソースコード中での類似したコード片のこと ソフトウェアの保守コストを大きくする要因 ソースコードがコピー&ペーストされることで生成される. ソフトウェアの保守コストを大きくする要因 コードクローン内にバグがあると,他のコードクローンにもバグが存在する可能性がある. コードクローン クローンセット 2019/4/19

コードクローン編集管理の必要性 コードクローン間で発生した変更は開発者間で共有する必要がある. ―編集漏れが発生する可能性があるため 開発者A 開発者B 2019/4/19

クローン編集管理システム Clone Notifier[1](1/2) コードクローンの編集を監視して,開発者に通知するシステム   ―複数人でコードクローンを編集する状況において,主要な     開発者が存在しなければ有効性を発揮する. Clone Notifier 編集を検知 通知 開発者A 開発者B [1] Yamanaka, Y., Choi, E., Yoshida, N., Inoue, K. and Sano, T.: Applying clone change notification system into an industrial development process, Proc. of ICPC ’13, pp. 199–206 (2013). 2019/4/19

クローン編集管理システム Clone Notifier(2/2) NECでのソフトウェア開発で適用実験を実施 Clone Notifierが通知したコードクローン編集の中には,プロジェクトマネージャが知らなかったものが存在 他のプロジェクトにおいて,クローンセットがどのように管理されているかわかっていない Clone Notifierが必要な状況がどの程度存在するのかわかっていない コードクローンを編集している開発者の人数および編集傾向の調査が必要 2019/4/19

コードクローンを編集する開発者に関する既存研究[2](1/3) OSSに存在するクローンセットに対し,編集する開発者が単独か複数かを調査 レイアウトやコメント以外が一致したコードクローンを対象 レイアウトやコメントの他に,変数名や識別子名の異なるコードクローンは対象外 if( destFile == null ){ destFile = new File( destDir, file.getName()); } if(m_destFile == null ){  m_destFile = new File(   m_destDir,m_file.getName(); } if( destFile==null ){ destFile=new File( destDir,file.getName()); } [2] Harder, J.: How Multiple Developers Affect the Evolution of Code Clones, Proc. of ICSM ’13, pp. 30–39 (2013). 2019/4/19

コードクローンを編集する開発者に関する既存研究(2/3) OSSに存在するクローンセットに対し,編集する開発者が単独か複数を調査 各コード片に対する開発者を定義 開発者A 開発者B double sum(double[ ] data){ double sum = 0; for(int j=0; j<data.length; j++){ sum = sum + data[j];} return sum; }  :22トークン  :3トークン 開発者:開発者A 2019/4/19

コードクローンを編集する開発者に関する既存研究(3/3) コードクローンの開発者を求めることで,クローンセットの開発者が単独か複数かを定義する クローンセット 開発者 開発者A 単独で編集されたクローンセット 開発者B 複数人で編集されたクローンセット 調査結果:60%~85%のクローンセットが単独の開発者によって編集されている 2019/4/19

既存研究の問題点 レイアウトやコメント以外が一致したコードクローンにしか適用していない 編集割合の最も多い開発者のみに焦点を当てている 複数人がほぼ同頻度にコードクローンの編集を行っている場合を考慮できていない. 開発者A 開発者B for (int y = 1; y <= 9; y ++){   for (int x = 1; x <= 9; x ++){ System.out.print(String.format( "%dx%d=%2d ", x , y , x * y)); } System.out.println();  :11トークン  :16トークン 開発者:開発者B 2019/4/19

研究概要 クローンセットに対する編集傾向を示すメトリックを提案 一致したコードクローンだけでなく,類似したコードクローンも対象 ファイル単位のクローンセットに適用 一致したコードクローンだけでなく,類似したコードクローンも対象 if( destFile == null ){ destFile = new File( destDir, file.getName()); } if(m_destFile == null ){  m_destFile = new File(   m_destDir,m_file.getName(); } 2019/4/19

リサーチクエスチョン RQ1:クローンセットは複数人によって編集されるか. 2019/4/19

Ownershipメトリック[3] コンポーネントに対して,開発者が明確に責任を持っているかどうかを数値化 編集傾向を推測することが可能 [3] Bird, C., Nagappan, N., Murphy, B., Gall, H. and Devanbu, P.: Don’T Touch My Code!: Examining the Effects of Ownership on Software Quality, Proc. of ESEC/FSE ’11, pp. 4–14 (2011). 2019/4/19

CS-Ownership = CSmax CStotal クローンセット内のファイルを最も多く編集した開発者の編集割合を示す. 本研究では,0.5より大きければ主要な開発者が存在するとみなす. CS-Ownership = CSmax CStotal CSmax:全コミットのうち,最多の開発者コミット数 CStotal:クローンセットに含まれる全てのファイルのコミット総計 2019/4/19

CS-Ownership = CSmax CStotal ファイルクローンセット ファイルX ファイルY ファイルZ CStotal = 10 CSmax = 6 (開発者A) 開発者A:6回 開発者B:3回 開発者C:1回 コミット総計 ファイルY 開発者A:2回 開発者B:2回 ファイルZ 開発者C:1回 開発者B:1回 開発者A:2回 CS-Ownership = 0.6 主要な開発者が存在する 2019/4/19

CS-Ownership = CSmax CStotal ファイルクローンセット ファイルX ファイルY ファイルZ 開発者B:3回 CStotal = 16 CSmax = 6 (開発者B) 開発者A:5回 開発者B:6回 開発者C:5回 コミット総計 ファイルY 開発者A:2回 開発者B:2回 開発者C:2回 ファイルZ 開発者C:3回 開発者B:1回 開発者A:1回 CS-Ownership = 0.38 主要な開発者は存在しない 2019/4/19

調査手順概要 開発履歴 ファイル開発者と回数リスト ファイルクローンリスト CS-Ownershipリスト 手順1: クローンセット検出 手順2:ファイル編集履歴の分析 手順3: CS-Ownershipの計測 CS-Ownershipリスト ファイルクローンリスト 開発履歴 ファイル開発者と回数リスト 2019/4/19

手順1:クローンセット検出[4](1/2) 類似したコードクローンを検出対象とする. ユーザ定義名の違いを無視して検出する. クローンセット if( destFile == null ){ destFile = new File( destDir, file.getName()); } if(m_destFile == null ){   m_destFile = new File(m_destDir,   m_file.getName()); if(destFile==null){   destFile=new File(  destDir,file.getName()); クローンセット 類似した コードクローン 一致した コードクローン [4] Choi, E., Yoshida, N., Higo, Y., and Inoue, K. : Proposing and Evaluating Clone Detection Approaches with Preprocessing Input Source Files IEICE Transactions on Information and Systems, Vol.E98-D, No.2, Feb. 2015. (Accepted for Publication) 2019/4/19

手順1:クローンセット検出(2/2) ある時点でのソースコードに対してコードクローンを検出 ファイル単位でコードクローンを検出する 誤検出を減らす コードクローン 誤検出例 private int data;     public int getData(){         return data;     } private String name;     public String getName(){         return name;     } 2019/4/19

手順2:ファイル編集履歴の分析 クローンファイルに対して,コミットした開発者とその回数をカウントする. ファイル開発者と回数リスト 開発履歴 ファイルA 開発者X: 1回 開発者Y: 3回 ファイルB 開発者X: 3回 ・・・ ファイルA ファイルB クローンセット1 クローンセット2 ファイルC ファイルD ファイルE 開発履歴 ・・・ ファイルクローンリスト 2019/4/19

手順3:CS-Ownershipの計測 全てのファイルクローンセットに対して,CS-Ownershipの計測を行う. クローンセット1 クローンセット2 クローンセットID CS-Ownership 1 0.57 2 0.33 ファイルA ファイルB ファイルC ファイルD ファイルE ・・・ CS-Ownershipリスト ・・・ クローンセット全体での編集回数 開発者X: 4 開発者Y: 3 ファイルA 開発者X: 1 ファイルB 開発者X: 3 ファイル開発者と回数リスト 2019/4/19

調査対象システム リサーチクエスチョン RQ1:クローンセットは複数人によって編集されるか. 開始ファイル数 終了ファイル数 調査コミット数 調査対象期間 WildFly 1171 6375 24K 3年10ヶ月 FreeBSD 14501 20266 75K 4年11ヶ月 Linux 20755 33672 203K 3年3ヶ月 リサーチクエスチョン RQ1:クローンセットは複数人によって編集されるか. RQ2:複数人で編集される場合,クローンセットを管理する主要な開発者は存在するか. 2019/4/19

調査結果概要 RQ1:クローンセットは複数人によって編集されるか. 全てのシステムで,複数人で編集されている クローンセットが存在する. 対象システム クローンセット数 クローンセット内ファイル数 単独 複数 合計 最大 最小 平均 WildFly 3 11 14 2 2.2 FreeBSD 37 15 52 51 3.6 Linux 12 23 68 6.3 RQ1:クローンセットは複数人によって編集されるか. 全てのシステムで,複数人で編集されている クローンセットが存在する. 2019/4/19

編集を行う開発者数が複数の CS-Ownershipの分布 RQ2:複数人で編集される場合,クローンセットを管理する主要な開発者は存在するか. 主要な開発者が存在しないクローンセットも同等もしくは半数以上存在する. 2019/4/19

まとめと今後の課題 まとめ 今後の課題 クローンセットの編集を行う開発者の人数を調査 単独で編集されることが多い傾向にあるが,複数人で編集されることもある 主要な開発者が存在しないクローンセットも存在する. 今後の課題 関数クローンに対するOwnershipの測定 2019/4/19