Javaソフトウェア部品

Javaソフトウェア部品
解析・検索システムSPARS-Jの構築
○西 秀雄**,梅森 文彰**,横森 励士**,山本 哲男*
松下 誠**,楠本 真二**,井上 克郎**
*独立行政法人科学技術振興機構
**大阪大学情報科学研究科
発表内容
研究の背景と目的
SPARS-J
概要
システム構成
検索結果の順位付け
各部の説明
部品解析部
部品検索部
データ表示部
適用例
まとめと今後の課題
背景
ソフトウェア部品の再利用
既存の部品(コード片やドキュメント)を他のシステム内で
用いること
生産性と品質を改善し,開発効率が向上する
問題点
開発現場では効果的な再利用が行われていない
原因:部品ライブラリに関する開発者の知識不足
再利用できる部品の存在や,部品の使い方を知らない
ライブラリの部品情報を整理して,必要に応じて
容易に参照できるようにしたい
目的
部品情報を自動的に管理し,要求に応じて最適な
部品を提供する再利用支援システムの構築
再利用支援の対象とするライブラリ
閉じたライブラリ
企業内で開発され,外部に公開しない小規模な部品集合
将来に渡って再利用する部品の管理
開かれたライブラリ
Webなどを通じて,外部に公開された大規模な部品集合
要求に応じた最適な部品の検索
総合的な再利用支援を目指す
発表内容
研究の背景と目的
SPARS-J
概要
システム構成
検索結果の順位付け
各部の説明
部品解析部
部品検索部
データ表示部
適用例
まとめと今後の課題
SPARS-J
(Software Product Archive,analysis and Retrieval System for Java)
Javaソフトウェア部品解析・検索システム
大量の部品から自動的に情報を抽出する解析システム
検索要求に対し,最適な部品と情報を提供する検索シ
ステム
部品:1クラスまたは1インタフェースのソースコード
特徴
キーワード型の検索
検索結果の表示順位の工夫
キーワードの出現頻度,部品の利用実績
再利用時に役立つ情報の提示
部品の使用例,クラス階層構造
システム構成
ユーザ
ライブラリ
(Javaファイル群)
検索結果
ファイル
データ表示部
部品解析部
・ファイルから部品を抽出
・部品の解析情報をDBに格納
・DBの情報を参照して部品群化や
利用実績による順位付けを行う
検索要求
・検索要求を受け取り検索部に引き渡す
・検索結果の表示
検索要求
解析情報
該当する部品
部品検索部
格納情報
データベース(DB)
・解析情報を部品と関連付けして格納
・各情報から部品への逆引きの表を持つ
・要求に合致する部品をDBから検索
・検索結果をキーワードの出現頻度に
より順位付け
・順位の統合
格納情報
検索結果の順位付けについて
順位付けの観点
1. ユーザ要求と部品内容の適合度
– キーワードの出現頻度にもとづく順位付け
Keyword Rank(KR)法
2. 部品の再利用性
–
部品の利用実績にもとづく順位付け
Component Rank(CR)法
1,2 ともに評価が高いものが上位になることが望ま
しい
最終的に順位を統合して結果を表示する
部品解析部
Javaファイルから部品情報を抽出
解析時の処理
部品の切り出し
索引付け
利用関係の抽出
類似部品を部品群にまとめる
利用実績にもとづく部品の順位付け(CR法)
部品の切り出しと索引付け
部品の切り出し
ファイル中からクラスを見つけ
出し部品として切り出す
ファイル中の位置情報
(開始行番号,終了行番号)
索引付け
部品から索引キーを抽出
索引キー:キーワードと字句の
種類の組
予約語は抽出しない
キーワードの出現頻度を種
類別にカウント
public final class Sort {
/* quicksort */
private static void quicksort(…) {
int pivot;
:
quicksort(…);
quicksort(…);
}
}
キーワード
字句の種類
Sort
クラス定義名
1
quicksort
コメント
1
quicksort
メソッド定義名
1
pivot
変数名
1
quicksort
メソッド呼び出し
2
:
:
:
索引キー
出現頻度
利用関係の抽出
クラス間の関係を意味解析で求める
利用関係から部品グラフを構築
辺のラベルに関係の種類が付与される
継承
抽象クラスの実装
インタフェース実装
変数宣言の型
インスタンス生成
フィールド参照
メソッド呼び出し
public class Test extend Data{
:
public static void main(…) {
:
Sort.quicksort(super.array);
:
}
}
Data
利用関係の種類
継承
フィールド参照
Test
Sort
メソッド呼び出し
部品グラフ
類似部品
コピーした部品やコピーして一部変更した部品
類似部品をまとめて類似部品群とする
所属する部品に利用関係があれば,部品群間にも
その利用関係がある
c4
c5
c4 {c4}
c1
c1 '
c1
c2
c2 '
部品間の関係(部品グラフ)
c3
c5 {c5}
{c1, c1'} c1'
c2 {c2, c2'} c2'
{cc3}3
部品群間の関係(部品群グラフ)
類似部品群化
特徴メトリクスの一致している割合から類似の判断
を行う
計測するメトリクス値
複雑度
– クラス内のメソッド数, サイクロマチック数(分岐数)etc
– ソフトウェア部品の構造的特徴を表す
トークン構成
– 字句の種類ごとの出現数
– ソフトウェア部品の表層的特徴を表す
類似部品をまとめて,部品群グラフを生成する
利用実績にもとづく順位付け
Component Rank(CR)法
被利用回数が多い部品ほど,再利用しやすいと考えら
れる
使用例が多い
汎用的で,バグなどが含まれにくい
部品の利用実績を定量的に評価し,順位付けする
多くの部品から利用されている部品は重要である
重要な部品から利用されている部品もまた重要である
評価値(CR値)の意味
利用関係に沿って部品が参照されていくと仮定した場合の参
照されやすさ
CR値の計算
部品群グラフをもとにした繰り返し計算
計算手順
1. 各頂点に適当な重みを与える
– 重みの総和は1
C1
C2
v0.1665
0.167
0.200
1×50%
0.334
0.333
0.500
0.400
0.1665
0.333
0.167
0.200
v0.1665
0.167
0.200
1×50%
v30.400
×100%
0.333
0.500
2. 各有向辺の重みを求める
– 頂点の重みを,出ていく辺で分配する
v20.200
×100%
0.333
0.167
C3
0.3335
0.333
0.500
0.400
3. 各頂点の重みを再計算
– 頂点に入ってくる辺の重みの総和を,その頂点の重みとして再定義する
4. 頂点の重みが収束するまで,2.3.を繰り返し計算する
5. 収束した頂点の重みを,その頂点に対応する部品群のCR値とする
– 部品の評価値は属する部品群のCR値とする
部品検索部
データベースから部品を検索し,ヒットした部品を順
位付けしてデータ表示部に渡す
検索部の処理
部品の検索
ユーザ要求と部品内容の適合度による順位付け
順位の統合
部品の検索
検索キーの指定
要求の内容を端的にあらわすキーワード
検索対象(字句の種類,パッケージ)
全索引キーを検索し,検索キーとマッチする索引
キーをもつ部品を検索結果とする
ユーザ要求と部品内容の適合度
による順位付け
Keyword Rank(KR)法
マッチした索引キーが,部品を特徴付けるものであれば,
部品は要求と適合すると考えられる
索引キーの重みから適合度を評価し,順位付けする
重要な索引キー
– 部品に繰り返しあらわれる
– 希少で,特定の部品に偏ってあらわれる
– クラス定義名など,部品内容を象徴する字句種類の索引キー
各索引キーの重みの総和を評価値(KR値)として算出
テキスト文書検索システムで一般的に用いられるTF-IDF法
KR値の計算
マッチしたキーワード t の部品cにおける
重みwct を計算
TFi:種類 i のキーワード t の出現頻度
IDF:全部品数/ヒットした部品数
kwi:字句の種類 i の重み
wct  (
検索対象の種類数

kwi  TFi )  IDF
各索引キーの重みの総和をKR値とする
字句の種類
重み
クラス定義
200
インタフェース定義
50
メソッド定義
200
パッケージ
50
インポートパッケージ
30
メソッド呼び出し
10
フィールド参照
10
変数の型
10
生成したクラス
10
ローカル変数参照
1
コメント
30
文書コメント
50
行末コメント
10
文字列リテラル
1
字句の種類と重み
順位の統合
KRとCRの順位の統合を行う
統合手法
選挙のアルゴリズムとして知られるBordaの方法
投票者が様々な観点から候補者を評価して順位をつける
順位を統合して,投票者が納得する最良の候補者を上位に
する
SPARS-J
KRとCRから部品を評価して順位付けする
順位を統合して,ユーザ要求と適合し,かつ再利用しやすい部
品を上位にする
Bordaの方法
投票者10人が候補者AからE
の5人に投票
各投票者は候補者に対して順位
をつける
順位に対して割り当てた評価
値をもとに順位付け
1位=5点,2位=4点,…として
点数の多い順に並べる
A:15+3+6+4=28点
B:38点
C:38点
D:22点
E:26点
1位 2位 3位 4位 5位
3人
A
B
C
D
E
3人
E
B
C
D
A
2人
C
B
A
E
D
2人
C
D
B
A
E
順位の統合
1位 1位 3位 4位 5位
B
C
A
D
E
データ表示部
Webインタフェースを利用して,ユーザから検索要求
を受け取り,検索結果を提供する
Microsoft Internet Exploreなど
データ表示部の処理
検索要求の受け付け
順位付けした検索結果の表示
部品の詳細データ表示
再利用に有益な情報の提供
– 利用関係,クラス階層構造
検索要求受け付け画面
検索結果の表示
詳細データ表示(ソースコード)
詳細データ表示(類似部品群)
詳細データ表示(利用する部品)
詳細データ表示(利用される部品)
詳細データ表示(パッケージブラウザ)
発表内容
研究の背景と目的
SPARS-J
概要
システム構成
検索結果の順位付け
各部の説明
部品解析部
部品検索部
データ表示部
適用例
まとめと今後について
適用例(1/2)
Googleとの比較
Webから得られた約15万の部品をSPARS-Jに登録
検索キー”calculator applet”と”chat server client”で
検索した結果を比較
上位10件の検索結果が,要求と適合するかどうか判定した
適合条件:再利用しやすいソースコードがあるかどうか
GoogleはWebページ検索エンジンなので・・・
検索キーに”java source”を加える
結果のWebページから1リンクたどってもよい
適用例(2/2)
適用例1:
”calculator applet”
SPARS-J
ヒット9件
適合する部品は全部で7件
適用例2:
”chat server client”
SPARS-J
ヒット69件
適合する部品は全部で57件
SPARS-Jでは適合する部
品が上位にきている
まとめと今後の課題
Javaソフトウェア部品解析・検索システムSPARS-Jの構築
適用例では良好な結果が得られた
今後の課題
効果的な索引付け
協調フィルタリングによる精度の向上
順位付けに関する工夫
重み付けの検討
統合順位の求め方
システムの有効性評価
順位付けの検討
利用関係やパッケージブラウザの有効性