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