コードクローン編集者数に着目した 開発履歴の分析 辻 健二1 ,崔 恩瀞1,吉田則裕2, 春名修介1, 井上克郎1 大阪大学 2 名古屋大学 1 Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University コードクローン • ソースコード中での類似したコード片のこと – ソースコードがコピー&ペーストされることで生成される. • ソフトウェアの保守コストを大きくする要因 – コードクローン内にバグがあると,他のコードクローンにも バグが存在する可能性がある. コードクローン コードクローン コードクローン クローンセット 2 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 コードクローン編集管理の必要性 コードクローン間で発生した変更は開発者間で 共有する必要がある. ―編集漏れが発生する可能性があるため 開発者A 開発者B 3 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 クローン編集管理システム Clone Notifier[1](1/2) コードクローンの編集を監視して,開発者に通 知するシステム ―複数人でコードクローンを編集する状況において,主要な 開発者が存在しなければ有効性を発揮する. 編集を 検知 通知 開発者A 開発者B Clone Notifier [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). Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 4 2015/10/1 クローン編集管理システム Clone Notifier(2/2) • NECでのソフトウェア開発で適用実験を実施 • Clone Notifierが通知したコードクローン編集の中には, プロジェクトマネージャが知らなかったものが存在 • 他のプロジェクトにおいて,クローンセットがど のように管理されているかわかっていない – Clone Notifierが必要な状況がどの程度存在す るのかわかっていない コードクローンを編集している開発者の 人数および編集傾向の調査が必要 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 5 2015/10/1 コードクローンを編集する開発者に 関する既存研究[2](1/3) OSSに存在するクローンセットに対し,編集する開発 者が単独か複数かを調査 – レイアウトやコメント以外が一致したコードクロー ンを対象 – レイアウトやコメントの他に,変数名や識別子名 の異なるコードクローンは対象外 if( destFile == null ){ destFile = new File( destDir, file.getName()); } if(m_destFile if( destFile==null == null ){ ){ destFile=new m_destFile = File( new File( destDir,file.getName()); m_destDir,m_file.getName(); }} [2] Harder, J.: How Multiple Developers Affect the Evolution of Code Clones, Proc. of ICSM ’13, pp. 30–39 (2013). 6 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 コードクローンを編集する開発者に 関する既存研究(2/3) OSSに存在するクローンセットに対し,編集する開発 者が単独か複数を調査 – 各コード片に対する開発者を定義 double sum(double[ ] data){ double sum = 0; for(int j=0; j<data.length; j++){ sum = sum + data[j];} return sum; } 開発者A :22トークン 開発者B :3トークン 開発者:開発者A 7 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 コードクローンを編集する開発者 に関する既存研究(3/3) コードクローンの開発者を求めることで,クローンセット の開発者が単独か複数かを定義する クローンセット 開発者 開発者 開発者A 開発者A 開発者A 開発者B 開発者A 開発者A 単独で編集された クローンセット クローンセット 複数人で編集された クローンセット 調査結果:60%~85%のクローンセットが単独の 開発者によって編集されている Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 8 2015/10/1 既存研究の問題点 • レイアウトやコメント以外が一致したコードク ローンにしか適用していない • 編集割合の最も多い開発者のみに焦点を当 てている – 複数人がほぼ同頻度にコードクローンの編集を 行っている場合を考慮できていない. 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(); } 開発者A :11トークン 開発者B :16トークン 開発者:開発者B Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 9 2015/10/1 研究概要 • クローンセットに対する編集傾向を示すメト リックを提案 – ファイル単位のクローンセットに適用 • 一致したコードクローンだけでなく,類似した コードクローンも対象 if( destFile == null ){ destFile = new File( destDir, file.getName()); } if(m_destFile == null ){ m_destFile = new File( m_destDir,m_file.getName(); } 10 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 リサーチクエスチョン RQ1:クローンセットは複数人によって編集され るか. RQ2:複数人で編集される場合,クローンセット を管理する主要な開発者は存在するか. 11 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 Ownershipメトリック[3] • コンポーネントに対して,開発者が明確に責 任を持っているかどうかを数値化 • 最も多く編集を行った開発者の編集割合を Ownershipとしている. – 編集傾向を推測することが可能 [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). 12 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 提案手法:CS-Ownership • クローンセット内のファイルを最も多く編集し た開発者の編集割合を示す. CSmax CS-Ownership = CStotal CSmax:全コミットのうち,最多の開発者コミット数 CStotal:クローンセットに含まれる全てのファイルのコミット総計 • 本研究では,0.5より大きければ主要な開発 者が存在するとみなす. 13 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 CS-Ownership計算例(1/2) 開発者A:2回 CSmax CS-Ownership = CStotal ファイルY コミット総計 ファイルX ファイル クローン セット 開発者A:2回 ファイルX ファイルY ファイルZ 開発者B:2回 ファイルZ 開発者A:2回 開発者B:1回 開発者C:1回 開発者A:6回 開発者B:3回 開発者C:1回 CStotal = 10 CSmax = 6 (開発者A) CS-Ownership = 0.6 主要な開発者が 存在する Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 14 2015/10/1 CS-Ownership計算例(2/2) ファイルX ファイル クローン セット 開発者A:2回 開発者B:3回 CSmax CS-Ownership = CStotal ファイルY コミット総計 開発者A:2回 ファイルX 開発者B:2回 開発者C:2回 ファイルY ファイルZ ファイルZ 開発者A:1回 開発者B:1回 開発者C:3回 開発者A:5回 開発者B:6回 開発者C:5回 CStotal = 16 CSmax = 6 (開発者B) CS-Ownership = 0.38 主要な開発者は 存在しない Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 15 2015/10/1 調査手順概要 開発履歴 手順1: クローンセット 検出 ファイルクローン リスト ファイル開発者と 回数リスト 手順3: CS-Ownership の計測 手順2:ファイル 編集履歴の分析 CS-Ownership リスト 16 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 手順1:クローンセット検出[4](1/2) • 類似したコードクローンを検出対象とする. – ユーザ定義名の違いを無視して検出する. クローンセット if( destFile == null ){ destFile = new File( destDir, file.getName()); } 類似した コードクローン if(destFile==null){ destFile=new File( destDir,file.getName()); } if(m_destFile == null ){ m_destFile = new File(m_destDir, m_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) Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 17 手順1:クローンセット検出(2/2) • ある時点でのソースコードに対してコードク ローンを検出 • ファイル単位でコードクローンを検出する – 誤検出を減らす コードクローン 誤検出例 private int data; public int getData(){ return data; } private String name; public String getName(){ return name; } 18 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 手順2:ファイル編集履歴の分析 • クローンファイルに対して,コミットした開発者 とその回数をカウントする. ファイルA クローンセット1 開発者X: 1回 開発者Y: 3回 クローンセット2 ファイルB ファイルC ・・・ ファイルB 開発履歴 ファイルD ファイルE ファイルクローンリスト 開発者X: 3回 ・・・ ファイルA ファイル開発者と 回数リスト 19 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 手順3:CS-Ownershipの計測 • 全てのファイルクローンセットに対して,CSOwnershipの計測を行う. クローンセット2 クローンセット1 ファイルC ファイルA ・・・ 1 0.57 2 0.33 ファイルD ファイルE ファイル開発者 と回数リスト ファイルA 開発者X: 1 開発者Y: 3 ファイルB 開発者X: 3 クローンセット全 体での編集回数 ・・・ ファイルB クローン CS-Ownership セットID CS-Ownership リスト 開発者X: 4 開発者Y: 3 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 20 2015/10/1 調査対象システム 対象システム 開始ファイル数 終了ファイル数 調査コミット数 調査対象期間 WildFly 1171 6375 24K 3年10ヶ月 FreeBSD 14501 20266 75K 4年11ヶ月 Linux 20755 33672 203K 3年3ヶ月 リサーチクエスチョン RQ1:クローンセットは複数人によって編集されるか. RQ2:複数人で編集される場合,クローンセットを管理する主要 な開発者は存在するか. 21 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1 調査結果概要 対象システム クローンセット数 クローンセット内ファイル数 単独 複数 合計 最大 最小 平均 WildFly 3 11 14 3 2 2.2 FreeBSD 37 15 52 51 2 3.6 Linux 12 11 23 68 2 6.3 RQ1:クローンセットは複数人によって編集されるか. 全てのシステムで,複数人で編集されている クローンセットが存在する. Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 22 2015/10/1 編集を行う開発者数が複数の CS-Ownershipの分布 FreeBSD クローンセット数 WildFly 6 5 4 3 2 1 0 6 5 4 3 2 1 0 CS-Ownership Linux 6 5 4 3 2 1 0 CS-Ownership CS-Ownership RQ2:複数人で編集される場合,クローンセットを管 理する主要な開発者は存在するか. 主要な開発者が存在しないクローンセットも同等 もしくは半数以上存在する. Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 23 2015/10/1 まとめと今後の課題 • まとめ – クローンセットの編集を行う開発者の人数を調査 – 単独で編集されることが多い傾向にあるが,複数 人で編集されることもある – 主要な開発者が存在しないクローンセットも存在 する. • 今後の課題 – 関数クローンに対するOwnershipの測定 24 Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 2015/10/1
© Copyright 2024 ExpyDoc