クローン検出ツールを用いたソフトウェアシステムの類似度調査
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)
PQ
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