ソースコードの特徴語を用いた java ソフトウェア部品の 自動分類システム

32
ソソソソソソソソソソソソソソ Java ソソソソソソソソソ ソソソソソソソソ 大大大大 大大大大大 大大大 大大

Upload: mercedes-soto

Post on 02-Jan-2016

52 views

Category:

Documents


0 download

DESCRIPTION

ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム. 大阪大学 井上研究室 仁井谷 竜介. 背景. ソフトウェア部品検索システムの必要性 ソフトウェア開発の大規模化・複雑化 ソフトウェアを再利用したり,管理する機会の増加 様々なソフトウェア部品検索システム. 検索システム. クエリ検索システム クエリ(検索語・検索文)を入力として与える 適切なクエリを与えれば意図通りの文書が得られる カテゴリ検索システム あらかじめ用意されたカテゴリから文書を探す カテゴリはツリー状に構成されていることが多い クエリを入力しなくてよい - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

ソースコードの特徴語を用いた

Javaソフトウェア部品の自動分類システム

大阪大学 井上研究室

仁井谷 竜介

Page 2: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 2

背景 ソフトウェア部品検索システムの必要性

ソフトウェア開発の大規模化・複雑化 ソフトウェアを再利用したり,管理する機会の増

様々なソフトウェア部品検索システム

Page 3: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 3

検索システム クエリ検索システム

クエリ(検索語・検索文)を入力として与える 適切なクエリを与えれば意図通りの文書が得られ

る カテゴリ検索システム

あらかじめ用意されたカテゴリから文書を探す カテゴリはツリー状に構成されていることが多い

クエリを入力しなくてよい 段階的に絞り込むことができる

コンピュータ → ソフトウェア → 表計算本研究ではこちらに着目

Page 4: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 4

カテゴリ検索を部品に適用したときの問題点

部品をカテゴリに分類する必要がある 追加・更新する部品をどのカテゴリに入れるか判

断しなければいけない 対象数が多い

カテゴリを再構成・維持する必要がある

分類・カテゴリ維持は手作業では困難 自動化が不可欠

Page 5: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 5

研究の目的 ソフトウェア部品を対象としたカテゴリ検索用の自

動分類 カテゴリのツリー ( カテゴリ間の関係 ) の自動作成

Java のクラスをソフトウェア部品とみなす 入力としてソースコードを用いる

低コストでカテゴリ検索の利点が得られる クエリを入力しなくてよい 段階的に絞り込むことができる

Page 6: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 6

提案手法 ソースコードの特徴語に着目した分類

ソースコードを入力として部品をカテゴリに分類 カテゴリ間に関係を作成

inputreadfile

特徴語の決定 特徴語 = カテゴリとして部品を分類 カテゴリ間の関係を作成

writefile

input

read

file

writewrite read

file input

部品 (=Java クラス )のソースコード

Page 7: ソースコードの特徴語を用いた 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)

単語の出現情報 重み

単語重み

部品と特徴語の組

重み

Page 8: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 8

特徴語の候補となる単語の抽出 全ソースコード中に出現する単語の一覧を取

得 語の記法統一を行う

大文字、小文字、’ _’ の有無などの違いを統一する

例 : XMLParser, XML_Parser, xmlParser → XmlParser

複合語分割を行う 複数で構成されている語を一部または全部に分割 例 : XmlParser→ Xml, Parser, XmlParser

Page 9: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 9

ソースコードの出現場所による重み計算 出現した場所を考慮した重要度を求める

クラス定義 100×log(1+ 出現回数 )変数名 10×log(1+ 出現回

数 )ドキュメントコメント 15×log(1+ 出現回数 )コメント 2×log(1+ 出現回

数 )・・・の和を求める

Page 10: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

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

Page 11: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

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

Page 12: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

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単語の出現情報 なし なし なし

特徴語 ○ ○ ○

全ソースコードから得られた単語(特徴語の候補)

対象部品ソースコード中に出現する単語の出現箇所と出現回数部品と関連が強いとソースコードに出現しない語も特徴語になり得る

Page 13: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 13

input

read

file

write

カテゴリの作成

1. 得られた特徴語をそれぞれカテゴリとする2. 部品の特徴語をもとにカテゴリに部品を分類

inputreadfile

特徴語の決定 特徴語 = カテゴリとして部品を分類

writefile

部品

Page 14: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 14

カテゴリ間の関係の作成手順

1. カテゴリを入力とする2. 全てのカテゴリの組に対し 3 つの関係が成り立っているか調べる3. 成り立っていればその関係をグラフの辺として出力とする

複数成り立っている場合は優先順位に従って 1 つだけ決まる

親子関係作成

集合類似関係作成

特徴語類似関係作成

Page 15: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 15

親子関係 カテゴリを部品の集合としてみたときの包含

関係があるものの間に作られる関係 A の要素の 8 割⊂ B → A が子 B が親

カテゴリ部品の集合

Page 16: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 16

