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

Slides:



Advertisements
Similar presentations
『わかりやすいパターン認 識』 第 5 章 特徴の評価とベイズ誤り確率 5.4 ベイズ誤り確率と最近傍決定則 発表日: 5 月 23 日(金) 発表者:時田 陽一.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
パネル型クエリ生成インタフェース画像検索システムの改良
ソースコードの特徴語を用いた Javaソフトウェア部品の 自動分類手法の提案
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
国内線で新千歳空港を利用している航空会社はどこですか?
ソースコードの編集内容を入力とした ソフトウェア部品の自動検索
情報爆発A01支援班 マイサーチエンジン開発環境支援グループ 中村聡史, 大島裕明, 田中克己, 喜連川優
情報伝播によるオブジェクト指向プログラム理解支援の提案
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
リンク構造を考慮したベクトル空間法によるWebグラフ分割手法に関する研究
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
Javaソフトウェア部品検索システムのための索引付け手法の提案と実装
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
静的情報と動的情報を用いた プログラムスライス計算法
メソッド間の依存関係を利用した プログラム理解支援手法の提案と実現
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
環境リスクマネジメントに関する 検索システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
類似度を用いた WWW のリンク構造の解析 谷 研究室    栗原 伸行.
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
Parallel Setsによるライブラリの 組み合わせと利用状況の可視化
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
様々な情報源(4章).
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コーディングパターンの あいまい検索の提案と実装
わかりやすいパターン認識 第7章:部分空間法  7.1 部分空間法の基本  7.2 CLAFIC法                  6月13日(金)                  大城 亜里沙.
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
構造的類似性を持つ半構造化文書における頻度分析
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
ソースコードの特徴語を用いた Javaソフトウェア部品の 自動分類システム
4.プッシュダウンオートマトンと 文脈自由文法の等価性
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
Webページタイプによるクラスタ リングを用いた検索支援システム
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
Presentation transcript:

ソースコードの特徴語を用いた Javaソフトウェア部品の 自動分類システム 井上研究室の仁井谷です. ソースコードの特徴語に着目して,Javaソフトウェア部品を 自動分類し,カテゴリ検索に利用する手法を考案しましたので, それについて発表をさせていただきます. # 「本日は」などはタブーみたいです # タイトルの繰り返しは能なしらしいです 井上研究室 仁井谷 竜介

背景 ソフトウェア部品検索システムの必要性 様々なソフトウェア部品検索システム ソフトウェア開発の大規模化・複雑化 ソフトウェアを再利用したり,管理する機会が増えた 様々なソフトウェア部品検索システム まず,背景ですが, 現在ソフトウェア部品検索システムの必要性が言われています. その背景として,ソフトウェア開発の大規模化・複雑化や, ソフトウェアを再利用したり,管理する機会が増えた, ということがあります. そして実際に,様々なソフトウェア部品検索システムが提案・実現されています. # 以降メモ その多くは検索者にクエリを入力させ,そのクエリとの適合度の高い部品を表示する形式をとっています. 言い換えれば,多くの検索システムはクエリを入力する必要があります. 2005/02/24 平成16年度 特別研究報告

検索システム クエリ検索システム カテゴリ検索システム クエリ(検索語・検索文)を入力として与える 適切なクエリを与えれば意図通りのものが得られる カテゴリ検索システム あらかじめ用意されたカテゴリから文書を探す カテゴリはツリー状に構成されていることが多い クエリを入力しなくてよい 段階的に絞り込むことができる コンピュータ → ソフトウェア → 表計算 ソフトウェア部品に限らず検索システムを大きく分けたとき, クエリ検索システムと,カテゴリ検索システムに分けられます. クエリ検索システムは,検索語あるいは検索文を与えることにより,それに適合するもの検索するシステムです. その利点としては,適切なクエリを与えれば,意図通りの検索結果が得られる点です. また,カテゴリ検索システムは,あらかじめ用意されたカテゴリの中から文書を探す,というシステムです. 用意されたカテゴリは,大抵はツリー状に構成されており,検索者は段階的に自分の意図するものにカテゴリを絞り込んでいけます. 例えば,ここにあるように,コンピュータからソフトウェア,ソフトウェアからセキュリティ, というような絞り込みができます. 本研究では,カテゴリ検索に着目したいと思います. # 以降メモ 他の利点としては,文書中に出現する単語の中から検索する,全文検索のようなものと異なり, 文書中の単語に頼らない検索ができます 本研究では,カテゴリ検索に着目し, ソフトウェア部品検索システムに適用するとどうなるかについて考えたいと思います. 本研究ではこちらに着目 2005/02/24 平成16年度 特別研究報告

