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

Download Report

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

クローン検出ツールを用いた
ソフトウェアシステムの類似度調査
山本哲男†, 松下誠†, 神谷年洋‡, 井上克郎†
†大阪大学, ‡PRESTO
1
背景
ソフトウェアシステム間の相違の度合を調べることに
よって、



システムの保守の様子や進化の度合を知ることができる。
システムのリリース時期の目安になる。
システムを改変する際の有益な指針になる。
ソフトウェアシステム間の違いがどれぐらいあるか、客
観的に知ることは重要
2
背景(つづき)
ドキュメントなどが存在すれば、システム間
の相違点を知ることは可能であろうが,定
量的な値を得ることは容易ではない。


システムが小規模な場合、そのシステムの
個々の構成要素を人間が調べ値を出すことも
可能
構造が複雑で大規模なシステムでは、何らか
の機械的な処理により、自動的に求めること
が必須
3
目的
二つのソフトウェアシステムの類似度メトリクス
と自動的に計測するツールの提案


類似度の形式的な定義を与え、それを求めるた
めの現実的な方法を示す。
実際に類似度を種々のUNIX系OSのいくつかの
バージョンに適用した結果を示す。
4
類似度の定義(1/2)
ファイルやソフトウェアシステムを抽象的に表し
たものをプロダクトと呼ぶ。
プロダクトは要素の集合とし、P={p1,…,pm}と
あらわす。


Pをファイルとすると、piは各行になる。
Pをシステムとすると、piはファイルになる。
5
類似度の定義(2/2)
P
Q
二つのプロダクト
P={p1,…,pm},Q={q1,…,qm}に対し、等価
な要素の対応R⊆P×Qが得られるとする。
PとQのRに対する類似度S(0≦S≦1)を以下の
ように定義する。
|{pi|(pi,qj)  R}||{qj|(pi,qj)  R}|
S(P,Q)
PQ
6
類似度の適用
定義した類似度を実際のソフトウェアシステム
やファイルに適用する。
プロダクトや要素をシステム、ファイル、ファイル
の行のいずれかにし、4種類の適用を考えた。
プロダクト
要素
対応
適用1 ファイル ファイルの行 同一行
適用2 システム
ファイル
ファイル名
適用3 システム
ファイル
ファイルの類似度
適用4 システム
ファイルの行 同一行
7
類似度の適用1
プロダクトをファイルし、要素をファイルの各行と
する。
対応Rは同一行の対応とする。
単一ファイルの対応で、複数のファイルには適
用できない。
8
類似度の適用2
プロダクトをソフトウェアシステムし、要素をシス
テムを構成するファイルとする。
対応Rは同じファイル名を持つファイルの対応と
する。
ファイル名だけの対応なので容易に計算できる。
ファイルの大きさを考慮しない。
9
P
類似度の適用3
Q
プロダクトをソフトウェアシステムし、要素をシステムを
構成するファイルとする。
全てのファイルの組み合わせに対して適用1のSを求
める。あるファイルに対してSが0より大きく最も高い組
み合わせをRとする。
ファイル名に依存しない。
ファイルの大きさが反映されない。全ての組み合わせ
でSを計算するため、手間がかかる。
10
類似度の適用4
プロダクトをソフトウェアシステムし、要素をシス
テムを構成するファイルの行とする。
対応Rは各行の対応とする。
ファイル名やファイルの大きさに影響されない。
この類似度をCSR(Corresponding Sourceline Ratio)と呼ぶ。
11
CSRの要素の対応
CSRを計算するためのRを求める方法

CCFinderとdiffを組み合わせ対応Rを求める。
 CCFinder — コードクローン検出ツール

ソースコードを入力としてコードクローンを出力する。
 diff — ファイルの差分抽出ツール


二つのファイル間の行単位の差分を求める。
CCFinderでクローンが見つかったファイルのペアに
対してdiffを実行する。
12
ツールの処理概要
P
前処理後のP
Step1
Step2
前処理
Q
Step3
CCFinder CCFinder
diff
の実行結果
の実行
の実行
前処理後のQ
diff
の実行結果
Step4
対応の
抽出
抽出結果
Step5
CSR
CSRの
計算
13
CCFinder と diff を用いる理由
diff だけを用いると、すべての組み合わせに対
して実行する必要がある。
CCFinder だけを用いると、CCFinderが対応
していない構文が抽出できない。
CCFinder でクローンを持つファイルの組を見つ
け、その組に diff を実行する。
14
CSRの適用
UNIX系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言語のソースのみ。
前処理としてコメントと空白行を削除する。
15
16
適用結果(1/2)
同一種類のOS間での類似度を求めた。
17
適用結果(2/2)
異なる種類のOS間での類似度を求めた。
FreeBSD3.0とNetBSD1.3で4.4BSDLite2が取り込まれてい
る。 0.5
NetBSD 1.0
0.45
NetBSD 1.1
0.4
NetBSD 1.2
0.35
NetBSD 1.3
0.3
0.25
0.2
0.15
0.1
0.05
0
FreeBSD 2.0 FreeBSD 2.0.5 FreeBSD 2.1
FreeBSD 2.2
FreeBSD 3.0
FreeBSD 4.0
18
CSRを用いたクラスタ分析
CSRを距離と考え、クラスタ分析を行った。
19
ファイル名を用いたクラスタ分析
ファイル命名規則や階層構造が同じならファイル名を用
いた類似度もシステムの分類には使用可能である。
20
FreeBSDとLinuxの類似度
由来が異なるOSであるFreeBSD4.0,
Linux2.2.15の間の類似度を求めた。
同一ファイル名はなく、実際には若干類似部
分が存在する。


ファイル名が対応する類似度はの値は0
CSRは0.066
21
CSRとリリース間隔の相関
FreeBSDのリリース間隔との相関を求めた。
CSRが最も高い相関を持つ。
対応の数だけでは相関が低い。
CSR
適用2
行数差
CSR×全行数
(対応の数)
-0.973
-0.964
0.937
-0.577
22
まとめ
二つのソフトウェアシステムの類似度メトリクス
CSR(Corresponding Source-line Ratio)
の提案を行った。
CSRをUNIX系OSに適用した。
CSRはソフトウェアシステム間の類似性を正しく
あらわす。
CSRとリリース間隔の間に高い相関を持つ。
23
今後の課題
さらなる類似度の妥当性の検証
類似度と再利用プログラミングとの関係の計
測
24