Javaソフトウェア部品

Javaソフトウェア部品検索システム
SPARS-Jの構築
井上研究室
西 秀雄
2015/10/1
修士論文発表
1
発表内容
研究の背景と目的
SPARS-J
システム構成
各部の説明
部品解析部
部品検索部
ユーザインタフェース
性能評価
まとめと今後の課題
2015/10/1
修士論文発表
2
背景
過去開発された大量のソフトウェア資産が存在
企業内で開発されたソフトウェアプロダクト
WWWから入手可能なソフトウェア成果物
過去の資産を有効活用するために・・・
効率的なソフトウェアの部品化,可視化が望まれる
大量のソフトウェア資産から必要な部品・情報を検
索するシステムが必要
2015/10/1
修士論文発表
3
目的
ソフトウェア部品検索システムの構築
ソフトウェア的特性を考慮して,大量の資産から自動的
に部品を抽出
必要な部品を高速に検索
部品の機能や使用例に関係する詳細情報を検索者に
提供
システムの用途
既存部品を他のシステム開発で用いる再利用支援
部品の関連の掌握によるプログラム理解や保守支援
2015/10/1
修士論文発表
4
SPARS-J
(Software Product Archive,analysis and Retrieval System for Java)
Javaソフトウェア部品検索システム
部品:1クラス・インタフェースのソースコード
用途に応じた修正が可能
詳細が把握可能でプログラム理解や保守に便利
特徴
大規模資産から自動的に部品を抽出
キーワードとトークン種類を検索キーとした全文検索
利用関係と,キーワード出現頻度を考慮した検索結果
の順位付け
部品詳細情報の提供
類似部品,部品の利用関係,各種メトリクス値など
2015/10/1
修士論文発表
5
システムの構成
部品登録部
表示画面
Javaファイル
部品情報
部品詳細
データベース
キーワード
トークン種類
検索結果
部品詳細
ユーザ
検索結果(順位)
部品詳細
登録時の流れ
部品検索部
クエリ
検索時の流れ
2015/10/1
修士論文発表
検索画面
6
システムの構成
部品登録部
Javaファイル
部品情報
部品詳細
表示画面
1. 部品情報の抽出
2. 部品群グラフの構築
1. 利用関係の抽出
2. 類似部品の部品群化
3. 利用関係に基づく順位付け
データベース
キーワード
トークン種類
検索結果
部品詳細
ユーザ
検索結果(順位)
部品詳細
登録時の流れ
部品検索部
クエリ
検索時の流れ
2015/10/1
修士論文発表
検索画面
7
部品情報の抽出
部品の切り出し
クラス・インタフェースを見つけて,開
始,終了行番号を保存
部品IDの割り振り
部品の索引付け
予約語以外のキーワードとトークン
種類の組を索引キーとして抽出
索引キーの出現頻度をカウント
2015/10/1
修士論文発表
public final class Sort {
/* quicksort */
private static void quicksort(…) {
int pivot;
:
quicksort(…);
quicksort(…);
}
}
キーワード
トークン種類
Sort
クラス定義名
1
quicksort
コメント
1
quicksort
メソッド定義名
1
pivot
変数名
1
quicksort
メソッド呼び出し
2
:
:
:
索引キー
出現頻度
8
利用関係の抽出
継承
7種のクラス間の関係を利用関係とする
利用関係は部品グラフで表す
頂点は部品,有向辺は利用関係
辺には利用関係の種類が付与される
抽象クラスの実装
インタフェース実装
変数型
インスタンス生成
フィールド参照
メソッド呼び出し
利用関係
public final class A extends B{
public static void main(…) {
:
C.method(super.field);
}
}
2015/10/1
B
C
継承
フィールド参照
メソッド呼び出し
A
部品グラフ
修士論文発表
9
類似部品の判定と部品群化
類似部品:コピーした部品やコピーして一部変更した部品
コピーして別名で用いられた部品
SPARS-Jへの登録時には,コピー元と別部品として扱われる
実際はコピー元を利用している
類似部品を部品群にまとめることで,コピー元への利用関係を反映
所属している部品の利用関係を部品群の利用関係とみなす
類似判定はメトリクスを用いて高速に行う
c4
c5
c1
c1 '
c2
2015/10/1
c2 '
部品グラフ
{c4}
部品群化
{c5}
{c1, c1'}
{c2, c2'}
c3
修士論文発表
部品群グラフ
{c3}
10
利用関係に基づく順位付け
Component Rank(CR)法
利用関係から部品重要度を評価し,順位付けする
多くの部品から利用されている部品は重要
重要な部品から利用されている部品もまた重要
多く利用される部品や,重要な箇所で利用される部品
に大きな評価値が与えられる
使用例が多く,汎用的な部品が上位に来る
以降,得られた評価値をCR値,順位をCRと呼ぶ
2015/10/1
修士論文発表
11
CR値算出方法
部品群グラフをもとにした繰り返し計算
1. 各頂点に総和を1として適当な重みを与える
2. 頂点の重みを,出ていく辺で分配する
3. 入ってくる辺の重みの総和を,その頂点の重みとして再定義
4. 頂点の重みが収束するまで,2.3.を繰り返し計算
5. 収束した重みが部品群のCR値
C1
0.334
C1
0.334
C1v1×50%
CC210.167CC21
0.333
0.333 0.333
v1×50% 0.167
v3×100% 0.333
C3
0.333
2015/10/1
C3
0.333
CC2 10.1665CC21
0.500 0.167
0.400
0.1665
v2×100%
0.500
0.333
C3
C3
0.500
修士論文発表
C2 0.200C2
0.1665 0.200
0.200
0.400
0.167
C3
C2
C3
0.200
C3
0.3335 0.400
12
システムの構成
部品登録部
表示画面
Javaファイル
部品情報
部品詳細
1. 部品の検索
データベース
2. キーワード出現頻度に基づく
検索結果(順位)
順位付け
部品詳細
キーワード
検索結果3. 順位の統合
トークン種類
ユーザ
部品詳細
登録時の流れ
部品検索部
クエリ
検索時の流れ
2015/10/1
修士論文発表
検索画面
13
キーワード出現頻度に基づく順位
付け
Keyword Rank(KR)法
文書検索システムで用いられるTF-IDF法を改変
部品を特徴付ける索引キーに適当な重みを与える
部品に繰り返しあらわれる索引キー
希少で,特定の部品に偏ってあらわれる索引キー
クラス定義名など部品を象徴するトークン種類の索引キー
重みの総和を評価値として順位付け
クエリと適合する部品が上位に来る
以降,得られた評価値をKR値,順位をKRと呼ぶ
2015/10/1
修士論文発表
14
順位の統合
各順位付けの観点
1. 部品の使用例の多さ,汎用さ
– CR法
2. クエリと部品内容の適合度
– KR法
順位を統合して,両面で優れている部品を検索
結果の上位に表示する
部品検索部で行うため高速な方法が望ましい
2015/10/1
修士論文発表
15
順位の統合(Bordaの手法)
単純で高速
順位に対して評価点を割り当て,その合計点をもとに昇順にソート
例) 部品群 = { A, B, C, D, E }
CR KR 合計点
CR KR
CR+KR
1位
A
D
A
1
3
4
1位
A
2位
E
C
B
4
4
8
2位
C
3位
C
A
C
3
2
5
3位
D
4位
B
B
D
5
1
6
4位
E
5位
D
E
E
2
5
7
5位
B
CRとKRの順位
各部品群の評価点
統合された順位
平均O(nlogn) (n:ヒットした部品群数)
クイックソート×2 + 評価点の計算
2015/10/1
修士論文発表
16
システムの構成
部品登録部
表示画面
Javaファイル
部品情報
部品詳細
データベース
キーワード
トークン種類
検索結果
部品詳細
ユーザ
検索結果(順位)
部品詳細
登録時の流れ
部品検索部
クエリ
検索時の流れ
2015/10/1
修士論文発表
検索画面
17
検索画面
2015/10/1
修士論文発表
18
検索結果の表示
2015/10/1
修士論文発表
19
部品詳細表示(ソースコード)
パッケージブラウザ
サブパッケージ一覧
クラス一覧
メソッド一覧
メソッド定義行へ移動
2015/10/1
修士論文発表
20
部品詳細表示(類似部品群)
2015/10/1
修士論文発表
21
部品詳細表示(利用する部品)
2015/10/1
修士論文発表
22
部品詳細表示(利用される部品)
2015/10/1
修士論文発表
23
部品詳細表示(メトリクス)
2015/10/1
修士論文発表
24
性能評価
5つの部品集合を対象にDB構築時間,構築したDBサイズ,検索時
間を比較
評価環境
OS : FreeBSD 5.2-RC
CPU : Intel(R) Xeon 2.80GHz(Dual)
Memory : 2.0 GB
対象
File数(Size: MB) 部品数 部品群数 索引キー数
A : JDK13
– 部品数少,索引キー多
B : SourceForge
– 索引キー少,類似部品多
C : java.about.com
– 索引キー少
D : xml.apache.org
E : jakarta.apache.org
2015/10/1
A
3593 (35)
5407
5370
574048
B
6158 (67)
7594
966
132583
C
9561 (93) 12355
8995
306551
D
13696 (130) 15634
9033
745663
E
18384 (192) 20463
13839
886574
修士論文発表
25
DB構築時間
AがB,Cと同程度時間がかかっている
Aは索引キー数が多いため
Bは類似部品が多く,部品群化に時間がかかる
D,Eで極端に構築時間が大きくなる
メモリが尽きてスワップが生じた
構築時間は索引キー数に依存
File数(Size: MB) 部品数 部品群数 索引キー数 合計時間(秒)
2015/10/1
A
3593 (35)
5407
5370
574048
857.8
B
6158 (67)
7594
966
132583
933.7
C
9561 (93) 12355
8995
306551
866.9
D
13696 (130) 15634
9033
745663
6469.5
E
18384 (192) 20463
13839
886574
16093.1
修士論文発表
26
構築したDBサイズ
格納している情報はほぼ同じ割合
ファイル情報 : 1 %, 部品情報 : 30 %
利用関係情報 : 10%, 索引情報 : 60~70 %
索引キー数に依存
File数(Size: MB) 部品数 部品群数 索引キー数 DB size(MB)
2015/10/1
A
3593 (35)
5407
5370
574048
288
B
6158 (67)
7594
966
132583
288
C
9561 (93) 12355
8995
306551
252
D
13696 (130) 15634
9033
745663
800
E
18384 (192) 20463
13839
886574
1000
修士論文発表
27
検索時間
300件のクエリに対してCGIを経由せず検索
実際には,結果表示の時間がプラス
部品数の増加に従って検索時間も増加
索引キー検索よりも,ヒットした部品のソートに時間がかかる
File数(Size: MB) 部品数 部品群数 索引キー数 合計時間(秒)
2015/10/1
A
3593 (35)
5407
5370
574048
4.140
B
6158 (67)
7594
966
132583
4.787
C
9561 (93) 12355
8995
306551
5.964
D
13696 (130) 15634
9033
745663
14.395
E
18384 (192) 20463
13839
886574
19.514
修士論文発表
28
評価の考察
DB構築時間
2万個の部品でも5時間未満
一度構築するだけなので,実用上問題なし
DBサイズ
2万個の部品で1GB
全文検索的な索引付けを行うことを考えれば,妥当
検索時間
2万個の部品で1回あたり平均0.07秒
実用上問題なし
順位の統合手法を複雑にすると,精度は向上する可能性がある
が,検索時間は急激に増加すると思われる
結果,本システムの性能は実用的である
2015/10/1
修士論文発表
29
まとめと今後の課題
Javaソフトウェア部品検索システムSPARS-Jを構
築し,性能評価によりシステムの実用性を確認した
今後の課題
他のソフトウェア部品への対応
順位付けに関する検討
重み付けや統合順位の求め方
ライセンス管理
ユーザグループによる閲覧権限の設定
2015/10/1
修士論文発表
30
2015/10/1
修士論文発表
31
評価結果
DB構築時間
索引キー数に依存,Eで5時間未満
一度構築するだけなので,実用上問題なし
DBサイズ
索引キー数に依存,Eで1GB
全文検索的な索引付けを行うことを考えれば,妥当
検索時間
部品数に依存(ソート時間),Eで300クエリの合計検索時間が
19.5秒
順位の統合手法を複雑にすると,精度は向上する可能性あるが,
検索時間は急激に増加すると思われる
結果,本システムは実用的である
2015/10/1
修士論文発表
32
KR値の計算
総部品数をN,与えたm個の検索語をt1,…, tm,
検索対象としたトークン種類の集合をsubjectとし
たときの部品cのKR値
kw(s):トークン種類 s の重み
tfs(t,c):c中の種類 s の t の出現頻度
dfsubject(t):集合subject中のいずれかのトークン
種類であるtを含む部品数
m
KR   (loge (
i 1
 kw(s)  tf (t , c))  df
ssubject
s
N
i
subject
(ti )
所属する部品のKR値の平均値が部品
群のKR値
2015/10/1
修士論文発表
)
トークン種類
重み
クラス定義
200
インタフェース定義
50
メソッド定義
200
パッケージ
50
インポートパッケージ
30
メソッド呼び出し
10
フィールド参照
10
変数の型
10
生成したクラス
10
ローカル変数参照
1
コメント
30
文書コメント
50
行末コメント
10
文字列リテラル
1
トークン種類と重み 33
索引キーの重み計算
キーワードの出現頻度による順位付けで
の負担を減らす
キーワード
トークン種類重み
トークン種類
トークン種類
重み
クラス定義
200
インタフェース定義
50
メソッド定義
200
パッケージ
50
インポートパッケージ
30
メソッド呼び出し
10
Sort
クラス定義名
1
200
200
フィールド参照
10
quicksort
コメント
1
30
30
変数の型
10
quicksort
メソッド定義名
1
200
200
生成したクラス
10
pivot
変数名
1
1
1
ローカル変数参照
1
quicksort
メソッド呼び出し
2
10
20
コメント
30
:
:
:
:
:
文書コメント
50
行末コメント
10
文字列リテラル
1
索引キー
2015/10/1
出現頻度
索引キー重み
修士論文発表
34
類似判定
2種類の特徴メトリクスが一致している割合
複雑度メトリクス
クラス内のメソッド数, サイクロマチック数(分岐数)etc
ソフトウェア部品の構造的特徴を表す
トークン構成メトリクス
トークン種類ごとの出現数
ソフトウェア部品の表層的特徴を表す
2015/10/1
修士論文発表
35
順位の統合
効果:一面的な評価で不相応な高順位を得ている
ものを減らす
複数の検索システムが出力した順位を統合する,メタ検
索システムで用いられている
Searcherで行うため,高速であることが望ましい
Bordaの手法を用いる
単純で高速
選挙のアルゴリズムとして知られる
各投票者が様々な観点から候補者を評価,順位をつける
統合順位は多数の投票者が納得する候補者が上位になる
2015/10/1
修士論文発表
36