カテゴリ検索を部品に適用したときの問題点 部品をカテゴリに分類する必要がある 追加・更新する部品をどのカテゴリに入れるか判断しなければいけない 対象数が多い カテゴリを再構成・維持する必要がある 分類・カテゴリ維持は人手では困難 自動化が不可欠 カテゴリ検索システムの問題点として,分類する作業が必要となります. そのためには,追加あるいは更新される部品が,どのカテゴリに入れるのが適切か判断しなければいけません さらに,対象数が多いのでそのための手間は非常に大きなものとなります. また,今までにない機能の部品の追加や,カテゴリ内の部品数の増加などが起こった場合に, 新しいカテゴリの追加や,巨大なカテゴリの分割といった,カテゴリの再構成・維持作業も必要となります. 従って,これらの分類に関わる作業は人手では困難であるといえ, 実際にソフトウェア部品にカテゴリ検索システムを適用するには自動化は不可欠だといえます. # 以降メモ 自動化したい 低コスト 検索を必要とするぐらいは対象数があるはず 開発者が分類 追加時にどのカテゴリにするか決める必要がある 更新する度にカテゴリを見直すコストがある 検索システム管理者が分類 追加・更新するソースコードを理解しないといけない 対象数が多い 人手では困難 ソースコードに対する理解が必要 そして,カテゴリ検索をするための準備作業も自然言語などの場合と同様にあると言えます. その一番の(他には収集とか)問題となるのが,検索対象となるソフトウェア部品の分類作業です. 部品数が少なくても困難な作業ではありますが,検索システムを必要とするぐらいは部品が数あるはずなので, その作業量は非常に大きくなります. そのためには,追加あるいは更新される部品の内容について理解していないといけません. 2005/02/24 平成16年度 特別研究報告

研究の目的 ソフトウェア部品を対象としたカテゴリ検索用の自動分類 カテゴリのツリー(カテゴリ間の関係)を自動作成 Javaのクラスをソフトウェア部品とみなす 入力としてソースコードを用いる 低コストでカテゴリ検索の利点が得られる クエリを入力しなくてよい 段階的に絞り込むことができる そこで,本研究ではJavaソフトウェア部品を対象としたカテゴリ検索を行うための 分類とカテゴリのツリーの生成を,ソースコードを入力として自動で行いたいと思います. それにより,人手に比べ低いコストで先ほど挙げたカテゴリ検索の利点が得られると考えられます. # 以降メモ なお,対象言語はJavaにしたいと思います. 2005/02/24 平成16年度 特別研究報告

提案手法 ソースコードの特徴語に着目した分類 ソースコードを入力として部品をカテゴリに分類 カテゴリ間にツリー状の関係を作成 以上の目的を達成するため,ソースコードの特徴語に着目し, ソフトウェア部品を分類する手法を提案します. ↓クリック まず,部品のソースコードを入力として与えます. このソースコードの特徴語を決定します. この例では,input, read, fileがこのソースコードの特徴語となります. 次に,先ほど決定した特徴語をそれぞれ1つのカテゴリとして部品を分類します. この部品は,input, read, fileの3つのカテゴリに分類されます. このままではカテゴリがたくさん並ぶだけになるので, カテゴリ間に関係を与え,このようにツリーのような関係を作成します. この発表では分類のところを説明します. # 以降メモ 特徴語は,ソースコードを特徴づける重要な語 →後で説明する(特徴語決定のページで) 特徴語を元にカテゴリを決定 inputを特徴語とする部品の集合をカテゴリinputとする *処理の流れ ソースコード 特徴語決定 カテゴリ カテゴリ木 *処理の流れのうちのどこか重要なところをこの後説明 この発表では分類までを説明 特徴語=カテゴリ として部品を分類 特徴語の決定 カテゴリ間の関係を作成 input read file write input read file write read file input 部品(=Javaクラス) のソースコード write file 2005/02/24 平成16年度 特別研究報告

分類の手順 解析 出現重み 計算 利用関係 計算 LSA 計算 単語一覧(特徴語の候補) 特徴語 決定 ソースコードを解析 単語重み計算 (2) (1) (2.1) (2.2) (2.3) 単語の出現情報 解析 出現重み 計算 利用関係 計算 LSA 計算 では,分類の流れについて説明したいと思います ↓クリック ソースコードを解析し,単語一覧の取得と単語の出現情報を取得します. 次に,単語の出現情報を用いて特徴語を決定するための重みである「単語重み」を求めます. 中で4つの手法を用いて,重みの計算をしていますが,後で説明するのでここでは省きます. 次に,部品ごとに単語を重みでソートし,それぞれ上位10個の語を特徴語と決定します. 最後に,特徴語をそれぞれ1つのカテゴリとして部品を分類します. 最終的には,部品とカテゴリの組が得られます. 重み 重み 単語 重み (3) 単語一覧(特徴語の候補) 特徴語 決定 ソースコードを解析 単語重み計算 出現重み計算 利用関係による重み加算 LSA(潜在的意味解析法) 単語重みの高い上位10個の語を特徴語とする 1つの特徴語をそれぞれ1つのカテゴリとして部品を分類 部品と特徴語の組 (4) カテゴリ 生成 部品と カテゴリの組 2005/02/24 平成16年度 特別研究報告

