ソースコードの特徴語を用いた Javaソフトウェア部品の

ソースコードの特徴語を用いた
Javaソフトウェア部品の
自動分類システム
大阪大学 井上研究室
仁井谷 竜介
背景

ソフトウェア部品検索システムの必要性


ソフトウェア開発の大規模化・複雑化
ソフトウェアを再利用したり,管理する機会の増加
様々なソフトウェア部品検索システム
2005/03/10
名阪和合同研究会
2
検索システム

クエリ検索システム



クエリ(検索語・検索文)を入力として与える
適切なクエリを与えれば意図通りの文書が得られる
カテゴリ検索システム

あらかじめ用意されたカテゴリから文書を探す



カテゴリはツリー状に構成されていることが多い
クエリを入力しなくてよい
段階的に絞り込むことができる

コンピュータ → ソフトウェア → 表計算
本研究ではこちらに着目
2005/03/10
名阪和合同研究会
3
カテゴリ検索を部品に適用したときの問題点

部品をカテゴリに分類する必要がある


追加・更新する部品をどのカテゴリに入れるか判断し
なければいけない
対象数が多い

カテゴリを再構成・維持する必要がある

分類・カテゴリ維持は手作業では困難
自動化が不可欠

2005/03/10
名阪和合同研究会
4
研究の目的


ソフトウェア部品を対象としたカテゴリ検索用の自動分類
カテゴリのツリー(カテゴリ間の関係)の自動作成



Javaのクラスをソフトウェア部品とみなす
入力としてソースコードを用いる
低コストでカテゴリ検索の利点が得られる


2005/03/10
クエリを入力しなくてよい
段階的に絞り込むことができる
名阪和合同研究会
5
提案手法

ソースコードの特徴語に着目した分類
ソースコードを入力として部品をカテゴリに分類
カテゴリ間に関係を作成


特徴語の決定
特徴語=カテゴリ
として部品を分類
input
input
read
file
read
write
file
file
部品(=Javaクラス)
のソースコード
2005/03/10
カテゴリ間の関係を作成
file
write
input
read
write
名阪和合同研究会
6
分類の手順
(2)
(1)
単語の出現情報
解析
(2.1)
出現重み
計算
(2.2)
重み
(2.3)
利用関係
計算
LSA
計算
重み
単語
重み
(3)
単語一覧(特徴語の候補)
1. ソースコードを解析
2. 単語重み計算
1. 出現重み計算
2. 利用関係による重み加算
3. LSA(潜在的意味解析法)
3. 単語重みの高い語を特徴語とする
4. 1つの特徴語をそれぞれ1つのカテゴリとして部品を分類
2005/03/10
名阪和合同研究会
特徴語
決定
部品と特徴語の組
(4)
カテゴリ
生成
7
特徴語の候補となる単語の抽出


全ソースコード中に出現する単語の一覧を取得
語の記法統一を行う
大文字、小文字、’_’の有無などの違いを統一する
 例: XMLParser, XML_Parser, xmlParser
→ XmlParser


複合語分割を行う


2005/03/10
複数で構成されている語を一部または全部に分割
例: XmlParser→ Xml, Parser, XmlParser
名阪和合同研究会
8
ソースコードの出現場所による重み計算

出現した場所を考慮した重要度を求める
クラス定義
変数名
ドキュメントコメント
コメント
・・・
の和を求める
2005/03/10
100×log(1+出現回数)
10×log(1+出現回数)
15×log(1+出現回数)
2×log(1+出現回数)
名阪和合同研究会
9
利用関係による重み加算


利用している部品中の語の重みを加算する
利用関係に応じて加算時の割合を変える
継承
×0.5
メソッド呼び出し ×0.01
インスタンス化 ×0.05
など
継承関係での例
\語
file
親クラス
5
子クラス
1
2005/03/10
read
3
0
binary
0
2
\語
file
親クラス
5
子クラス 3.5
名阪和合同研究会
read
3
1.5
binary
0
2
10
LSA*(潜在的意味解析法)

