ソフトウェアリポジトリに おける コードクローン作成者 ・ 利用者関係...
description
Transcript of ソフトウェアリポジトリに おける コードクローン作成者 ・ 利用者関係...
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ソフトウェアリポジトリにおけるコードクローン作成者・利用者関係分析手法と
その適用
○ 森脇匠哉† 井垣宏† 山中裕樹†
吉田則裕†† 井上克郎† 楠本真二†
† 大阪大学大学院 情報科学研究科†† 奈良先端科学技術大学院大学 情報科学研究
科
2Software 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.
3Software 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.
4Software 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.
コピー
コピー
5Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
複数のプロジェクトに対する分析を行うにはプロジェクト間での再利用を分析する必要がある
再利用分析における課題 (1/2)
プロジェクト Bプロジェクト A
コピー
コピー
コピー
6Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用分析における課題 (2/2)
コードクローン
コードクローン作成者
コードクローン利用者
コピー
A B
コピー
C コードクローン利用者
開発者によって再利用に関するモチベーションは異なる誰が誰のソースコードを再利用したかを分析する必要がある
クローンセット中のコードクローンの内,実装日時が最も古いコード片を実装した開発者
既存のコード片を再利用した開発者
作成者の定義 利用者の定義
7Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
目的
O1 :開発者ごとの再利用傾向がどの程度異なるか再利用回数の多いクローンセットはユニークな利用者数も多いかコミット数の多い開発者はコードクローンの作成数と利用数も多いか
O2: どのようなソースコードが多くの開発者に再利用されやすいか
ユニークな利用者数の多いコードクローンと,再利用回数は多いがユニークな利用者数の少ないコードクローンに違いがあるか
O3 :どのような開発者が再利用を積極的に行うかコードクローンの作成数と利用数の多い開発者にどのような特徴があるか
8Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用分析の概要
STEP2 :クローンセット遷移情報の検出
STEP1 :合成リポジトリの作成
STEP4 :コードクローン作成者と利用者の特定
STEP3 :クローンセット遷移情報のマージ
入力:複数のリポジトリ クローンセット
遷移情報(1,2)
…
出力:クローンセット毎のコードクローン作成者と利用者
クローンセット履歴
クローンセット遷移情報 (N-
1,N)
rev. N-1
rev. 1
rev. 2
・・・
rev. N
…
…
…
9Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
リポジトリ B
rev. B2
2012/4/4
rev. B1
2012/2/4
リポジトリ A
rev. A2
2012/3/2
rev. A1
2012/1/2
複数プロジェクトのリポジトリからチェックアウトを行い,合成リポジトリを作成
STEP1 :合成リポジトリの作成
a1.java
a1’.java
b1.java
b1’.java
合成リポジト
リ C
合成 rev. 22012/2/4
合成 rev. 32012/3/2
合成 rev. 12012/1/2
合成 rev. 42012/4/4
a1.javaA
Aa1.java
Aa1’.java
Aa1’.java
b1.java
b1’.java
B
Brev. B2
2012/4/4
rev. B1
2012/2/4
rev. A2
2012/3/2
rev. A1
2012/1/2
b1.javaB
時系列順に並べ替え
10Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP2 :クローンセット遷移情報の検出 (1/2)
Added
新リビジョン旧リビジョン
コードクローンを「 Stable 」「 Added 」に分類する [6]
本研究では再利用傾向を分析するため「 Added 」に注目
コピー
クローンセット A
クローンセット A
Stable
[7] 山中裕樹 , 崔恩瀞 , 吉田則裕 , 井上克郎 , 佐野建樹 . “ コードクローン変更管理システムの開発と実プロジェクトへの適用” ,ソフトウェアエンジニアリングシンポジウム 2012 論文集 , pp.1–8, aug 2012.
11Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP2 :クローンセット遷移情報の検出 (2/2)
隣接する 2 リビジョンのコードクローンから遷移情報を取得する [6]コードクローン
情報( 合成 rev. 1)
コードクローン情報
( 合成 rev. 2)
コードクローン情報
( 合成 rev. N-1)
比較クローンセッ
ト A
クローンセット遷移情報(1,2)
クローンセット A
クローンセット A
クローンセット遷移情報 (N-1,N)
合成
リポ
ジト
リ
C
コードクローン情報
( 合成 rev. N)
比較
……
12Software 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)
クローンセット A のクローンセット履歴
合成 rev. N合成 rev. N-1合成 rev. 2
クローンセット遷移情報 (N-1,N)
マージ
…
合成 rev. 3
…
合成 rev. 1
合成 rev. 2 でクローンセットが発生
合成 rev. N でクローンセットにコードクローンが追加
13Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
クローンセット A のクローンセット履歴
rev. Nrev. N-1
C(2012/3/2)
rev. 2
A(2012/1/2)
B(2012/2/2)
コードクローン作成者:クローンセット中のコードクローンの内,実装日時が最も古いコード片の開発者コードクローン利用者:既存のコード片を再利用した開発者
STEP4 :コードクローン作成者と利用者の特定
開発者 A
開発者 B
作成者
開発者 C
…
利用者
利用者
B(2012/2/2)
A(2012/1/2) A(2012/1/2)
B(2012/2/2)
14Software 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 :コードクローン作成者と利用者の特定出力結果の分析
リビジョンをまたがってコピーの行われたクローンセットを対象とする
15Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
出力結果
969 156 5
検出クローンセット数: 969個特定のリビジョンで発生後再利用の行われなかったクローンセット: 813個リビジョンをまたがった再利用が行われたクローンセット: 156個( 分析対象 )
プロジェクト間コードクローンを含むクローンセット: 5個
コピー
プロジェクト間
コードクローン
コピー
813
16Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
目的
O1 :開発者ごとの再利用傾向がどの程度異なるか再利用回数の多いクローンセットはユニークな利用者数も多いかコミット数の多い開発者はコードクローンの作成数と利用数も多いか
O2: どのようなソースコードが多くの開発者に再利用されやすいか
ユニークな利用者数の多いコードクローンと,再利用回数は多いがユニークな利用者数の少ないコードクローンに違いがあるか
O3 :どのような開発者が再利用を積極的に行うかコードクローンの作成数と利用数の多い開発者にどのような特徴があるか
17Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用回数の多いクローンセットの特徴分析
0 20 40 60 80 100 120 140 16002468
101214161820
再利用回数
ユニークな利用者数
クローンセット ID
再利用回数と利用者数に相関がなかった利用者数の多いクローンセットにも再利用回数の少ないものがある様々な再利用のされ方が存在する
再利用回数: 18回利用者数: 3 名
再利用回数: 4回利用者数: 3 名
再利用回数: 14回利用者数: 1 名
18Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
コミット数の多い開発者についての分析
コミット数と再利用数に相関がなかったコードクローン作成者や利用者である開発者は限られている
再利用の少ない開発者に対しての支援の必要性が考えられる
A764
B370
C76
D74
E68
F66
G43
H33
I15
J10
K10
L9
M9
N8
O7
P6
Q6
R5
S5
T4
0
50
100
150
200
250
3720 9 4 1 4
163
247
38
5 8 4 2 4
作成数再利用数
開発者 IDコミット数
回数 コミット数: 74
回作成数: 0 回再利用数: 0 回
コミット数:370 回作成数: 20 回再利用数: 247回
19Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用されやすいソースコードの分析(1/2)
ユニークな利用者数の多い (3 名 ) クローンセット設定の初期化を行っているソースコード
UI操作について実装を行っているソースコード
pref.setDefault(P_UNKNOWN_ELEMENT, WARNING);pref.setDefault(P_UNKNOWN_ATTRIBUTE, WARNING);・・・
gestureMap.put("E", "org.eclipse.ui.navigate.forwardHistory");gestureMap.put("N", "org.eclipse.ui.file.save");・・・
20Software 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);・・・
21Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
積極的に再利用を行う開発者の特徴分析
関わっているプロジェクト数に関わらず開発者ごとにさまざまな再利用傾向がみられる
A48
I31
D19
B19
S9
H8
N8
C7
E7
J7
K7
L7
O7
P7
Q7
G6
T6
F5
M5
R5
0
50
100
150
200
250
300
3720
1 9 4 4
163
2
247
438
5 8 4
作成数再利用数
開発者 ID関わっている Eclipse プロジェクト数
22Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
考察
O1 :開発者ごとの再利用傾向がどの程度異なるか再利用回数とユニークな利用者数の相関はないコミット数が多くても作成数・利用数はさまざまである
O2: どのようなソースコードが多くの開発者に再利用されやすいか
開発者によって違いが出にくいような実装を行っているソースコード単純で理解しやすいソースコード
O3 :どのような開発者が再利用を積極的に行うか多くのプロジェクトに携わっていても開発者によって再利用・被再利用回数はさまざまである
23Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
まとめと今後の課題まとめ
複数プロジェクトにおけるコードクローンの作成者と利用者についての分析手法を提案提案手法を適用し,コードクローン作成者と利用者を分析再利用傾向には個人差があり,再利用の少ない開発者への支援の必要性を示した
今後の課題より大規模なリポジトリへの適用
数千~一万リビジョン, 3 つ以上のプロジェクト
開発者の特徴分類・評価手法の構築コードクローン作成数・再利用数などで開発者を分類
再利用支援ソフトウェアの作成開発者へ再利用できそうなソースコードを提案
24Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University