Javaソフトウェア 部品

SPARS-J 技術解説
大阪大学大学院情報科学研究科
井上研究室
横森 励士
2015/10/1
SPARS技術解説
1
発表の流れ
SPARS-Jのアーキテクチャ
部品の登録・解析
部品の切り出し・登録
検索機能実現を目的とした解析
ソースコードの解析 とキーワードの抽出
検索を支援するための情報提供を目的とした解析
類似部品の発見と部品群の構築
利用関係の抽出
部品の順位付け
部品の検索
シンプルな画面構成と豊富な付加機能の両立
キーワードベースの検索機能
閲覧支援機能(パッケージブラウザ,メソッド一覧,…)
2015/10/1
SPARS技術解説
2
SPARS-J
(Software Product Archive,analysis and Retrieval System for Java)
Javaソフトウェア部品検索システム
部品:1クラス・インタフェースのソースコード
再利用しやすい単位として,クラスを採用
SPARS-Jの特徴
大規模資産から自動的に部品を抽出
キーワードとトークン種類を検索キーとした全文検索
利用関係と,キーワード出現頻度を考慮した検索結果の順位
付け
部品詳細情報の提供
– 類似部品,部品の利用関係,各種メトリクス値など
2015/10/1
SPARS技術解説
3
SPARS-Jのアーキテクチャ
部品登録部
表示画面
Javaファイル
部品情報
部品詳細
リポジトリ
キーワード
トークン種類
検索結果
部品詳細
ユーザ
検索結果(順位)
部品詳細
登録時の流れ
部品検索部
クエリ
検索時の流れ
2015/10/1
SPARS技術解説
検索画面
4
部品の登録・解析
2015/10/1
SPARS技術解説
5
部品の登録
指定されたフォルダ
以下の全てのJava
ソースコードを解析
複数指定も可
指定した場所に,
リポジトリを作成
各部品の情報を
保存
検索に利用
2015/10/1
SPARS技術解説
6
部品の解析
部品登録時に行われる解析
部品の切り出し
検索機能実現を目的とした解析
ソースコードを文書とみなしての解析
キーワードの抽出
部品の索引付け
情報提供を目的とした解析
Javaプログラムの解析
類似している部品のグループ化
部品間の利用関係の抽出
部品の順位付け
2015/10/1
SPARS技術解説
7
部品の解析
部品登録時に行われる解析
部品の切り出し
検索機能実現を目的とした解析
ソースコードを文書とみなしての解析
キーワードの抽出
部品の索引付け
情報提供を目的とした解析
Javaプログラムの解析
類似している部品のグループ化
部品間の利用関係の抽出
部品の順位付け
2015/10/1
SPARS技術解説
8
部品の切り出し
Sort.java (FileID:25)
部品の切り出し
検出できたJavaファイル毎に
FileIDを付加
各ファイルを解析し,クラス・イ
ンタフェース毎に
クラス名,ファイルID,開始・終
了行番号を保存
部品IDを割り振り
1:
2:
3:
4:
5:
6:
7:
8:
9:
public final class Sort {
/* quicksort */
private static void quicksort(…) {
int pivot;
:
quicksort(…);
quicksort(…);
}
}
– 部品IDで管理
2015/10/1
部品ID
クラス名
FileID
開始行
終了行
30
Sort
25
1
9
SPARS技術解説
9
部品の解析
部品登録時に行われる解析
部品の切り出し
検索機能実現を目的とした解析
ソースコードを文書とみなしての解析
キーワードの抽出
部品の索引付け
情報提供を目的とした解析
Javaプログラムの解析
類似している部品のグループ化
部品間の利用関係の抽出
部品の順位付け
2015/10/1
SPARS技術解説
10
キーワードの抽出
部品の特徴を現す単語(キーワード)を抽出
構文解析時の情報を利用
予約語以外をキーワードとして抽出
プログラム上でのトークン種類も入手
public final class Sort {
/* quicksort */
private static void quicksort(…) {
int pivot;
:
quicksort(…);
quicksort(…);
}
}
2015/10/1
SPARS技術解説
11
キーワードの索引付け
キーワードの索引付け
public final class Sort {
/* quicksort */
private static void quicksort(…) {
int pivot;
:
quicksort(…);
quicksort(…);
}
}
キーワードとトークン種類の
組を索引キーに
部品IDと関連付けして保存
索引キーの出現頻度もカウ
ント
2015/10/1
ID
キーワード
30
Sort
クラス定義名
1
30
quicksort
コメント
1
30
quicksort
メソッド定義名
1
30
pivot
変数名
1
30
quicksort
メソッド呼び出し
2
30
:
:
SPARS技術解説
トークン種類
索引キー
:
出現頻度
12
部品の解析
部品登録時に行われる解析
部品の切り出し
検索機能実現を目的とした解析
ソースコードを文書とみなしての解析
キーワードの抽出
部品の索引付け
情報提供を目的とした解析
Javaプログラムの解析
類似している部品のグループ化
部品間の利用関係の抽出
部品の順位付け
2015/10/1
SPARS技術解説
13
類似部品のグループ化
ソフトウェア開発の際には,過去に作成したソース
コードを再利用することも多い
コピーしてそのまま利用する場合もあれば
クラス名など,一部を変更(カスタマイズ)して利用する場
合もある
類似部品に関する情報は検索支援に役立つ
同じ機能(クラス)を利用している,他の利用例の検索
がより簡単に
カスタマイズの仕方など,ノウハウの共有が簡単に
2015/10/1
SPARS技術解説
14
類似部品の判定とグループ化
類似部品をグループ化する
メトリクスを用いて類似部品を判定する
トークン構成や構造が似ている部品を類似部品に
得られた各グループを類似部品群と呼ぶ
c4
c5
c1
c1 '
c2
2015/10/1
c2 '
{c4}
部品群化
{c5}
{c1, c1'}
{c2, c2'}
c3
SPARS技術解説
{c3}
15
利用関係の抽出
部品(ソースコード)の場合,ある部品が他の部品を
利用することが多い
メソッド呼び出し,継承,etc ..... など多様にわたる
この点が自然言語文書との大きな違い
この利用関係はソースコードの理解を難しくしている原因
ソフトウェアの振る舞いを理解するための拠り所でもある
ソースコードを検索する際には,利用関係を追跡
できる機能は必須
2015/10/1
SPARS技術解説
16
利用関係の抽出
継承
7種のクラス間の関係を利用関係とする
利用関係は部品群グラフ上で表す
頂点は部品群,有向辺は利用関係
辺には利用関係の種類が付与される
抽象クラスの実装
インタフェース実装
変数型
インスタンス生成
フィールド参照
メソッド呼び出し
利用関係
public final class A extends B{
public static void main(…) {
:
C.method(super.field);
}
}
2015/10/1
B
C
継承
フィールド参照
メソッド呼び出し
A
SPARS技術解説
部品群グラフ
17
部品の順位付け
検索システムで多数の部品が候補として上がってき
たとき,それを順位付けする方法が必要
自然言語文書の場合,キーワードの出現頻度に基づい
て評価するのが一番効果的
ソフトウェア部品の検索システムの場合は,ソース
コードの特性を順位付けに生かすことができるはず
その部品がよく利用されている?
単なる出現頻度ではなく,出現場所を考慮
2015/10/1
SPARS技術解説
18
SPARS-Jにおける順位付け手法
1. 利用関係をもとにした評価手法(CR)
2. キーワードの出現頻度をもとにした評価手法(KR)
3. 1.2.の手法を統合した評価手法(CR+KR)
2015/10/1
SPARS技術解説
19
1.利用関係をもとにした評価手法
Component Rank(CR)法
利用関係から部品の重要さを評価し,順位付けする
多くの部品から利用されている部品は重要
重要な部品から利用されている部品もまた重要
使用例が多く,汎用的な部品が上位に来る
2015/10/1
SPARS技術解説
20
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
SPARS技術解説
C2 0.200C2
0.1665 0.200
0.200
0.400
0.167
C3
C2
C3
0.200
C3
0.3335 0.400
21
2.キーワードの出現頻度をもとにし
た評価手法
Keyword Rank(KR)法
文書検索システムで用いられる手法を部品検索に特化
部品を特徴付ける索引キーに,より重みを与える
ある部品に繰り返しあらわれる索引キー
希少で,特定の部品に偏ってあらわれる索引キー
クラス定義名など部品を象徴するトークン種類の索引キー
上位に来る部品はクエリと適合しやすい
2015/10/1
SPARS技術解説
22
3. 順位付け手法の統合
各順位付けの観点
1. 部品の使用例の多さ,汎用さ
– CR法
2. クエリと部品内容の適合度
– KR法
両面で優れている部品を検索結果の上位に
表示する
Bordaの手法を用いて順位を統合
2015/10/1
SPARS技術解説
23
3. 順位付け手法の統合
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:ヒットした部品群数)
クイックソート×3 + 評価点の計算
単純で高速
2015/10/1
SPARS技術解説
24
部品の検索
2015/10/1
SPARS技術解説
25
部品の検索
部品登録部
表示画面
Javaファイル
部品情報
部品詳細
リポジトリ
キーワード
トークン種類
検索結果
部品詳細
ユーザ
検索結果(順位)
部品詳細
登録時の流れ
部品検索部
クエリ
検索時の流れ
2015/10/1
SPARS技術解説
検索画面
26
部品検索部の実現
検索閲覧機能はcgiを用いて実現
ApacheなどのWebサーバ上に,cgiを設置
cgi 設置時にはリポジトリの位置情報が付加されたcgi が
生成される
SPARS-Jは指定されたリポジトリを参照する
2015/10/1
SPARS技術解説
27
検索機能について
キーワードベースの検索が可能
部品登録時に生成された,索引表を用いて検索
検索の種類
トップページからの検索
一般的な利用を想定した検索条件を設定
トークンの種類を特に意識せずに検索
検索オプションの利用
トークン種類を検索条件に含めることができる
– クラス名だけから,コメントだけから,コメント以外から,…
形態素解析により,語形変化した語も検出できる
2015/10/1
SPARS技術解説
28
検索画面(トップページ)
2015/10/1
SPARS技術解説
29
検索画面(検索オプション)
2015/10/1
SPARS技術解説
30
検索・閲覧の支援機能
豊富な検索・閲覧支援機能
閲覧しやすさの向上
検索結果一覧
ソースコードへのハイライト
メソッド一覧
ソフトウェア全体像の把握
パッケージブラウザ
類似部品一覧
利用部品一覧
被利用部品一覧
更なる解析,品質の調査に
メトリクス一覧
使い勝手の向上
ソースコード(アーカイブ)の取得機能
2015/10/1
SPARS技術解説
31
検索結果の表示
2015/10/1
SPARS技術解説
32
部品詳細表示(ソースコード)
パッケージブラウザ
サブパッケージ一覧
クラス一覧
メソッド一覧
メソッド定義行へ移動
2015/10/1
SPARS技術解説
33
部品詳細表示(類似部品群)
2015/10/1
SPARS技術解説
34
部品詳細表示(利用する部品)
2015/10/1
SPARS技術解説
35
部品詳細表示(利用される部品)
2015/10/1
SPARS技術解説
36
部品詳細表示(メトリクス)
2015/10/1
SPARS技術解説
37
まとめ
SPARS-Jのアーキテクチャを紹介した.
SPARS-Jは
大量のソースコードから自動的に部品を抽出し,キーワー
ドとトークン種類を検索キーとした全文検索を提供する.
検索結果の表示では,部品間の利用関係や,キーワー
ド出現頻度を考慮して,順位付けする.
部品の閲覧を支援するために,類似部品,部品の利用
関係,各種メトリクス値などの情報を提供する.
2015/10/1
SPARS技術解説
38