An Empirical Study of Clone Removals

コードクローン編集者数に着目した
開発履歴の分析
辻 健二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