単語重み計算 ソースコードの出現場所による重み計算 利用関係による重み加算 LSA*(潜在的意味解析法) 出現した場所(クラス定義など)を考慮した重要度 利用関係による重み加算 利用している部品中の語の重みを加算する 例:継承,メソッド呼び出し,インスタンス化 LSA*(潜在的意味解析法) 出現の類似度で重みを補正 先ほど省略した特徴語を決定するときの重み計算の説明を行いたいと思います. まず,1番ですが,これは単語が出現した場所が クラス定義か,変数名かという情報を考慮した重要度の計算を行います. 次に,2番ですが, まず,利用関係とは,継承や・・・を指します. この計算は,利用している部品に存在する語の重みを,対象の部品の語の重みに加算します. これにより,差分しかかかれていない子クラスに親クラスの語の重みが加えられる,などの変化があります. 最後にLSAですが,これは出現の傾向が類似する語には似たような重みがつくような補正をかけます. # 以降メモ 次に2番ですが, ここでは,大文字小文字の使い方や,アンダースコアを挟む,挟まないなどの記法の統一と, 複数の語が組み合わさってできている語から,その一部あるいは全部で構成される語を切り出しを行います. 単語の一覧が処理前と変化するので,それにあわせた重みの再計算を行います. 対象語の削減 分類に影響のない語を削除 最後にLSAですが,これは統計的な処理により,先ほどの「fileとreadに関係するinputの重みが高くなる」 というような変化が得られます. 語 file read binary 親クラス 5 3 0 子クラス 1 0 2 子クラス 3.5 1.5 2 2.の継承関係での例 * Landauer, T. K., Foltz, P. W., & Laham, D. (1998). Introduction to Latent Semantic Analysis.  Discourse Processes, 25, 259-284. 2005/02/24 平成16年度 特別研究報告

特徴語の決定 … 部品のソースコードから単語重みを求める ここでは上位10語を部品の特徴語とする 次に,ソースコードの特徴語決定,について説明したいと思います. ↓クリック まず,ソースコードに出現する単語について調べます. ↓クリック(上段四角) 上の語の一覧ですが,これは全ソースコードの語を表しています. この例では,input, output, writeという語はこの部品のソースコード中には出現していませんが, 別の部品のソースコード中には出現しています. ↓クリック(下段四角) 下の情報ですが,ソースコード中にreadという語がメソッド定義で3回出現し,メソッド呼出で2回出現した, というような情報を表しています. この情報を元に ↓クリック(なし)  クリック(出現重み)  クリック(・・・)  クリック(単語重み)  クリック(省略部分消去) 単語重みを求めます. 次に,この単語重みから特徴語を決定します. ↓クリック(特徴語) 実際は,上位10個の語ですが この例では,重みが上からfile, read, inputの3語がこのソースコードの特徴語と決定されました. ↓クリック(input) ここで注目していただきたいのは,ソースコード中に出現しないinputが特徴語になっている点です. この手法ではソースコードに出現しない語も, 部品との関連が強いと特徴語になり得ます. # 以降メモ 10個に根拠はない が,ソースコードの語数や,重みに合わせて部品ごとに特徴語の数を決める としても,その指標がわからないので10語で評価してみた まず,このソースコードの情報から,ソースコード中の出現重みを求めます. ↓クリック(出現重み) これは,この(ソースコードの行を指して)情報を実数の重みに変えたものです. ↓クリック(・・・) その後途中の計算は(時間の都合で)省きますが,いくつかの計算を経て特徴語を決定する重みを求めます ↓クリック(単語重み) 省略した計算も含めて,ここまでの流れで,ソースコードから特徴語を決定するための単語重みを求める計算が終わります. この手法ではソースコードに出現しない語も特徴語になり得ます. readやfileに高い重みがあることから,この部品はinputにも関連深いと考えられますが, この手法はその関連深い語を特徴語とすることを実現します. 全ソースコードから得られた語(特徴語の候補) input output read write get set file 単語の出現情報 なし なし なし クラス定義 1 メソッド定義 2 メソッド定義2 メソッド呼出10 メソッド定義7 メソッド呼出8 メソッド定義3 メソッド呼出2 対象部品ソースコード中に出現する単語の出現箇所と出現回数 部品と関連が強いと ソースコードに出現しない語も特徴語になり得る … 単語重み 62.1 0 90.7 0 35.6 18.1 113.9 特徴語 ○ ○ ○ 2005/02/24 平成16年度 特別研究報告

