開発履歴を用いたコードクローン作成者と利用者の 分

ソフトウェアリポジトリにおける
コードクローン作成者・利用者関係分析手法とその適用
○森脇匠哉† 井垣宏† 山中裕樹†
吉田則裕†† 井上克郎† 楠本真二†
† 大阪大学大学院 情報科学研究科
†† 奈良先端科学技術大学院大学 情報科学研究科
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ソースコードの再利用[1]
既存のソースコードのコピーアンドペーストにより行われる
コピー
コピー
メリット
同じソースコードを二度書かなくて済む ⇒ 生産性の向上
テスト済みのソースコードの再利用 ⇒ 信頼性の向上
ソースコードの再利用は難しい[2]
ソースコードの内容を理解していなければならない
コピーアンドペースト後にコード修正が必要な場合もある
再利用しやすいソースコードや開発者がどのようなときに再利用を行う
かを分析することが再利用支援において重要である
[1] Trivedi Prakriti and Kumar Rajeev. Software metrics to estimate software quality using software component reusability. IJCSI International Journal of
Computer Science Issues, Vol. 9, pp. 144–149, 2012.
[2] Will Tracz. Confessions of a used-program salesman: Lessons learned. In Proceedings of the 1995 Symposium on Software Reusability, SSR ’95, pp.
11–13, New York, NY, USA, 1995. ACM.
2
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
既存研究[3]
686名のOSS開発者へ再利用に関するアンケートを実施
再利用を積極的に行う開発者の特徴
再利用のメリットを強く認識している
生産性,品質
関わっているプロジェクト数や開発者数が多い
成熟していないプロジェクトに携わっている
再利用に関する定量的な分析の必要性が主張されている
[3] Manuel Sojer and Joachim Henkel. Code Reuse in Open Source Software Development Quantitative Evidence, Drivers, and Impediments.
Journal of the Association for Information Systems, Vol. 11, No. 12, 2010.
3
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
コードクローン技術を用いた
ソースコードの再利用分析
コードクローン:同一または類似したコード片を持つもの
クローンセット:互いにコードクローンであるコード片の集合
コピー
コピー
コードクローン
クローンセット
コードクローン検出技術を用いた既存の再利用分析研究
開発者ごとの再利用傾向の可視化[4]
再利用の規模や性質を分析[5]
[4]Mihai Balint, Tudor Girba, and Radu Marinescu. How developers copy. In Proceedings of International Conference on Program Comprehension 2006,
pp. 56–65,2006.
[5]Lars Heinemann, Florian Deissenboeck, Mario Gleirscher, Benjamin Hummel, and Maximilian Irlbeck. On the Extent and Nature of Software Reuse in
Open Source Java Projects. In Proceedings of the 12th International Conference on Top Productivity Through Software Reuse, ICSR’11, pp. 207–222,
Berlin, Heidelberg, 2011.
4
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用分析における課題(1/2)
複数のプロジェクトに対する分析を行うにはプロジェクト間で
の再利用を分析する必要がある
プロジェクトA
コピー
コピー
プロジェクトB
コピー
5
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用分析における課題(2/2)
開発者によって再利用に関するモチベーションは異なる
誰が誰のソースコードを再利用したかを分析する必要がある
コードクローン
作成者
A
作成者の定義
クローンセット中のコード
クローンの内,実装日
時が最も古いコード片
を実装した開発者
コピー
コードクローン
利用者
コードクローン
B
利用者の定義
コピー 既存のコード片を再利
用した開発者
C
コードクローン
利用者
6
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
目的
O1:開発者ごとの再利用傾向がどの程度異なるか
再利用回数の多いクローンセットはユニークな利用者数も多いか
コミット数の多い開発者はコードクローンの作成数と利用数も多いか
O2:どのようなソースコードが多くの開発者に再利用されやすいか
ユニークな利用者数の多いコードクローンと,再利用回数は多いがユニー
クな利用者数の少ないコードクローンに違いがあるか
O3:どのような開発者が再利用を積極的に行うか
コードクローンの作成数と利用数の多い開発者にどのような特徴があるか
7
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用分析の概要
rev. 1
入力:複数のリポジトリ
rev. 2
クローンセット
遷移情報(N-1,N)
rev. N
STEP4:
コードクローン作成者
と利用者の特定
…
…
・
・
・
rev. N-1
…
STEP1:
合成リポジトリの作成
STEP2:クローンセット遷移情報の検出
クローンセット
遷移情報(1,2)
STEP3:
クローンセット
遷移情報のマージ
クローンセット履歴
出力:クローンセット毎の
コードクローン作成者と利用者
…
8
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP1:合成リポジトリの作成
複数プロジェクトのリポジトリからチェックアウトを行い,合成リポジトリを
作成
リポジトリA
rev. A1
2012/1/2
rev. A2
2012/3/2
a1.java
A
a1’.java
rev. A1
2012/1/2
rev. B1
2012/2/4
A
A
b1.java
rev. A2
2012/3/2
A
b1’.java
rev. B2
2012/4/4
リポジトリB
rev. B1
2012/2/4
rev. B2
2012/4/4
合成
リポジトリC
時系列順に
並べ替え
合成rev. 1
2012/1/2
a1.java
a1.java
a1’.java
a1’.java
B
b1.java
B
b1.java
B
b1’.java
合成rev. 2
2012/2/4
合成rev. 3
2012/3/2
合成rev. 4
2012/4/4
9
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP2:クローンセット遷移情報の検出(1/2)
コードクローンを「Stable」「Added」に分類する[6]
本研究では再利用傾向を分析するため「Added」に注目
Stable
コピー
Added
クローンセットA
クローンセットA
旧リビジョン
新リビジョン
[7]山中裕樹, 崔恩瀞, 吉田則裕, 井上克郎, 佐野建樹. “コードクローン変更管理システムの開発と実プロジェクトへの適用”,
ソフトウェアエンジニアリングシンポジウム2012論文集, pp.1–8, aug 2012.
10
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP2:クローンセット遷移情報の検出(2/2)
隣接する2リビジョンのコードクローンから遷移情報を取得する[6]
コードクローン情報
(合成rev. 1)
クローンセット遷移情報(1,2)
比較
コードクローン情報
(合成rev. 2)
クローンセットA
…
…
合
成
リ
ポ
ジ
ト
リ
C
コードクローン情報
(合成rev. N-1)
クローンセット遷移情報(N-1,N)
比較
コードクローン情報
(合成rev. N)
クローンセットA
クローンセットA
11
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP3:クローンセット遷移情報のマージ
2リビジョン間のクローンセット遷移情報のマージを行い,複数リビジョン
間におけるクローンセット遷移情報(クローンセット履歴)を得る
クローンセット
遷移情報(1,2)
クローンセット
遷移情報(2,3)
クローンセット
遷移情報(N-2,N-1)
…
クローンセット
遷移情報(N-1,N)
マージ
クローンセットAのクローンセット履歴
…
合成rev. 1
合成rev. 2
合成rev. 3
合成rev. 2で
クローンセットが発生
合成rev. N-1
合成rev. N
合成rev. Nでクローンセット
にコードクローンが追加
12
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP4:コードクローン作成者と利用者の特定
コードクローン作成者:クローンセット中のコードクローンの内,
実装日時が最も古いコード片の開発者
コードクローン利用者:既存のコード片を再利用した開発者
クローンセットAのクローンセット履歴
開発者A
作成者
A(2012/1/2)
…
B(2012/2/2)
A(2012/1/2)
A(2012/1/2)
B(2012/2/2)
B(2012/2/2)
利用者
C(2012/3/2)
開発者B
rev. 2
利用者
rev. N-1
開発者C
rev. N
13
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
実験概要
対象
プロジェクト名
eclipse.platform.text
eclipse.pde
実装言語
Java
Java
開発期間
2001/5/2 ~ 2003/12/22
2002/4/11 ~ 2003/12/18
リビジョン数
1369
144
開発者数
19名
3名
リビジョンをまたがってコピーの行われたクローンセットを対象とする
手順
STEP1:上記のリポジトリを時系列順にチェックアウトし,合成リポジトリを作成
STEP2:隣接する合成リビジョン間のクローンセット遷移情報を取得
STEP3:合成リビジョン(1 ~ 1513)におけるクローンセット履歴の取得
STEP4:コードクローン作成者と利用者の特定
出力結果の分析
14
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
出力結果
検出クローンセット数:969個
特定のリビジョンで発生後再利用の行われなかったクローンセット:813個
リビジョンをまたがった再利用が行われたクローンセット:156個(分析対象)
プロジェクト間コードクローンを含むクローンセット:5個
813
コピー
969
156
5
コピー
プロジェクト間
コードクローン
15
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
目的
O1:開発者ごとの再利用傾向がどの程度異なるか
再利用回数の多いクローンセットはユニークな利用者数も多いか
コミット数の多い開発者はコードクローンの作成数と利用数も多いか
O2:どのようなソースコードが多くの開発者に再利用されやすいか
ユニークな利用者数の多いコードクローンと,再利用回数は多いがユニー
クな利用者数の少ないコードクローンに違いがあるか
O3:どのような開発者が再利用を積極的に行うか
コードクローンの作成数と利用数の多い開発者にどのような特徴があるか
16
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用回数の多いクローンセットの特徴分析
20
18
16
14
12
10
8
6
4
2
0
再利用回数:18回
利用者数:3名
再利用回数
再利用回数:14回
利用者数:1名
ユニークな利用者数
再利用回数:4回
利用者数:3名
0
50
100
150
クローンセットID
再利用回数と利用者数に相関がなかった
利用者数の多いクローンセットにも再利用回数の少ないものがある
様々な再利用のされ方が存在する
17
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
コミット数の多い開発者についての分析
247
250
コミット数:370回
作成数:20回
再利用数:247回
200
163
150
回数
コミット数:74回
作成数:0回
再利用数:0回
100
50 37
0
38
20
9
作成数
再利用数
5 48
14
44
2
A B C D E F G H I J K
764 370 76 74 68 66 43 33 15 10 10
開発者ID
コミット数
L
9
M
9
N
8
O
7
P
6
Q
6
R
5
S
5
T
4
コミット数と再利用数に相関がなかった
コードクローン作成者や利用者である開発者は限られている
再利用の少ない開発者に対しての支援の必要性が考えられる
18
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用されやすいソースコードの分析(1/2)
ユニークな利用者数の多い(3名)クローンセット
設定の初期化を行っているソースコード
pref.setDefault(P_UNKNOWN_ELEMENT, WARNING);
pref.setDefault(P_UNKNOWN_ATTRIBUTE, WARNING);
・・・
UI操作について実装を行っているソースコード
gestureMap.put("E", "org.eclipse.ui.navigate.forwardHistory");
gestureMap.put("N", "org.eclipse.ui.file.save");
・・・
19
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用されやすいソースコードの分析(2/2)
ユニークな利用者数の多い(3名)クローンセット
色設定についての実装を行っているソースコード
if (store.contains(LINE_NUMBER_COLOR)) {
if (store.isDefault(LINE_NUMBER_COLOR))
rgb= PreferenceConverter.getDefaultColor(store, LINE_NUMBER_COLOR);
else
rgb= PreferenceConverter.getColor(store, LINE_NUMBER_COLOR);
・・・
開発者によって違いが出にくいような実装についての再利用
が多い
単純で理解しやすいソースコードが多い
20
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
積極的に再利用を行う開発者の特徴分析
300
247
250
200
作成数
再利用数
163
150
100
50
37
20
2
0
A
48
I
31
D
19
B
19
38
9
14
S
9
H
8
N
8
C
7
48
5
E
7
J
7
K
7
L
7
O
7
P
7
Q
7
G
6
T
6
F
5
44
M
5
R
5
開発者ID
関わっているEclipseプロジェクト数
関わっているプロジェクト数に関わらず開発者ごとにさまざまな再利用
傾向がみられる
21
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
考察
O1:開発者ごとの再利用傾向がどの程度異なるか
再利用回数とユニークな利用者数の相関はない
コミット数が多くても作成数・利用数はさまざまである
O2:どのようなソースコードが多くの開発者に再利用されやすいか
開発者によって違いが出にくいような実装を行っているソースコード
単純で理解しやすいソースコード
O3:どのような開発者が再利用を積極的に行うか
多くのプロジェクトに携わっていても開発者によって再利用・被再利
用回数はさまざまである
22
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
まとめと今後の課題
まとめ
複数プロジェクトにおけるコードクローンの作成者と利用者についての分析
手法を提案
提案手法を適用し,コードクローン作成者と利用者を分析
再利用傾向には個人差があり,再利用の少ない開発者への支援の必
要性を示した
今後の課題
より大規模なリポジトリへの適用
数千~一万リビジョン,3つ以上のプロジェクト
開発者の特徴分類・評価手法の構築
コードクローン作成数・再利用数などで開発者を分類
再利用支援ソフトウェアの作成
開発者へ再利用できそうなソースコードを提案
23
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
24
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University