利用 頻度に基づくソフトウェア部品の 解析・検索シス

利用頻度に基づくソフトウェア部品の
解析・検索システムの提案
山本 哲男*, 横森 励士**,
松下 誠**, 楠本 真二**, 井上 克郎**
*科学技術振興事業団
**大阪大学
1
背景
ソフトウェアの開発効率を向上するための手法と
して、再利用が注目されている
再利用とは既存のソフトウェア部品を同一システム内、
他のシステム内で用いること
部品が再利用に適しているか判断するために、
再利用性を定量的に示すことが必要
2
従来の再利用性評価手法
従来の再利用性評価手法は、個々の部品の静的な特性
を評価している
コードメトリクスを足し合わせて再利用性を評価[1]
インタフェース部分の情報から再利用性を評価[2]
静的な特性からは再利用性が低いと評価されていても、
実際には頻繁に再利用されている部品も存在する
利用頻度に基づく再利用性を定量的に評価することが必要
[1] L. Etzkorn et al.: ``Automated reusability quality analysis of OO legacy software,'' Information
and Software Technology, Vol. 43, Issue 5, pp. 295-308 (2001).
[2]山本 他: ``再利用特性に基づくコンポーネントメトリクスの提案と検証," FOSE2001, (2001).
3
利用頻度に基づく評価
計量社会学で一般に用いられている手法
Influence Weight[3](学術論文の重要度を評価)
多くの論文に引用される論文は重要である
重要な論文に引用される論文はまた重要である
他の応用
Page Rank[4] (Webページの重要度を評価)
多くのページからリンクされるページは重要である
重要なページからリンクされるページはまた重要である
[3] G. Pinski et al.:``Citation Influence for Journal Aggregates of Scientific Publications: Theory,
with Application to the Literature of Physics,“ Information Processing and Management, Vol. 12,
Num 5, pp. 297-312, (1976).
[4] L. Page et al.: ``The PageRank Citation Ranking: Bringing Order to the Web,'' http://wwwdb.stanford.edu/~backrub/pageranksub.ps
4
利用頻度に基づく再利用性
利用頻度に基づいた評価手法R3(Relative
Reusability Ranking)法
ソフトウェア部品の利用関係に着目
被利用数が多い部品は重要
重要な部品から利用されている部品もまた重要
5
本研究の目的
R3法に基づくソフトウェア部品の解析・検索システム
SPARS(Software Product Archive, analysis
and Retrieval System)の提案
プロトタイプを用いた適用実験を行う
提案手法が利用頻度を反映しているか
6
ソフトウェア部品
ソフトウェア開発者が再利用を行う単位をソフトウェ
ア部品と呼ぶ
ソースコードファイル、ドキュメントを部品として抽出
部品間には利用関係が存在する
c4
c5
c1
c1 '
c2
c2 '
(a) 部品間の関係
7
c3
類似部品群(1)
実際に部品を抽出した場合、コピーした部品やコ
ピーして一部変更した部品が多く存在する
類似した部品をまとめて類似部品群とする
c4
c5
cC44
c1
c1 '
c1
c2
c2 '
(a) 部品間の関係
8
c3
c2 C2
cC55
c1 '
C1
c2 '
C3 c3
類似部品群(2)
所属する部品に利用関係があれば、部品群間にも
その利用関係がある
c4
c5
c1
c1 '
c2
c2 '
(a) 部品間の関係
9
C4
C5
C1
c3
C2
C3
(b) 部品群間の関係
相対的再利用性
再利用を用いてソフトウェア開発が繰り返されると、利用関
係は時間とともに変化していく
十分な時間が経過した状態で、部品の利用頻度に基づい
て再利用性を評価
多数の部品間の利用関係から相対的に決まる
「相対的再利用性」
10
部品の分類
実際に部品を抽出した場合、コピーや類似した部品
が多数含まれる
類似部品群を相対的再利用性評価の対象とする
11
相対的再利用性評価値(1)
開発者は再利用性が高いと判断した部品群を利
用する
部品群を利用する→「再利用性が高い」という支持
投票をしたとみなす
多くの部品群から投票される部品群は再利用性評価が高い
再利用性評価が高い部品群から投票を受ける部品群は再利用
性評価が高い
部品群同士で互いに投票しあうことで評価値が循
環し相対的再利用性評価値が決まる
12
相対的再利用性評価値(2)
所属する部品群の評価値を部品の評価値とし、部
品を順位付けする
順位が高いほど再利用性が高い部品である
13
相対的再利用性評価値(3)
C1
0.333
vC
1 1
C1
0.200
C2
C1
C2
0.333
vC
0.400
0.200
0.167
2 2
50%
0.200
C2
0.167
100%
100%0.167 0.400
0.200
0.333
C1 C 0.1670.333 C2
0.333
C3 C2
C1 C2
C1 3
0.167
CvC
C0.250
C2 C 0.400
C2 0.167
0.417
13 3C
1
0.5000.333
0.167
0.167
1
2
0.334
0.250
C
0.500
0.2500.167 0.167
3
0.500
0.334 C3 0.417
0.167
0.250
C3
C3
C
C3 0.417
0.334 3 C
50%
3
0.417
14
システム構成
Java
ソースファイル群
Raw
Source
Repository
Analyzer
Source
Repository
Query
Parser
Searcher
Browser
15
Parser
Ranker
Relation
Repository
Raw Source Repository
ファイルをそのままの形で保存する
パッケージ名とクラス名をキーとして格納
クラスファイルそのもの
相対的再利用評価値
16
Parser
Javaファイルの構文解析を行う
解析結果をSource Repositoryへ格納
検索時に利用する
利用関係の抽出
利用関係をRelation Repositoryへ格納
クラスの継承関係
インターフェースの実装関係
抽象クラスの実装関係
メソドの呼び出し関係
フィールドの参照関係
17
Parser (続き)
特徴メトリクスの計測
クラス名
フィールド名
メソド名
メソドのシグニチャ
メソドの複雑度
18
Analyzer
類似ファイルを検索し、部品群化を行う
特徴メトリクスの一致している割合により判断
部品群化されたファイルの利用関係を統合する
19
Ranker
相対的利用評価値の計算を行う
この計算はグラフの隣接行列の固有ベクトルを求め
る計算に帰着される
計算した評価値はRaw Source Repositoryに格
納する
20
Searcher
検索キーを元に必要な部品を検索する
検索キー
キーワード
コード片
検索対象
コメント
コード
21
Browser
検索キーと一致した部分とその検索キーを含むファイ
ル名を表示する
Rankerで求めた評価値の順番に表示
22
適用実験
プロトタイプを作成し、部品の順位が利用頻度を反
映しているかどうかの実験を行った
適用対象は、JDK 1.3.0 および10個のアプリケー
ション(総部品数は6426)
23
適用結果
言語仕様上、直接的、間接的に利用しなければな
らないクラスが上位を占めている
順位
1
2
3
3
66
67
68
69
70
71
72
24
部品名
java.lang.Object.java
java.lang.Class.java
java.io.EOFException.java
・・・
java.io.IOException.java
.org.w3c.dom.Node.java
java.lang.Throwable.java
java.lang.StringBuffer.java
javax.naming.NamingException.java
java.lang.VirtualMachineError.java
org.w3c.dom.NodeList.java
java.io.InputStream.java
評価値
0.130842077
0.070779904
0.051143644
0.051143644
0.034599252
0.03047256
0.014695051
0.013914379
0.010906467
0.010547134
0.010030122
計算手法の有効性評価
非利用回数だけの順位はアプリケーションでよく利用
されている部品が上位にくる
順位
25
部品名
1 java.lang.Object.java
2 java.lang.Class.java
3 java.io.EOFException.java
・・・
3 java.io.IOException.java
66 .org.w3c.dom.Node.java
67 java.lang.Throwable.java
68 java.lang.StringBuffer.java
69 javax.naming.NamingException.java
70 java.lang.VirtualMachineError.java
71 org.w3c.dom.NodeList.java
72 java.io.InputStream.java
評価値
順位 部品名
0.130842077
1 java.lang.Object.java
0.070779904
2 java.io.EOFException.java
0.051143644
…
2 java.io.IOException.java
0.051143644
65 java.util.Vector.java
0.034599252
66 java.lang.StringBuffer.java
0.03047256
67 java.util.HashMap.java
0.014695051
67 java.util.Hashtable.java
0.013914379
69 java.util.Enumeration.java
0.010906467
70 java.io.File.java
0.010547134
71 java.lang.Class.java
0.010030122
72 org.w3c.dom.Node.java
被利用回数
1201
1120
1120
545
458
448
448
444
326
297
285
部品群化の有効性評価
例外を扱うクラスがよく利用されている
コピーされた部品の把握
順位
26
部品名
1 java.lang.Object.java
2 java.lang.Class.java
3 java.io.EOFException.java
・・・
3 java.io.IOException.java
66 .org.w3c.dom.Node.java
67 java.lang.Throwable.java
68 java.lang.StringBuffer.java
69 javax.naming.NamingException.java
70 java.lang.VirtualMachineError.java
71 org.w3c.dom.NodeList.java
72 java.io.InputStream.java
評価値
0.130842077
0.070779904
0.051143644
0.051143644
0.034599252
0.03047256
0.014695051
0.013914379
0.010906467
0.010547134
0.010030122
順位 部品名
1 java.lang.Object.java
2 java.lang.Class.java
3 java.lang.Throwable.java
4 org.w3c.dom.Node.java
5 java.lang.Exception.java
6 java.lang.StringBuffer.java
7 java.io.IOException.java
8 java.lang.SecurityManager.java
9 java.io.InputStream.java
10 org.w3c.dom.NodeList.java
11 java.lang.reflect.Constructor.java
評価値
0.137758265
0.074010154
0.051009801
0.029174933
0.028564972
0.015180348
0.012814825
0.00959242
0.00916187
0.009015037
0.007984003
まとめ
まとめ
R3法に基づくソフトウェア部品の解析・検索システム
SPARS(Software Product Archive, analysis and
Retrieval System)の提案
提案手法が利用頻度を反映しているかプロトタイプを用
いた適用実験を行った
今後の課題
SPARSの実装
利用関係の種類による重み付けの検討
27
28
相対的再利用性評価値(4)
相対的再利用性評価値を求める計算は行列の固
有ベクトルを求める計算に帰着される
C1
50%
v1
C1
C2
v2
50%
0.200
0.400
100%
C2
0.200
100%
0.200
0.400
C3
v3
C3
0.400
29
0.200
 v1 
 
V   v2 
v 
 3
0

D  0
1

0 .5 0 .5 

0
1 
0
0 
V = Dt・V
λ=1の固有ベクトル
 0 .4   0 0 1   0 .4 
  
  
 0 .2    0 .5 0 0    0 .2 
 0 .4   0 .5 1 0   0 .4 
  
  
評価が循環しない場合
部品全体における票の重みの偏りを分析することで相対的
再利用性を評価している
票が全体に循環しなければ正しく評価できない
利用してない部品に対しては非常に低い重みの票を投票したとみなす
30