実装 分類部 検索部 単語重み計算部 カテゴリ名 クラス名 検索部 利用関係 計算部 部品情報 表示部 SPARS-J 出現重み 計算部 ソースコード 次に,実現したシステムについて説明したいと思います. 本システムは,大きく分類部,検索部の2に分かれており,先ほど説明した手法は, (指し示して)単語重み計算部と特徴語決定部で実現されています. また,特徴語をカテゴリとしてみなしてDBに登録する部分はカテゴリ生成部の一部として実現されています. # 以降メモ 説明してない部分ばっさり切った方がいいかも(でも説明付け足したし 単語重み計算部 カテゴリ名 クラス名 検索部 利用関係 計算部 入力 部品情報 表示部 検索 SPARS-J 読込 出現重み 計算部 LSA 計算部 検索結果 カテゴリ DB カテゴリ情報 表示部 登録 カテゴリ木 表示部 SPARS DB SPARS-DB 読込部 特徴語 決定部 カテゴリ 生成部 登録 読込 2005/02/24 平成16年度 特別研究報告

評価 実際に分類を行い,検索結果を評価する 適合率 = 入力はロボットシステム部品254クラス(35システム) カテゴリと部品の間の適合率を求める 各カテゴリに属する部品の適合率 各部品が属するカテゴリの適合率 適合の判断はソースコードを見て行った 次に実際に分類を行い,検索結果を評価した結果について説明したいと思います. 入力はRobocodeのロボット35体としました. 検索結果の評価として,今回は適合率を用いました. 適合率はこの式で与えられる,検索結果にどれだけ適合部品が含まれているかの割合です. 本発表では,この2つの適合率について述べたいと思います. # 以降メモ カテゴリ間の関係の評価 については省略 |検索結果 ∩ 適合部品| |検索結果| 適合率 = 2005/02/24 平成16年度 特別研究報告

分類結果の一例 カテゴリに属する部品の例 部品が属するカテゴリの例 Pointに属する部品(実際は108クラス) 適合率 0.93 部品が属するカテゴリの例 riu.parts.EnemyStatusが属するカテゴリ 適合率 0.7 ではここで,分類結果の一例を示したいと思います 左はPointというカテゴリに属する部品の一部. 右はEnemyStatusという部品の属するカテゴリの一覧です. 適合率はPointはここにあるものだけだと9/10で0.9ですが 全て合わせると0.93 EnemyStatusは7/10で0.7です 部品 適合 理由 teamZero.Point ○ 座標を扱う mirror.Calc 座標計算クラス mirror.posPredict.WaveEstimation 位置予測 kuro.Point riu.parts.EnemyStatus riu.Geometry.Geometry mt.GravPoint heg.Vector2D 座標クラス pbl3.BulletData riu.NotSerializable × 空のクラス カテゴリ 適合 理由 Point ○ 座標を扱う EnemyStatus 敵の状態を表す Get 状態取得メソッドが多い Time 時間を扱う Riu パッケージ名 Set × 状態設定は行わない Distance 距離を扱う This Java予約語 Param Javadocタグ(@param) Move 移動に関わる情報を持つ 2005/02/24 平成16年度 特別研究報告 ...

分類結果の適合率 適合率0のカテゴリも存在した 高い適合率が得られた 各カテゴリに属する部品の適合率(左) avg. 0.85 各部品が属するカテゴリの適合率(右) avg. 0.86 縦棒が適合率 カテゴリ これは,分類結果の全体です 左の図はカテゴリの中に属している部品がどれだけ適切なものかを表しています. 横の例ではオレンジが適合として, 4/7です. 右の図は部品がどれだけ適切なカテゴリに属しているかを表しています. 横の例では,2/3です. 縦棒がそれぞれの適合率になっています. ↓クリック 適合率はそれぞれ0.85と0.86と高い値が得られましたが, このようにいくつか適合率が0のカテゴリがあることも確認されました. # 以降メモ より正確な適合率 0.8460 0.8633 下のグラフは,縦軸が適合率を表し,縦線の1つ1つが1つの(左を指して)カテゴリと (右を指して)部品に対応します. 横軸はカテゴリと部品をそれぞれ適合率でソートして並べています. 横軸の数はカテゴリの数. 0から10手前の空白は適合率0のカテゴリである. 横軸に平行な点線は適合率の平均. ドキュメントコメント中の@paramのparamやBRタグのBR,thisのようなJavaであるために出現する語 がありました. 部品 適合率0のカテゴリも存在した 高い適合率が得られた 2005/02/24 平成16年度 特別研究報告

