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
© Copyright 2026 ExpyDoc