FreeBSD Ports Collection

ソースコード出典調査のための
コードクローン情報収集システムの試作
井上研究室 M2 佐々木 裕介
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
1
背景

企業ではオープンソースソフトウェア(OSS)の
再利用が行われている
 再利用には様々なリスクを伴う
 ライセンスに違反して利用
 利用したソースコードファイルにバグが混入

以下の情報が必要
 ライセンス
 開発元
 利用しているソースコードファイルの保守状況
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
2
OSS 間における再利用
コードクローン関係
ライセンス
違反
波及
コードクローン関係
再利用
再利用
組織 A
組織 B
ファイルの更新日時が
最も古い
起源

出典調査


組織 C
入手元 ファイルのコード部分が
完全に一致
手元にあるファイルの入手元と起源を特定すること
Web 上のコードクローン情報を利用

コードクローン情報


与えられたファイルと類似したファイル
類似したファイルが存在する場所(URL)
出典調査には多くのコードクローン情報が必要
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
3
本研究の目的

コードクローン情報収集システムの開発
 入力されたファイルに対するコードクローン情報を
収集
 Web 上からコードクローン情報を効率よく取得
 既存のソースコード検索システムを利用
 SPARS/R
 Google
Code Search
 Koders
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
4
コードクローン情報収集システム
出力:コードクローン情報
Type A
入力:ファイル
http://unicore.cvs.sourceforge.net/
viewvc/unicore/unigrids/
…/AttributedQNameType.java
AttributedQNameType.java
http://unicore.cvs.sourceforge.net/
viewvc/unicore/unicore6/
…/AttributedQNameType.java
Type A:
与えられたファイルとコード部分が
完全に一致するファイル
Type B:
一部の識別子や定数などを除いて
コード部分が一致するファイル
入手元
Type B
なし
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
5
コードクローン情報収集システム
コードクローン情報収集システム
入力
出力
コードクローン
検出
単語抽出
ソースコード
ファイル
コードクローン情報
ファイル
ファイルの場所(URL)
結果が10以上得られるまで繰り返し
クエリ生成
Type A
検索
ファイル
ファイルの場所(URL)
Type B
検索クエリ
SPARS/R
ファイルとそのURL
ソースコード検索システム
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
6
単語抽出
入力されたファイル
例)AttributedQNameType.java
apache
message
addressing
attributedqnametype
serializable
apache
encoding
simpletype
javax
namespace
…
コード部分から単語を抽出
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
7
単語のランク付け
apache
message
addressing
attributedqnametype
serializable
apache
encoding
simpletype
javax
namespace
…
No. 単語
出現頻度
1
_value
18
2
apache
11
2
qname
11
4
namespace
10
4
javax
10
6
attributedqna
metype
9
6
typedesc
9
8
elemfield
6
9
__equalscalc
5
…
…
…
出現頻度の高い順にランク付け
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
8
クエリ生成と検索 1/2
コードクローン情報収集システム
No. 単語
ランク値
1
_value
18
生成されるクエリ (AND 検索)
2
apache
11
2
qname
11
4
namespace
10
4
javax
10
6
attributedqna
metype
9
__equalscalc+__hashcodecalc
+_equals+_hashcode+_javatype
+_value+_xmltype+apache
+attributedqnametype+description
+elemfield+encoding+get_value+javax
+namespace+qname+string+typedesc
6
typedesc
9
…
…
…
18
other
…
検索
SPARS/R
全て利用(最大19)
単語を1つ減らして再検索
(10以上見つかるまで繰り返し)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
9
クエリ生成と検索 2/2
コードクローン情報収集システム
No. 単語
ランク値
1
_value
18
2
apache
11
生成されるクエリ (AND 検索)
2
qname
11
_value+apache+namespace+qname
4
namespace
10
4
javax
10
6
attributedqna
metype
9
6
typedesc
9
8
elemfield
6
9
__equalscalc
5
…
…
…
単語数 4
検索
SPARS/R
検索終了
…(以下省略)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
10
ファイルとURLの取得
コードクローン情報収集システム
http://.../unigrids/
…/AttributedQNameType.java
SPARS/R
取得
取得
http://.../unicore6/
…/AttributedQNameType.java
…(以下省略)
…(以下省略)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
11
コードクローン検出
コードクローン情報
検索結果
(URL)
(URL)
TypeA
コードクローン検出
(URL)
(URL)
…
入力
FCFinder
出力
CCFinder
TypeB
入力
出力
入力されたファイル
AttributedQNameType.java
なし
除外
…
類似でないファイル
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
12
システムの試作

単語の抽出
 コード部分から抽出(デフォルト)
 コメント文から抽出

単語のランク付け
 出現頻度(デフォルト)
 共起する単語の種類数

ファイル名を用いた検索クエリも利用可能
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
13
適用事例
Type A
ChangePermissions.java
http://unicore.cvs.sourceforge.net/viewvc/unicore/
unigrids/core/unicoregs/core/src/org/unigrids/
services/atomic/sms/ChangePermissions.java
入手元
Wed, 03 May 2006 17:03:38 GMT
http://unicore.cvs.sourceforge.net/viewvc/
unicore/unicore6/unicoregs/src/org/unigrids/
services/atomic/sms/ChangePermissions.java
入手元
出典調査
1.システムへファイルを入力
2.システムからコードクローン情報を取得
3.Type A を入手元と確定
4.各ファイルの更新日時を取得
5.最も古いものを起源と確定
Fri, 28 Jul 2006 11:49:32 GMT
Type B
http://unicore.cvs.sourceforge.net/viewvc/unicore/
unigrids/core/unicoregs/src/org/unigrids/services/
atomic/sms/ChangePermissions.java
起源
Fri, 17 Feb 2006 13:23:42 GMT
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
14
適用事例 – 追加調査
http://unicore.cvs.sourceforge.net/viewvc/unicore/
unigrids/core/unicoregs/src/org/unigrids/services/
atomic/sms/ChangePermissions.java
起源
unicoreGS 1.3 リリース
Fri, 17 Feb 2006 13:23:42 GMT
変更
http://unicore.cvs.sourceforge.net/viewvc/unicore/
unigrids/core/unicoregs/core/src/org/unigrids/
services/atomic/sms/ChangePermissions.java
入手元
Wed, 03 May 2006 17:03:38 GMT
http://unicore.cvs.sourceforge.net/viewvc/
unicore/unicore6/unicoregs/src/org/unigrids/
services/atomic/sms/ChangePermissions.java
入手元
unicoreGS 1.4.1リリース
プロジェクト
丸ごとコピー
unicore6 プロジェクト作成
Fri, 28 Jul 2006 11:49:32 GMT
出典調査を行うことで
さらにファイル再利用の過程まで明らかになった
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
15
まとめ

OSS の再利用にはコードクローン情報が必要
 コードクローン情報を短時間で集めるのは困難

コードクローン情報を効率的に収集するシステ
ムを試作
 Web

上のソースコード検索システムを利用
適用実験
 試作したシステムを使い実際に出典調査を行うこと
ができた
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
16