考察 有効な分類が得られた 不適当な特徴語がある Javadocタグ(@param, @returnなど) HTMLタグ(br, li) 前置詞,助詞,代名詞(to, in, this) Javaの予約語(this) 以上の結果から得られた考察として, まずは,高い適合率から有効な分類が得られたと言えます. 特徴語として適さないが,重みが高い特徴語がある,と言う問題点が確認されました. それは,ドキュメントコメント中で頻繁に出る内容を表さないような語や, Thisといったものです. # 以降メモ 次に,特徴語が部品につき10個固定なのが問題であることがわかりました. 複雑な部品だと,特徴語が10個では足りず,その部品が属しているカテゴリに対し高い適合率を出しているものの, 特徴語のほとんどあるいは全てがソースコード中に出現しているため, SPARS-Jで検索ができていました. 逆に単純な部品だと,特徴語は10個では多すぎ,無関係な特徴語が含まれていました. そのため適合率は低くなっています. paramやbrやthisといった特徴語として適さないが重みが高く,特徴語になってしまうものがあることも確認されました. 2005/02/24 平成16年度 特別研究報告

まとめと今後の課題 まとめ 今後の課題 ソースコードの特徴語に着目した分類手法 提案手法による分類の有効性を確認 部品ごとの適切な特徴語の数の調査 特徴語として適さない語の排除方法の考案 本研究では,ソースコードの特徴語に着目した分類手法を提案・実現し, 有効な分類が可能であることを確認しました. また,今後の課題としては,部品ごとの適切な特徴語の数の調査, 特徴語として適さない語の排除方法の考案が考えられます. 2005/02/24 平成16年度 特別研究報告

以上で発表を終わります. 質問をどうぞ 終 2005/02/24 平成16年度 特別研究報告

クエリ入力を必要としない検索システムの例 SPARS-J パッケージブラウザ パッケージ構造に従った検索 異なるパッケージ内のものを検索できない パッケージブラウザ サブパッケージ一覧 クラス一覧 2005/02/24 平成16年度 特別研究報告

潜在的意味解析法 LSA Latent Semantic Analysis 自然言語で書かれた文書、単語の類似度を計測する ベクトル空間モデルに従った手法の一つ ベクトル空間モデルでは検出できない間接的な関連の抽出を可能にしている 2005/02/24 平成16年度 特別研究報告

LSA の例 単語ベクトル 文書ベクトル 文書間、単語間の類似度は ベクトル間の角度によって 表す 文書1 文書4 文書2 文書5 3 4 5 6 A B C D E F G H A B B F G G 文書2 文書5 A B C D E F G H H 単語頻度行列を 作成 文書3 文書6 B C C C D E G H LSA 1 0.3 0.7 0.9 0.4 0.2 2 1.0 1.4 0.6 0.1 3 1.5 2.3 -0.2 4 0.0 5 6 -0.1 A B C D E F G H 2005/02/24 平成16年度 特別研究報告

LSA の効果 間接的に関連している文書間の類似度も高い 文書間の類似度がより鮮明になる 文書間の類似度行列 LSA適用前 LSA適用後 1 2 3 4 5 6 1.0 0.2 -0.1 -0.3 -0.5 0.5 -0.9 -0.2 -0.4 0.3 1 2 3 4 5 6 1.0 0.9 -0.6 -0.5 -0.8 -0.7 LSA適用前 LSA適用後 2005/02/24 平成16年度 特別研究報告

ソースコードを入力とする理由 ドキュメントの内容は有用であることは確かだが,問題点も多い ファイル形式がさまざま 記述のフォーマットもまちまち 内容は自然言語なので意味の理解は自動化する上で困難 どの部品を表すドキュメントか,すらわからない可能性がある 2005/02/24 平成16年度 特別研究報告

カテゴリ間の関係 親子関係(カテゴリ木) 集合類似関係 類似関係 カテゴリを部品の集合としてみたときの包含関係 A⊂B なら Bが親 Aが子 誤差を認める 集合類似関係 カテゴリを部品の集合としてみたとき類似 類似関係 カテゴリに対応する特徴語間の類似度が高い 類似度はコサイン尺度で求める 2005/02/24 平成16年度 特別研究報告