カテゴリを部品の集合としてみたとき類似するものの間に作られる関係

A∩B が両方の 8 割を超えていたら類似

集合類似関係

A B A B

Page 17: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 17

カテゴリに対応する特徴語間の類似度(コサイン尺度)が一定値以上のカテゴリ間に作られる関係

特徴語類似関係

\語 input readA 11 8 B 6 5C 0 1D 0 0

cosθ = 類似度

input

read

θ

Page 18: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 18

カテゴリ間の関係の優先順位

1. 集合として同一 → 集合類似関係2. 包含関係 → 親子関係3. 成り立っていれば → 集合類似関係4. 成り立っていれば → 親子関係5. 成り立っていれば → 特徴語類似関係

Page 19: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 19

カテゴリ間の関係の例

File Input Output

Read Write Print Println

Io

親子関係集合類似関係特徴語類似関係

Page 20: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 20

実装

ソースコード

SPARS-J

SPARSDB

SPARS-DB読込部

出現重み計算部

利用関係計算部

LSA計算部

特徴語決定部

カテゴリ生成部

分類部 検索部

単語重み計算部 カテゴリ名クラス名

検索部

部品情報表示部

カテゴリ情報表示部

カテゴリ木表示部

カテゴリDB

検索

検索結果

登録

読込

読込 登録

入力

Page 21: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 21

評価 実際に分類を行い,検索結果を評価する

入力はロボットシステム部品 254 クラス (35 システム )

評価には適合率を用いた

適合の判断はソースコードを見て行った

| 検索結果 ∩ 適合部品 |

| 検索結果 |適合率 =

Page 22: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 22

評価した適合率

1. カテゴリと部品の間の評価 各部品が属するカテゴリの適合率 各カテゴリに属する部品の適合率

2. SPARS-J (全文検索 ) との検索結果の比較 SPARS-J で検索されず本システムで検索された

ものの中での適合率

Page 23: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 23

結果一例:部品が属するカテゴリの適合率 riu.parts.EnemyStatus が属するカテゴリの適合率 適合率 0.7

カテゴリ 適合 理由

Point ○ 座標を扱う

EnemyStatus ○ 敵の状態を表す

Get ○ 状態取得メソッドが多い

Time ○ 時間を扱う

Riu ○ パッケージ名

Set × 状態設定は行わない

Distance ○ 距離を扱う

This × Java予約語

Param × Javadoc タグ (@param)

Move ○ 移動に関わる情報を持つ

Page 24: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 24

各部品が属するカテゴリの適合率 縦軸が各部品の適合率 横軸は部品(適合率でソートしている) avg. 0.86

適合しないカテゴリ

部品

適合するカテゴリ

例:適合率 2/3 の部品

高い適合率が得られた

Page 25: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

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 × 空のクラス

...

Page 26: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 26

各カテゴリに属する部品の適合率 縦軸が各カテゴリの適合率 avg. 0.85

カテゴリ

適合する部品

適合しない部品

例:適合率 4/7 のカテゴリ

高い適合率が得られた適合率 0 のカテゴリも存在した

Page 27: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 27

考察 有効な分類が得られた 不適当な特徴語がある

Javadoc タグ (@param, @return など ) HTML タグ (br, li) 前置詞,助詞,代名詞 (to, in, this) Java の予約語 (this)

Page 28: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 28

SPARS-Jとの比較 SPARS-J で検索されず本システムで検索された部

品の中でのカテゴリの適合率 SPARS-J では得られない部品 が検索できたカテゴリは 43% avg. 0.49

SPARS-J本システム

この部分での適合率

適合率が定義できない

検索結果が SPARS-J の検索結果に含まれたカテゴリの場合

Page 29: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 29

考察 (1/2)

適合率の平均が低い ソースコード中に出現しない特徴語は適合しない

ものが多くある カテゴリが減ったため、適合率の低いカテゴリ

(特徴を表さない特徴語)の割合が相対的に増えた

適合率が定義できないカテゴリが多い ソースコード中に出現する特徴語が多い

Page 30: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 30

考察 (2/2)

特徴語が部品につき 10個固定なのが問題 10個では足りないような複雑な部品

その部品が属するカテゴリの適合率:高い 特徴語のほとんどあるいは全てがソースコード中に

出現するため, SPARS-J で検索可能 特徴を表すが、ソースコード中に出現しない語が特

徴語にならない 10個では多すぎるような単純な部品

その部品が属するカテゴリの適合率:低い無関係な特徴語が幾つも含まれる

Page 31: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 31

まとめと今後の課題 まとめ

ソースコードの特徴語に着目した分類手法 提案手法による分類の有効性を確認

今後の課題 部品ごとの適切な特徴語の数の調査 特徴語として適さない語の排除方法の考案 カテゴリ間の関係の評価

Page 32: ソースコードの特徴語を用いた Java ソフトウェア部品の 自動分類システム

2005/03/10 名阪和合同研究会 32質問をどうぞ質問をどうぞ終終