重みが類似するものに近い重み与える補正
\語 input read file write print
A
10 12
8
0
0
B
8
0
9
0
0
C
0
1
0
8
40
D
0
0
2
30
20
\語 input read file write print
A
11
8
9
0
0
B
6
5
6
0
0
C
0
1
0
8
39
D
0
0
2
29
20
* Landauer, T. K., Foltz, P. W., & Laham, D. (1998). Introduction to Latent Semantic Analysis.
Discourse Processes, 25, 259-284.
2005/03/10
名阪和合同研究会
11
特徴語の決定


部品のソースコードから単語重みを求める
本手法では上位10語を部品の特徴語とする
全ソースコードから得られた単語(特徴語の候補)
単語の出現情報
input
output
read
write
get
なし
なし
メソッド定義3
メソッド呼出2
なし
メソッド定義7
メソッド呼出8
set
メソッド定義2
メソッド呼出10
file ・・・
クラス定義 1
メソッド定義 2
…
対象部品ソースコード中に出現する単語の出現箇所と出現回数
部品と関連が強いと
ソースコードに出現しない語も特徴語になり得る
単語重み
特徴語
2005/03/10
62.1
○
0
90.7
0
○
名阪和合同研究会
35.6
18.1
113.9
○
12
カテゴリの作成
1.
2.
得られた特徴語をそれぞれカテゴリとする
部品の特徴語をもとにカテゴリに部品を分類
特徴語の決定
特徴語=カテゴリ
として部品を分類
input
input
read
file
read
write
file
file
部品
2005/03/10
write
名阪和合同研究会
13
カテゴリ間の関係の作成手順
親子関係
作成
集合類似関係
作成
特徴語類似関係
作成
1. カテゴリを入力とする
2. 全てのカテゴリの組に対し3つの関係が成り立っているか調べる
3. 成り立っていればその関係をグラフの辺として出力とする
複数成り立っている場合は優先順位に従って1つだけ決まる
2005/03/10
名阪和合同研究会
14
親子関係


カテゴリを部品の集合としてみたときの包含関係
があるものの間に作られる関係
Aの要素の8割⊂B → Aが子 Bが親
部品の集合
カテゴリ
2005/03/10
名阪和合同研究会
15
集合類似関係


カテゴリを部品の集合としてみたとき類似するも
のの間に作られる関係
A∩Bが両方の8割を超えていたら類似
A
2005/03/10
B
A
名阪和合同研究会
B
16
特徴語類似関係

カテゴリに対応する特徴語間の類似度(コサイン
尺度)が一定値以上のカテゴリ間に作られる関
係
\語 input read
A
11
8
B
6
5
C
0
1
D
0
0
input
read
θ
cosθ = 類似度
2005/03/10
名阪和合同研究会
17
カテゴリ間の関係の優先順位
1.
2.
3.
4.
5.
集合として同一
包含関係
成り立っていれば
成り立っていれば
成り立っていれば
2005/03/10
→
→
→
→
→
集合類似関係
親子関係
集合類似関係
親子関係
特徴語類似関係
名阪和合同研究会
18
カテゴリ間の関係の例
親子関係
集合類似関係
特徴語類似関係
Io
File
Read
2005/03/10
Input
Write
名阪和合同研究会
Output
Print
Println
19
実装
ソースコード
分類部
検索部
カテゴリ名
クラス名
検索部
単語重み計算部
利用関係
計算部
入力
読込
SPARS-J
出現重み
計算部
LSA
計算部
2005/03/10
検索
検索結果
カテゴリ
DB
登録
SPARS 読込 SPARS-DB 特徴語
読込部
決定部
DB
部品情報
表示部
カテゴリ
生成部
名阪和合同研究会
登録
カテゴリ情報
表示部
カテゴリ木
表示部
20
評価

実際に分類を行い,検索結果を評価する


入力はロボットシステム部品254クラス(35システム)
評価には適合率を用いた
適合率 =

2005/03/10
|検索結果 ∩ 適合部品|
|検索結果|
適合の判断はソースコードを見て行った
名阪和合同研究会
21
評価した適合率
1.
カテゴリと部品の間の評価