評価実験 実際に分類を行い,検索結果を評価する 分類対象はRobocodeのロボット35体 小規模のソースコード集合を作れる 出現する単語にある程度偏りが見られる 作者が独立して複数いるソースコード集合を作れる 適合しているかどうかの判断がしやすい 2005/02/24 平成16年度 特別研究報告

得られたカテゴリの一部 Get Point Enemy Time Orbit This Target Param Br 2005/02/24 平成16年度 特別研究報告

適合条件 適合する 適合しない 親クラスの特徴語 そのカテゴリに含まれる部品の集合が同様のものであるが,そのうちのどれかを表すだけの特徴語がそのカテゴリに対応している ソースコード中に現れるがあまり特徴を表さない 自身の特徴を表さないような子クラスの特徴語 2005/02/24 平成16年度 特別研究報告

適合率の低いカテゴリ 英語ドキュメントコメント中の前置詞(toなど) ドキュメントコメント中に出現するタグ this @paramなど HTML this IDE(Eclipse)によって生成されているコメント中の語 2005/02/24 平成16年度 特別研究報告

再現率 再現率を求めるには,部品ごとに「特徴語であるべき語」の一覧を作らなければいけない 作業量が多く困難 2005/02/24 平成16年度 特別研究報告

特徴語の数 10個に根拠はない 複雑な部品は10個では足らないはず 再現率が高くなるような数は今後の課題 ソースコードの語数や,重みに合わせて部品ごとに特徴語の数を決めるとしても,その指標がわからないので10語で評価してみた 複雑な部品は10個では足らないはず 再現率は低いに違いない 再現率が高くなるような数は今後の課題 2005/02/24 平成16年度 特別研究報告

以降ゴミ箱 2005/02/24 平成16年度 特別研究報告

実験に使用した適合率 (式の貼り付け) 2005/02/24 平成16年度 特別研究報告

背景 ソフトウェア開発の大規模化・複雑化 様々なソフトウェア部品検索システム ソフトウェア部品検索システムの必要性 生成されたソフトウェアを再利用したり,管理する機会が増えた 様々なソフトウェア部品検索システム 多くがクエリとの適合度の高い部品を表示 クエリを入力する必要がある ソフトウェア部品検索システムの必要性 2005/02/24 平成16年度 特別研究報告

多くの検索システムはクエリを入力する必要がある 背景 ソフトウェア部品検索システムの必要性 ソフトウェア開発の大規模化・複雑化 ソフトウェアを再利用したり,管理する機会が増えた 様々なソフトウェア部品検索システム 多くがクエリとの適合度が高い部品を表示 まず,背景ですが, 現在ソフトウェア部品検索システムの必要性が言われています. その背景として,ソフトウェア開発の大規模化・複雑化や, ソフトウェアを再利用したり,管理する機会が増えた, ということがあります. そして実際に,様々なソフトウェア部品検索システムが提案・実現されています. その多くは検索者にクエリを入力させ,そのクエリとの適合度の高い部品を表示する形式をとっています. 言い換えれば,多くの検索システムはクエリを入力する必要があります. 多くの検索システムはクエリを入力する必要がある 2005/02/24 平成16年度 特別研究報告

クエリ入力の問題点 意図したものが得られない 検索者が適切なクエリを入力する必要がある 検索されない 不要な情報の中に埋もれる 常に適切なクエリを知っているわけではない クエリ入力は,適切なクエリを検索者が知っていれば非常に強力な検索方法ですが, 問題点もあります. それは,適切なクエリを入力しないと,意図したものが検索されなかったり, 不要な情報によって意図していたものが埋もれてしまったりする, という点です. つまり,意図した検索結果を得ようとすれば,検索者が適切なクエリを入力 しなければいけない,ということになります. しかし,検索者は常に適切なクエリを知っているわけではありません. # 以降メモ 直感的なクエリは適切なクエリとは限らない → カテゴリ検索でもいえるのかどうか疑問 # ↓の話は言っていいものやら? # 未知のものに対しても有効な検索ができる,と言いきれるほどのシステムじゃないし 特に,未知の分野に対する調べ物をしようとしているときは, 多くの適切でないクエリを入力してしまいがちです. 2005/02/24 平成16年度 特別研究報告

