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

複数のプロジェクトを対象としたクローンの系譜にもとづく
ソースコード再利用分析手法の提案
大阪大学大学院情報科学研究科
コンピュータサイエンス専攻
○ 森脇匠哉,堀田圭佑,井垣宏,
楠本真二,井上克郎
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,Software
NY, USA,
1995. ACM.
Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology,
2
Osaka University
組織でのソフトウェア開発における再利用分析
再利用分析によりライセンス違反の特定,よく再利用されるソースコードにつ
いてのライブラリ化の提案,ソースコードの推薦などが可能となる[3]
再利用分析における課題
プロジェクト間での再利用の特定
開発者単位での再利用分析
組織
プロジェクトA
プロジェクトB
コピー
実装
開発者A
(実装)
コピー
開発者B
(利用)
開発者C
(利用)
開発者B
開発者A
3
[3] Naoki Fukuyasu, Sachio Saiki, Hiroshi Igaki, and Yuki Manabe, "Experimental Report of the Exercise Environment for Software Development PBL,"
In 13th ACIS International Conference
onEngineering
Software Engineering,
Intelligence,
Networking
and Parallel/Distributed
Computing,
pages
482-487, August
Software
Laboratory, Artificial
Department
of Computer
Science, Graduate
School of Information
Science
and Technology,
Osaka 2012.
University
目的とアプローチ
目的
組織でのソフトウェア開発における
開発者ごとの再利用動向を分析すること
アプローチ
複数プロジェクトをまたがるクローンの系譜を導出し,
その系譜から再利用動向の情報を取得
4
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
コードクローンとクローンの系譜
コードクローン
利用者
コードクローン: 同一または類似したコード片を持つもの
コードクローンを用いた既存の再利用分析研究
再利用の規模や性質を分析[4]
コードクローン作成者
コードクローンであるコード片の
内,実装日時が最も古いコー
ド片を実装した開発者
コピー
コード
クローン
A
コードクローン
利用者
既存のコード片を再利用した開発者
コピー
B
C
クローンの系譜[5]
コードクローンがいつ生成
され,どのような修正がな
されたかを示す
rev. i
rev. i+1
rev. i+2
rev. i+3
[4]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.
[5] Miryung Kim, Vibha Sazawal, and David Notkin. An empirical study of code clone genealogies.
In 13th ACM SIGSOFT international symposium on Foundations of software engineering, 2005.
5
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
再利用分析の概要
STEP1:
合成リポジトリの作成
リポジトリ
rev. i
STEP2:
合成リポジトリ クローン
の系譜の導出
rev. i+1
rev. i+2
rev. i
rev. i+1
rev. i+2
rev. i+3
・
・
・
・
・
・
・
・
・
・
・
・
rev. i+1
rev. i+2
rev. i+3
rev. i+3
STEP3:
コードクローン作成者
と利用者の特定
6
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP1: 合成リポジトリの作成
リポジトリA
Rev. A1
t1
t3
Rev. A2
a1’.java
a1.java
リポジトリB
Rev. B1
t2
Rev. B2
b1.java
全リビジョンを
時系列順にマージ
t4
b1.java
b2.java
time
合成
リポジトリ
Rev. 1
a1.java
複数リポジトリの
ファイル情報を持つリポジトリ
t1
Rev. 2
t2
Rev. 3
t3
Rev. 4
a1.java
a1’.java
a1’.java
b1.java
b1.java
b1.java
t4
b2.java
7
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP2: クローンの系譜の導出
本研究では,クローンの系譜特定ツールECTEC [6]を利用
コードクローンがいつ発生し,どのような変更がなされてきたかが分かる
再利用の検出
再利用の検出
クローンの系譜
rev. i
rev. i+1
rev. i+2
rev. i+3
コードクローン
の発生
変更なし
新たなコード片
が追加
コードクローンである
コード片が削除
[6]Yoshiki Higo, Keisuke Hotta, and Shinji Kusumoto. Enhancement of crd-based clone tracking. In Proceedings of the 13th International Workshop on
Principles of Software Evolution (IWPSE2013), pp. 28{37, 8 2013.
8
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
STEP3: コードクローン作成者と利用者の特定
ソースコードの実装日時からコードクローンの作成者と利用者を検出
コードクローン作成者:
再利用元のソースコードを記述した開発者
開発者A
A:2015/1/1
A:2015/1/1
A:2015/1/1
A:2015/1/1
B:2015/2/2
B:2015/2/2
コピー
B:2015/2/2
B:2015/2/2
コピー
開発者B
rev. i
コードクローン利用者:
再利用を行った開発者
C:2015/3/3
開発者C
rev. i+1
rev. i+2
rev. i+3
コードクローン利用者:
再利用を行った開発者
作成者と利用者の特定を行うことで,頻繁にソースコードが再利用される開発者の分
析や,再利用を積極的に行う開発者についての分析などが可能となる
9
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
仮想マシンを用いた並列処理
複数の仮想マシン(VM)を用意し,STEP2及びSTEP3を並列化
データベースサーバ用VM(DBserver)
プログラム実行用VM(worker)
STEP2:リビジョン(r)単位で並列化
STEP3:クローンの系譜(ID)単位で並列化
r1~2000
ID1~50
r2001~3000
ID51~100
DBserver
r3001~3500
・
・
・
・
・
・
ID101~150
・
・
・
r9901~10000
・
・
・
ID951 ~ 1000
workers
後半のリビジョンほど処理時間が掛かることを考慮
workers
10
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ケーススタディ
版管理システムSubversionで管理されているJavaプロジェクトを対象に実施
プロジェクト名 リビジョン数
開発者数
開発開始日時
benten及びmergedoc
に所属する開発者1名
benten
3258
3
2009/4/17
mergedoc
908
1
2007/11/8
itext及びmailmarket
に所属する開発者2名
itext
6738
28
2000/11/29
mailmarket
1158
7
2012/2/19
davmail
2332
1
2006/12/13
実験概要
AWS(Amazon Web Service)を用いて仮想マシンを用意
データベースサーバとしてm3.2xlargeインスタンスのVMを1台
プログラム実行用にc3.xlargeインスタンスのVMを30台
インスタンス名
OS
CPU
メモリ[GB]
m3.2xlarge
centOS 6.5
Intel(R) Xeon(R) CPU
E5-2670 v2 @ 2.50GHz
30
c3.xlarge
centOS 6.5
Intel(R) Xeon(R) CPU
E5-2680 v2 @ 2.80GHz
7.5
11
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
ケーススタディ分析項目
O1:開発者ごとの再利用傾向がどの程度異なるか
コミット数の多い開発者はコードクローンの作成数と利用数も多いか
O2:再利用されやすいソースコードを記述する開発者の特徴
再利用される回数の多い開発者はどのような特徴を持つか
コミット数,所属しているプロジェクト数など
O3:多くの開発者に再利用されるソースコードの特徴
再利用される回数の多いソースコードに特徴があるか
O4:再利用を積極的に行う開発者の特徴
再利用回数の多い開発者にどのような特徴があるか
コミット数,所属しているプロジェクト数など
O5: プロジェクト間での再利用の特徴
関わっている開発者や,ソースコードに特徴があるか
12
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
クローンの系譜と出力結果
処理時間
STEP1: 1分55秒
STEP2: 12時間44分42秒(全VMの合計時間延べ93時間57分12秒)
STEP3: 3分20秒(全VMの合計時間延べ81分44秒)
クローンの系譜について
クローンの系譜の数
再利用回数
リポジトリ間の再利用
5396
5812
10
開発者について(全開発者数は37名)
再利用された開発者
(セルフコピー含む)
再利用した開発者
(セルフコピー含む)
再利用された開発者
(セルフコピー含まず)
再利用した開発者
(セルフコピー含まず)
22
22
15
15
13
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
O1:開発者ごとの再利用傾向がどの程度異なるか
コミット数と再利用回数の関係(コミット数5以上のみ表示)
コミット数が多いと再利用回数も多いとは限らないことから,開発者ごとに再利
用の傾向が異なることが分かる
0
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
V
W
X
Y
3612
2268
2211
1337
648
345
319
275
267
258
240
218
182
175
142
114
82
73
51
40
34
24
19
10
7
6
4,000 3,500 3,000 2,500 2,000 1,500 1,000 500
コミット数
1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000
62 62
196 169
63
67
588 598
2 2
96 99
242 233
7 9
6 6
6 28
10 8
29 22
102 105
14 13
11 19
14 19
8 12
0 0
18 38
31 29
1 2
0 0
0 0
0 0
1 1
3826
3798
他プロジェクトのコード片を頻繁
に利用して開発を行っていた
ため再利用回数が増えた
0
再利用された回数
再利用回数
14
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
O2:再利用されやすいソースコードを記述する開発者の特徴
開発者Aはコミット数,再利用される回数,再利用回数のすべてが最も多い
Sourceforgeのプロジェクト11個に所属
(そのほとんどがitext関連のプロジェクト)
つまり,似ている機能のある他プロジェクトから再利用を行った可能性あり
itextにおけるRoleはAdmin(16人中Admin5人)
開発者E(コミット数に対しての再利用される回数,再利用回数が多い)
Sourceforgeのプロジェクト8つに所属
itextにおけるRoleはAdmin(16人中Admin5人)
開発者H(コミット数に対しての再利用される回数,再利用回数が多い)
Sourceforgeのプロジェクト3つに所属
itextにおけるRoleはAdmin(16人中Admin5人)
⇒ 『O4:再利用を積極的に行う開発者の特徴』についても同じであった
15
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
O3:多くの開発者に再利用されるソースコードの特徴[1/2]
クローンの系譜ごとの再利用回数(再利用された回数が2以上のみ表示)
全クローンの系譜5396個の内,2回以上の再利用が行われたのは321個であった
クローンの系譜数
300
261
250
200
150
100
48
50
5
4
1
1
4
5
6
7
0
2
3
1
8
9
10 11 12 13 14 15 16 17 18
再利用された数
16
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
O3:多くの開発者に再利用されるソースコードの特徴[2/2]
再利用された回数が7回のコード片
createPDF(String filename)というPDFを作成するメソッドが7つのファ
イルに定義されていた
⇒ ライブラリ化の提案に繋がる可能性あり
private static void createPdf(String filename) {
// we create a document with multiple pages and bookmarks
Document document = new Document();
・・・省略
document.close();
}
再利用される回数の多いコード片について,クラスやメソッド単位での再利用
といった,規模の大きい再利用が多いことが分かった
17
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
O5: プロジェクト間での再利用の特徴
プロジェクトmergedocからbentenへの再利用が9回
翻訳プログラムにおいて,文字列分割機能を実装したファイルをプロジェクトをま
たがってコピーすることで発生
あるプロジェクトで使用している一般的な機能を他のプロジェクトにうまく再利用
できていたと考えられる
public String trim() {
if (body != null) { return body; }
// 前後空白除去
trimSpace(original);
・・・省略
}
return body;
}
プロジェクトmergedocからitextへの再利用が1回
getter及びsetterが一致したものであった
18
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
まとめ
複数プロジェクトにおける開発者ごと再利用動向の分析手法の提案
および調査を行った
コミット数が多いと再利用回数も多いとは言えず,開発者によって再利用動向
が異なることを示した
再利用された回数の多いソースコードやプロジェクト間での再利用について特定
及び分析ができることを示した
今後の課題
より大規模なプロジェクトを対象に実験
扱える版管理システムやプログラミング言語の増加
分析プロジェクト数の増加
より利用者の多いソースコードについての分析を実施
再利用支援ソフトウェアの構築
ライセンス違反の特定,ライブラリ化の提案やソースコード推薦といった再利
用の支援を行う
19
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
20
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University