2.
各部品が属するカテゴリの適合率
各カテゴリに属する部品の適合率
SPARS-J (全文検索)との検索結果の比較

2005/03/10
SPARS-Jで検索されず本システムで検索されたも
のの中での適合率
名阪和合同研究会
22
結果一例:部品が属するカテゴリの適合率


riu.parts.EnemyStatusが属するカテゴリの適合率
適合率 0.7
カテゴリ
2005/03/10
適合
理由
Point
○
座標を扱う
EnemyStatus
○
敵の状態を表す
Get
○
状態取得メソッドが多い
Time
○
時間を扱う
Riu
○
パッケージ名
Set
×
状態設定は行わない
Distance
○
距離を扱う
This
×
Java予約語
Param
×
Javadocタグ(@param)
Move
○
移動に関わる情報を持つ
名阪和合同研究会
23
各部品が属するカテゴリの適合率



縦軸が各部品の適合率
横軸は部品(適合率でソートしている)
avg. 0.86
例:適合率 2/3 の部品
部品
適合するカテゴリ
高い適合率が得られた
適合しないカテゴリ
2005/03/10
名阪和合同研究会
24
結果一例:カテゴリに属する部品の適合率


Pointに属する部品(実際は108クラス)の適合率
適合率 0.93
部品
理由
teamZero.Point
○
座標を扱う
mirror.Calc
○
座標計算クラス
mirror.posPredict.WaveEstim
ation
○
位置予測
kuro.Point
○
座標を扱う
riu.parts.EnemyStatus
○
座標を扱う
riu.Geometry.Geometry
○
座標計算クラス
mt.GravPoint
○
座標を扱う
heg.Vector2D
○
座標クラス
pbl3.BulletData
○
座標を扱う
riu.NotSerializable
×
空のクラス
...
2005/03/10
適合
名阪和合同研究会
25
各カテゴリに属する部品の適合率


縦軸が各カテゴリの適合率
avg. 0.85
例:適合率 4/7 のカテゴリ
カテゴリ
適合する部品
適合率0のカテゴリも存在した
高い適合率が得られた
適合しない部品
2005/03/10
名阪和合同研究会
26
考察


有効な分類が得られた
不適当な特徴語がある




2005/03/10
Javadocタグ(@param, @returnなど)
HTMLタグ(br, li)
前置詞,助詞,代名詞(to, in, this)
Javaの予約語(this)
名阪和合同研究会
27
SPARS-Jとの比較

SPARS-Jで検索されず本システムで検索された部品
の中でのカテゴリの適合率


SPARS-Jでは得られない部品
本システム
が検索できたカテゴリは43%
avg. 0.49
SPARS-J
この部分での適合率
検索結果がSPARS-Jの検索
結果に含まれたカテゴリの場合
適合率が定義できない
2005/03/10
名阪和合同研究会
28
考察(1/2)

適合率の平均が低い



ソースコード中に出現しない特徴語は適合しないもの
が多くある
カテゴリが減ったため、適合率の低いカテゴリ(特徴
を表さない特徴語)の割合が相対的に増えた
適合率が定義できないカテゴリが多い

2005/03/10
ソースコード中に出現する特徴語が多い
名阪和合同研究会
29
考察(2/2)

特徴語が部品につき10個固定なのが問題

10個では足りないような複雑な部品
その部品が属するカテゴリの適合率:高い
 特徴語のほとんどあるいは全てがソースコード中に出現
するため,SPARS-Jで検索可能
 特徴を表すが、ソースコード中に出現しない語が特徴語
にならない


10個では多すぎるような単純な部品
その部品が属するカテゴリの適合率:低い
 無関係な特徴語が幾つも含まれる

2005/03/10
名阪和合同研究会
30
まとめと今後の課題

まとめ



ソースコードの特徴語に着目した分類手法
提案手法による分類の有効性を確認
今後の課題



2005/03/10
部品ごとの適切な特徴語の数の調査
特徴語として適さない語の排除方法の考案
カテゴリ間の関係の評価
名阪和合同研究会
31
2005/03/10
名阪和合同研究会
質問をどうぞ
終
32