カテゴリ検索システム カテゴリ検索システムとは 利点 自然言語,Webページ検索などに用いられる あらかじめ用意されたカテゴリから文書を探す カテゴリはツリー状に構成されていることが多い 文書は手動でカテゴリに分類されることが多い 利点 クエリを入力しなくてよい 段階的に絞り込むことができる コンピュータ → ソフトウェア → セキュリティ 一方,クエリを入力しない検索システムとして,(ソフトウェア部品検索ではなく) 自然言語やWeb検索などに用いられるカテゴリ検索システムがあります. カテゴリ検索システムとは,あらかじめ主に人の手で分類されたカテゴリの中から文書を探す,というシステムです. 用意されたカテゴリは,大抵はツリー状に構成されており,検索者は段階的に自分の意図するものにカテゴリを絞り込んでいけます. 例えば,ここにあるように,コンピュータからソフトウェア,ソフトウェアからセキュリティ, というような絞り込みができます. →次のスライドへの前振り では,このような利点があるカテゴリ検索を, ソフトウェア部品検索システムに適用するとどうなるかについて考えたいと思います. # 以降メモ 他の利点としては,文書中に出現する単語の中から検索する,全文検索のようなものと異なり, 文書中の単語に頼らない検索ができます 2005/02/24 平成16年度 特別研究報告

自然言語を対象とする手法の適用 2005/02/24 平成16年度 特別研究報告

SPARS-J ソフトウェア部品検索システム キーワード検索 パッケージ構造に従った検索 クエリを入力する必要がある 異なるパッケージ内のものを検索できない 利用関係がどうかは本題と関係ない クエリを入力 パッケージブラウザ サブパッケージ一覧 クラス一覧 2005/02/24 平成16年度 特別研究報告

分類の手順 解析 出現重み 計算 複合語 計算 利用関係 計算 LSA 計算 単語一覧 単語一覧 特徴語 決定 ソースコードを解析 (2) (1) (2.1) (2.2) (2.3) (2.4) 単語の 出現情報 解析 出現重み 計算 複合語 計算 利用関係 計算 LSA 計算 では,分類の流れについて説明したいと思います ↓クリック ソースコードを解析し,単語一覧の取得と単語の出現情報を取得します. 次に,単語の出現情報を用いて特徴語を決定するための重みである「単語重み」を求めます. 中で4つの手法を用いて,重みの計算をしていますが,後で説明するのでここでは省きます. 次に,部品ごとに単語を重みでソートし,それぞれ上位10個の語を特徴語と決定します. 最後に,特徴語をそれぞれ1つのカテゴリとして部品を分類します. 最終的には,部品とカテゴリの組が得られます. 重み 重み 重み 特徴語 重み (3) 単語一覧 単語一覧 特徴語 決定 ソースコードを解析 単語重み計算 出現重み計算 語の記法統一・複合語分割による重み再計算 利用関係による重み加算 LSA(潜在的意味解析法) 部品ごとに単語重みの高い上位10個の語を特徴語に 1つの特徴語をそれぞれ1つのカテゴリとして部品を分類 部品と特徴語の組 (4) カテゴリ 生成 部品と カテゴリの組 2005/02/24 平成16年度 特別研究報告

単語重み計算 ソースコードの出現場所による重み計算 語の記法統一・複合語分割による重み再計算 利用関係による重み加算 出現した場所(クラス定義など)を考慮した重要度 語の記法統一・複合語分割による重み再計算 XML_Parser→ Xml, Parser, XmlParser 利用関係による重み加算 利用している部品中の語の重みを加算する 例:継承,メソッド呼び出し,インスタンス化 LSA(潜在的意味解析法) 類似語を求める統計的手法 先ほど省略した特徴語を決定するときの重み計算の説明を行いたいと思います. まず,1番ですが,これは単語が出現した場所が クラス定義か,変数名かという情報を考慮した重要度の計算を行います. 次に2番ですが, ここでは,大文字小文字の使い方や,アンダースコアを挟む,挟まないなどの記法の統一と, 複数の語が組み合わさってできている語から,その一部あるいは全部で構成される語を切り出しを行います. 単語の一覧が処理前と変化するので,それにあわせた重みの再計算を行います. 次に,3番ですが, まず,利用関係とは,継承や・・・を指します. この計算は,利用している部品に存在する語の重みを,対象の部品の語の重みに加算します. これにより,差分しかかかれていない子クラスに親クラスの語の重みが加えられる,などの変化があります. 最後にLSAですが,これは統計的に類似する語を求めるために用いています. # 以降メモ 対象語の削減 分類に影響のない語を削除 最後にLSAですが,これは統計的な処理により,先ほどの「fileとreadに関係するinputの重みが高くなる」 というような変化が得られます. 2005/02/24 平成16年度 特別研究報告

適合率 検索結果がどれだけ正しいかを表す値 適合率 = |検索結果 ∩ 適合文書| |検索結果| 検索結果 2005/02/24 平成16年度 特別研究報告

