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

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
Advertisements

新設科目:応用数学 イントロダクション 情報工学科 2 年前期 専門科目 担当:准教授 青木義満.
シーケンス図の生成のための実行履歴圧縮手法
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
TF-IDF法とLSHアルゴリズムを用いた 関数単位のコードクローン検出法
月曜3限 1132教室 担当者: 河田 正樹 年度 経済データ解析講義内容 月曜3限  1132教室 担当者: 河田 正樹
Javaプログラムの開発履歴における アクセス修飾子過剰性の分析
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
ソフトウェアとネットワーク、自由な社会 g新部 裕.
アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
プログラムの動作を理解するための技術として
確率モデルによる 画像処理技術入門 --- ベイズ統計と確率的画像処理 ---
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
TA 高田正法 B10 CPUを作る 2日目 SPIMのコンパイル TA 高田正法
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
プログラム実行履歴を用いたトランザクションファンクション抽出手法
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
FreeBSDインストール 2002年4月10日.
大規模ソースコード集合を対象とした 類似関数集合群の抽出
コードクローン分析ツールGeminiを用いたコードクローン分析手順
ギャップを含むコードクローンの フィルタリング手法の提案
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
動的依存グラフの3-gramを用いた 実行トレースの比較手法
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
実行時情報に基づく OSカーネルのコンフィグ最小化
Javaプログラムの変更を支援する 影響波及解析システム
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
標本分散の標本分布 標本分散の統計量   の定義    の性質 分布表の使い方    分布の信頼区間 
数量分析 第2回 データ解析技法とソフトウェア
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
柔軟に変更可能な字句解析機構を持つ コードクローン検出ツールの開発
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
母分散の信頼区間 F分布 母分散の比の信頼区間
コードクローン編集者数に着目した開発履歴の分析
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
Geminiを用いた効果的なコードクローン分析方法
ソフトウェア保守のための コードクローン情報検索ツール
東京工科大学 コンピュータサイエンス学部 亀田弘之
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
コードクローンの分布情報を用いた特徴抽出手法の提案
構造的類似性を持つ半構造化文書における頻度分析
設計情報の再利用を目的とした UML図の自動推薦ツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
容易に使用可能な grep風コードクローン検索ツール
ソフトウェア理解支援を目的とした 辞書の作成法
わかりやすいパターン認識 第6章 特徴空間の変換 6.5 KL展開の適用法 〔1〕 KL展開と線形判別法 〔2〕 KL展開と学習パターン数
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Geminiを用いた効果的なコードクローン分析方法
識別子の読解を目的とした名詞辞書の作成方法の一試案
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

自由度調整済み寄与率 0.8214

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

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

Area D 89277426 & lang/nhc98 \\ \hline 57567073 & x11/xorg-clients \\ \hline 57306997 & audio/flite \\ \hline 56158086 & emulators/xmess \\ \hline 56158086 & emulators/xmame \\ \hline 53685549 & x11/xorg-manpages \\ \hline 53685549 & x11/xorg-libraries \\ \hline 53685549 & devel/imake-6 \\ \hline 52795390 & net/nxserver \\ \hline 51463947 & net/vnc \\ \hline

# 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 2140-2087 gdb 1296 59 www/php5-tidy,converters/php5-iconv 1184 binutils(arm,sparc,sh,powerpc,msp430) 1080 postgresql 1043 61 php4関連

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

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

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