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