評価する値 カテゴリと部品の間の適合率を求める SPARS-J (全文検索)との検索結果の比較 適合率 = 各カテゴリに属する部品の適合率 各部品が属するカテゴリの適合率 SPARS-J (全文検索)との検索結果の比較 SPARS-Jで検索されず本システムで検索されたものの中での適合率 SPARS-Jで検索されず本システムで上位10件以内の中での適合率 |検索結果 ∩ 適合文書| |検索結果| 適合率 = 2005/02/24 平成16年度 特別研究報告

評価 実際に分類を行い,検索結果を評価する 適合率 = 入力はRobocodeのロボット35体 カテゴリと部品の間の適合率を求める 各カテゴリに属する部品の適合率 各部品が属するカテゴリの適合率 SPARS-J (全文検索)との検索結果の比較 SPARS-Jで検索されず本システムで検索されたものの中での適合率 次に実際に分類を行い,検索結果を評価した結果について説明したいと思います. 入力はRobocodeのロボット35体としました. 検索結果の評価として,今回は適合率を用いました. 適合率は以下の式で与えられる,検索結果にどれだけ適合文書が含まれているかの割合です. 本発表では,カテゴリと部品間の適合率の双方向と, SPARS-Jと比較した時の適合率の3つの評価について述べたいと思います. # 以降メモ カテゴリ間の関係の評価 については省略 |検索結果 ∩ 適合文書| |検索結果| 適合率 = 2005/02/24 平成16年度 特別研究報告

SPARS-Jとの比較 SPARS-Jで検索されず本システムで検索されたものの中での適合率(左) avg. 0.4933 SPARS-Jで検索されず本システムで上位10件以内の中での適合率(右) avg. 0.5111 検索結果がSPARSの検索 結果に含まれたカテゴリ 2005/02/24 平成16年度 特別研究報告

SPARS-Jとの比較 SPARS-Jで検索されず本システムで検索されたものの中での適合率 avg. 0.4933 本システム 本システムで検索される部分をこのオレンジの○ SPARS-Jで検索される部分をこの青の○として, この薄いオレンジで塗られている部分の中での適合率を求めました. 検索結果によっては,このように本システムでの検索結果が SPARS-Jによる検索結果に含まれる場合があります. この場合は適合率は計算できません. それが適合率がマイナスでかかれている,この赤枠の部分です. 適合率が0のカテゴリや,適合率が計算できないカテゴリが多くありました. 本システム SPARS-J この部分での適合率 検索結果がSPARS-Jの検索 結果に含まれたカテゴリの場合 適合率が計算できない 適合率が計算できない 2005/02/24 平成16年度 特別研究報告

カテゴリ間の関係の評価 (UNDONE) (適合率っぽい評価値を出す予定) 2005/02/24 平成16年度 特別研究報告

没の図 2005/02/24 平成16年度 特別研究報告

考察 カテゴリと部品の間では高い適合率が得られたのに対し,SPARS-Jとの比較では低い適合率となった 特徴語が部品につき10個固定なのが問題 10個では足りないような複雑な部品 高い適合率 特徴語のほとんどあるいは全てがソースコード中に出現するため,SPARS-Jで検索可能 10個では多すぎるような単純な部品 低い適合率 無関係な特徴語が幾つも含まれる 適合率の平均は高いが,属する部品の適合率が0のカテゴリが存在する 特徴語として適さないが重みが高い特徴語がある ごちゃごちゃしすぎ 10固定なのが問題 2005/02/24 平成16年度 特別研究報告

没アニメーション 2005/02/24 平成16年度 特別研究報告

背景 ソフトウェア開発の大規模化・複雑化 様々なソフトウェア部品検索システム ソフトウェア部品検索システムの必要性 生成されたソフトウェアを再利用したり,管理する機会が増えた 様々なソフトウェア部品検索システム 多くがクエリとの適合度の高い部品を表示 クエリを入力する必要がある ソフトウェア部品検索システムの必要性 2005/02/24 平成16年度 特別研究報告

カテゴリ検索システム ただし分類の手間が必要 カテゴリ検索システムとは 利点 自然言語,Webページ検索などに用いられる あらかじめ用意されたカテゴリから文書を探す カテゴリはツリー状に構成されていることが多い 利点 段階的に絞り込むことができる 文書中に含まれない単語による検索ができる クエリ(検索語)を入力しなくてよい 一方,ソフトウェア部品検索ではなく 自然言語やWeb検索などに用いられる検索システムとして カテゴリ検索システムがあります. カテゴリ検索システムとは・・・ ただし分類の手間が必要 2005/02/24 平成16年度 特別研究報告

研究の目的 カテゴリ検索用の分類を自動で行う カテゴリのツリー(カテゴリ間の関係)を自動作成 低コストでカテゴリ検索の利点が得られる 2005/02/24 平成16年度 特別研究報告