Presentation is loading. Please wait.

Presentation is loading. Please wait.

FreeBSD Ports Collection におけるファイルクローンの検出

Similar presentations


Presentation on theme: "FreeBSD Ports Collection におけるファイルクローンの検出"— Presentation transcript:

1 FreeBSD Ports Collection におけるファイルクローンの検出
大阪大学 情報科学研究科 井上研 博士前期課程1年 佐々木 裕介

2 概要 用語説明(Ports Collection, File Clone) 既存研究(File Clone 検出のきっかけ)
調査実験(度数分布グラフ) まとめ

3 FreeBSD Ports Collection
ports や cvsup などを用いてダウンロード,インストールができる オープンソース プロジェクトの特徴 プロジェクト内で別のオープンソースライブラリを使っているケースが存在する 様々な組織が関与 例) gcc を管理する団体, firefox を管理する団体, … 互いにどのオープンソースライブラリを使っているか気にかける必要がない thunderbird と firefox なら互いに何を使っているか知っているかもしれない

4 ファイルクローン プロジェクト間またはプロジェクト内部における2つ以上のファイルの一致 インデントやコメントは無視
生成要因:プロジェクトをまたがるコピーなど Project A Project B int main() { printf(“Hello mhwse!”); return 0; } コメント除去後の内容が同じ ※プロジェクト間で一致している場合は便宜的に File Clone の共有と呼ぶ

5 既存研究 – D-CCFinder Ports Collection に含まれる大量のファイルクローンを発見
トークンベースよりかなり大きな単位でクローンとなっていた ファイル単位で調べても同じ結果が得られる? ファイル単位でクローンについて詳しく調べている研究は知られていない 今までの研究とは異なる新しい知見が得られるのでは?

6 上記の度数分布がべき乗則に従っていることが判明
調査実験 分析対象 ある時点における Ports Collection の .c, .h 1,300,000 ファイル 次の度数分布を調査: 1ファイル当たりのファイルサイズ 1プロジェクト当たりのファイル数 1File Clone当たりのファイル数 1プロジェクト当たりの他プロジェクトと共有のあるFile Clone 数 (内部の繰り返しは除く) 上記の度数分布がべき乗則に従っていることが判明 各分布に対して線形回帰したときの自由度調整済み寄与率 R*2 を算出

7 1ファイル当たりのファイルサイズ PHP4,5 両方で登場する File Clone 自由度調整済み寄与率 0.9024
(おそらく自動生成されたもの) 自由度調整済み寄与率

8 1プロジェクト当たりのファイル数 Real-Time OS のクロスコンパイラが アーキテクチャ毎に用意されたもの
自由度調整済み寄与率

9 1File Clone当たりのファイル数 5 10 50 100 左:PHP5 のみで登場 右:PHP4 のみで登場
PHP4,5 両方で登場する File Clone PHP4,5 両方で2回登場する File Clone クローンセットの組数 D E F 5 10 50 100 自由度調整済み寄与率 クローンの出現する回数

10 1プロジェクト当たりの他プロジェクトと共有のあるFile Clone 数
右:PHP4 関連 中:bin のユーティリティ 左:PHP5 関連 自由度調整済み寄与率

11 H:プロジェクト間 File Clone 共有
共有ファイル数が同じエッジについては同じファイルを共有 これらのプロジェクトは展開元のファイルがほぼ同じ可能性が高い

12 補足:ports extract cd /usr/ports/devel/A make extract フォルダA 下の makefile
展開されたファイルabc-A 展開されたファイルabc-B フォルダB 下の makefile cd /usr/ports/devel/B make extract

13 考察 べき乗則から外れている File Clone には以下の特徴が見つかった グラフで見せると小さなプロジェクトが目立たない
展開元が同じファイルが多数見つかった ある意味よく再利用されている? 展開元が同じでもカスタマイズされている個所が存在する Makefile も解析する必要がある? グラフで見せると小さなプロジェクトが目立たない

14 まとめ Ports Collection内のFile Cloneに関する度数分布を調査 今後はソースファイル展開の方法を工夫
以下に関してべき乗則が成立 1ファイル当たりのファイルサイズ 1プロジェクト当たりのファイル数 1File Clone当たりのファイル数 1プロジェクト当たりの他プロジェクトと共有のあるFile Clone 数 (内部の繰り返しは除く) 今後はソースファイル展開の方法を工夫 同じ圧縮ファイルが別々の場所に展開された場合にトレースする

15 自由度調整済み寄与率

16 クローンの出現する回数 = 240 or 120 219 or 153-149 148 112 61 59 56 増加減少がなだらか
php4,php5 120か所で共通に使われているファイルは240か所で共通に使われているファイルと一緒に使われている 219 or intel のドライバファイル 148 112 61 504/506 が php4 関連 59 (667-29)/667 が php5 関連 56 (839-2)/839 が gstreamer-plugins-a52dec 関連 増加減少がなだらか 自由度調整済み寄与率

17 1630401 <= SIZE < 1640403 php-5.1.2/ext/date/lib/timezonedb.h

18 Area D & lang/nhc \\ \hline & x11/xorg-clients \\ \hline & audio/flite \\ \hline & emulators/xmess \\ \hline & emulators/xmame \\ \hline & x11/xorg-manpages \\ \hline & x11/xorg-libraries \\ \hline & devel/imake \\ \hline & net/nxserver \\ \hline & net/vnc \\ \hline

19 # of shared file = 28808 archivers/audio 6943- editor カテゴリの openoffice.org 5762 rtems-objc(sparc,sh,powerpc,mips) 5752- mozilla(thunderbird,xulrunner,firefox,sunbird) 3544 x-org-fonts gdb www/php5-tidy,converters/php5-iconv 1184 binutils(arm,sparc,sh,powerpc,msp430) 1080 postgresql php4関連

20 845 56 sysutils/gstreamer-plugins-cdio,devel/gstreamer-plugins-gconf 538 x11/ruby-gnome2,accessibility/ruby-atk 下の方でラインがそろっている部分 共通ファイル数が1

21 Area B 852 => 56 1308 => 59 1261 => 12 1059 => 61
Php5 tidy module for php5 1261 => 12 binutils 1059 => 61 php4 852 => 56 gstreamer-plugins

22 Area C RTEMS is a Real-Time Operating System of Embedded Software development. & devel/sparc-rtems-objc & devel/sparc-rtems-g77 & devel/sh-rtems-objc & devel/sh-rtems-g77 & devel/powerpc-rtems-objc & devel/powerpc-rtems-g77 & devel/mips-rtems-objc & devel/mips-rtems-g77 & devel/m68k-rtems-objc & devel/m68k-rtems-g77 & devel/i386-rtems-objc & devel/i386-rtems-g77 & devel/arm-rtems-objc


Download ppt "FreeBSD Ports Collection におけるファイルクローンの検出"

Similar presentations


Ads by Google