FreeBSD Ports Collection

FreeBSD Ports
Collection における
ファイルクローンの検出
大阪大学 情報科学研究科
井上研 博士前期課程1年
佐々木 裕介
Department of Computer Science,
Graduate School of Information Science & Technology,
Osaka University
概要
用語説明(Ports Collection, File Clone)
 既存研究(File Clone 検出のきっかけ)
 調査実験(度数分布グラフ)
 まとめ

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
FreeBSD Ports Collection
•
FreeBSD のパッケージプロジェクト集合
–
–
•
ports や cvsup などを用いてダウンロード,インストールが
できる
オープンソース
プロジェクトの特徴
–
–
プロジェクト内で別のオープンソースライブラリを使っている
ケースが存在する
様々な組織が関与
•
例) gcc を管理する団体, firefox を管理する団体, …
•
•
互いにどのオープンソースライブラリを使っているか気にかける必要がない
thunderbird と firefox なら互いに何を使っているか知っているかもしれない
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
ファイルクローン

プロジェクト間またはプロジェクト内部における2
つ以上のファイルの一致
 インデントやコメントは無視
 生成要因:プロジェクトをまたがるコピーなど
Project A
Project B
int main() {
printf(“Hello mhwse!”);
return 0;
}
コメント除去後の内容
が同じ
※プロジェクト間で一致している場合は便宜的に File Clone の共有と呼ぶ
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
既存研究 – D-CCFinder

Ports Collection に含まれる大量のファイルク
ローンを発見
 トークンベースよりかなり大きな単位でクローンと
なっていた
 ファイル単位で調べても同じ結果が得られる?
 ファイル単位でクローンについて詳しく調べている
研究は知られていない
 今までの研究とは異なる新しい知見が得られるのでは?
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
調査実験

分析対象
 ある時点における
Ports Collection の .c, .h
1,300,000 ファイル

次の度数分布を調査:
 1ファイル当たりのファイルサイズ
 1プロジェクト当たりのファイル数
 1File
Clone当たりのファイル数
 1プロジェクト当たりの他プロジェクトと共有のある
File Clone 数 (内部の繰り返しは除く)
上記の度数分布がべき乗則に従っていることが判明
各分布に対して線形回帰したときの自由度調整済み寄与率 R*2 を算出
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
PHP4,5 両方で登場す
る File Clone
100
(おそらく自動生成されたもの)
A
1
number of files
1ファイル当たりのファイルサイズ
50,000
500,000 5,000,000
自由度調整済み寄与率 0.9024
file size (Bytes)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
200
Real-Time OS のクロスコンパイラが
アーキテクチャ毎に用意されたもの
20
B
5
C
1
number of projects
1プロジェクト当たりのファイル数
5 10
50 100
500
5,000
自由度調整済み寄与率 0.8868
number of files inside project
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
PHP4,5 両方で登場す
る File Clone
PHP4,5 両方で2回登場
する File Clone
D
E
100
ク
ロ
ー
ン
セ
ッ
ト
の
組
数
左:PHP5 のみで登場
右:PHP4 のみで登場
F
1
number of file clone sets
1File Clone当たりのファイル数
5
10
50
100
自由度調整済み寄与率 0.8508
クローンの出現する回数
population of file clone set
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
500
右:PHP4 関連
中:bin のユーティリティ
左:PHP5 関連
50
G
5
H
1
number of projects with file clones
1プロジェクト当たりの他プロジェクトと共有
のあるFile Clone 数
5 10
50 100
500 1,000 5,000
自由度調整済み寄与率 0.8263
number of file clones in projects (clones inside project are excluded)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
H:プロジェクト間 File Clone 共有
(a)
(b)
共有ファイル数が同じ
エッジについては同じ
ファイルを共有
 これらのプロジェクトは
展開元のファイルがほ
ぼ同じ可能性が高い

(c)
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
補足:ports extract
cd /usr/ports/devel/A
make extract
展開された
ファイル
abc-A
フォルダA
下の
makefile
http://abc.org/
abc.zip
展開された
ファイル
abc-B
フォルダB
下の
makefile
cd /usr/ports/devel/B
make extract
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
考察

べき乗則から外れている File Clone には以下
の特徴が見つかった
 展開元が同じファイルが多数見つかった
 ある意味よく再利用されている?
 展開元が同じでもカスタマイズされている個所が存
在する
 Makefile

も解析する必要がある?
グラフで見せると小さなプロジェクトが目立たな
い
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University
まとめ

Ports Collection内のFile Cloneに関する度数
分布を調査
 以下に関してべき乗則が成立
 1ファイル当たりのファイルサイズ
 1プロジェクト当たりのファイル数
 1File
Clone当たりのファイル数
 1プロジェクト当たりの他プロジェクトと共有のあるFile
Clone 数 (内部の繰り返しは除く)

今後はソースファイル展開の方法を工夫
 同じ圧縮ファイルが別々の場所に展開された場合
にトレースする
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University