クローン検出ツールを用いた ソフトウェアシステムの類似度調査

Slides:



Advertisements
Similar presentations
API 呼び出し列の差分を利用した Android アプリケーション比較ツールの 試作 井上研究室 神田 哲也.
Advertisements

背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
コードクローン履歴閲覧環境を用いたクローン評価の試み
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
利用実績に基づくソフトウェア部品検索システムSPARS-J
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
プログラムの動作を理解するための技術として
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
大規模ソースコード集合を対象とした 類似関数集合群の抽出
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
ソースコードの同時修正支援における関数クローン検出ツールの有効性調査
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
ソードコードの編集に基づいた コードクローンの分類とその分析システム
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
Token Comparison Approach to Detect Code Clone-related Bugs
柔軟に変更可能な字句解析機構を持つ コードクローン検出ツールの開発
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
コードクローンのメトリクス値と 開発者の相関の調査
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
ソフトウェア保守のための コードクローン情報検索ツール
ウェブアプリケーションサーバの Degradation Schemeの 制御に向けて
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
メトリクス値の変化に基づく コードクローンの編集傾向分析
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
保守請負時を対象とした 労力見積のためのメトリクスの提案
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
東京工科大学 コンピュータサイエンス学部 亀田弘之
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
容易に使用可能な grep風コードクローン検索ツール
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
Don’t Touch My Code! Examining the Effects of Ownership on Software Quality C. Bird (マイクロソフト・リサーチ) et al. 担当者:吉田(NAIST)
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
Presentation transcript:

クローン検出ツールを用いた ソフトウェアシステムの類似度調査 山本哲男†, 松下誠†, 神谷年洋‡, 井上克郎† †大阪大学, ‡PRESTO

背景 ソフトウェアシステム間の相違の度合を調べることによって、 ソフトウェアシステム間の違いがどれぐらいあるか、客観的に知ることは重要 システムの保守の様子や進化の度合を知ることができる。 システムのリリース時期の目安になる。 システムを改変する際の有益な指針になる。 ソフトウェアシステム間の違いがどれぐらいあるか、客観的に知ることは重要

背景(つづき) ドキュメントなどが存在すれば、システム間の相違点を知ることは可能であろうが,定量的な値を得ることは容易ではない。 システムが小規模な場合、そのシステムの個々の構成要素を人間が調べ値を出すことも可能 構造が複雑で大規模なシステムでは、何らかの機械的な処理により、自動的に求めることが必須

目的 二つのソフトウェアシステムの類似度メトリクスと自動的に計測するツールの提案 類似度の形式的な定義を与え、それを求めるための現実的な方法を示す。 実際に類似度を種々のUNIX系OSのいくつかのバージョンに適用した結果を示す。

類似度の定義(1/2) ファイルやソフトウェアシステムを抽象的に表したものをプロダクトと呼ぶ。 プロダクトは要素の集合とし、P={p1,…,pm}とあらわす。 Pをファイルとすると、piは各行になる。 Pをシステムとすると、piはファイルになる。

類似度の定義(2/2) 二つのプロダクトP={p1,…,pm},Q={q1,…,qm}に対し、等価な要素の対応R⊆P×Qが得られるとする。 PとQのRに対する類似度S(0≦S≦1)を以下のように定義する。 ≡

類似度の適用 定義した類似度を実際のソフトウェアシステムやファイルに適用する。 プロダクトや要素をシステム、ファイル、ファイルの行のいずれかにし、4種類の適用を考えた。 プロダクト 要素 対応 適用1 ファイル ファイルの行 同一行 適用2 システム ファイル名 適用3 ファイルの類似度 適用4

類似度の適用1 プロダクトをファイルし、要素をファイルの各行とする。 対応Rは同一行の対応とする。 単一ファイルの対応で、複数のファイルには適用できない。

類似度の適用2 プロダクトをソフトウェアシステムし、要素をシステムを構成するファイルとする。 対応Rは同じファイル名を持つファイルの対応とする。 ファイル名だけの対応なので容易に計算できる。 ファイルの大きさを考慮しない。

類似度の適用3 プロダクトをソフトウェアシステムし、要素をシステムを構成するファイルとする。 P Q プロダクトをソフトウェアシステムし、要素をシステムを構成するファイルとする。 全てのファイルの組み合わせに対して適用1のSを求める。あるファイルに対してSが0より大きく最も高い組み合わせをRとする。 ファイル名に依存しない。 ファイルの大きさが反映されない。全ての組み合わせでSを計算するため、手間がかかる。

類似度の適用4 プロダクトをソフトウェアシステムし、要素をシステムを構成するファイルの行とする。 対応Rは各行の対応とする。 ファイル名やファイルの大きさに影響されない。 この類似度をCSR(Corresponding Source-line Ratio)と呼ぶ。

CSRの要素の対応 CSRを計算するためのRを求める方法 CCFinderとdiffを組み合わせ対応Rを求める。 ソースコードを入力としてコードクローンを出力する。 diff — ファイルの差分抽出ツール 二つのファイル間の行単位の差分を求める。 CCFinderでクローンが見つかったファイルのペアに対してdiffを実行する。

ツールの処理概要 P 前処理 CCFinder の実行 diff の実行 Q 対応の 抽出 CSRの 計算 CSR Step1 Step2 の実行結果 diff の実行 Q diff の実行結果 前処理後のQ Step4 対応の 抽出 抽出結果 Step5 CSRの 計算 CSR

CCFinder と diff を用いる理由 diff だけを用いると、すべての組み合わせに対して実行する必要がある。 CCFinder だけを用いると、CCFinderが対応していない構文が抽出できない。 CCFinder でクローンを持つファイルの組を見つけ、その組に diff を実行する。

CSRの適用 UNIX系OSを用いてCSRを計算した。 23個のOSのすべての組み合わせでCSRを求めた。 4.4BSDLite, 4.4BSDLite2 FreeBSD2.0, 2.0.5, 2.1, 2.2, 3.0, 4.0 NetBSD1.0, 1.1, 1.2, 1.3, 1.4, 1.5 OpenBSD2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8 23個のOSのすべての組み合わせでCSRを求めた。 カーネル部分のC言語のソースのみ。 前処理としてコメントと空白行を削除する。

適用結果(1/2) 同一種類のOS間での類似度を求めた。

適用結果(2/2) 異なる種類のOS間での類似度を求めた。 FreeBSD3.0とNetBSD1.3で4.4BSDLite2が取り込まれている。

CSRを用いたクラスタ分析 CSRを距離と考え、クラスタ分析を行った。

ファイル名を用いたクラスタ分析 ファイル命名規則や階層構造が同じならファイル名を用いた類似度もシステムの分類には使用可能である。

FreeBSDとLinuxの類似度 由来が異なるOSであるFreeBSD4.0, Linux2.2.15の間の類似度を求めた。 同一ファイル名はなく、実際には若干類似部分が存在する。 ファイル名が対応する類似度はの値は0 CSRは0.066

CSRとリリース間隔の相関 FreeBSDのリリース間隔との相関を求めた。 CSRが最も高い相関を持つ。 対応の数だけでは相関が低い。 適用2 行数差 CSR×全行数(対応の数) -0.973 -0.964 0.937 -0.577

まとめ 二つのソフトウェアシステムの類似度メトリクスCSR(Corresponding Source-line Ratio) の提案を行った。 CSRをUNIX系OSに適用した。 CSRはソフトウェアシステム間の類似性を正しくあらわす。 CSRとリリース間隔の間に高い相関を持つ。

今後の課題 さらなる類似度の妥当性の検証 類似度と再利用プログラミングとの関係の計測