Javaソフトウェア部品検索システムのための索引付け手法の提案と実装

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
ヘルスケア連動型 市販薬検索システム 研究者 : 加納 えり 指導教員 : 越田 高志.
JavaScript プログラミング入門 2006/11/10 神津.
知識情報演習Ⅲ(後半第1回) 辻 慶太(水)
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
Ex7. Search for Vacuum Problem
Ex8. Search for Vacuum Problem(2)
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
情報爆発A01支援班 マイサーチエンジン開発環境支援グループ 中村聡史, 大島裕明, 田中克己, 喜連川優
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
テキストマイニング, データマイニングと 社会活動のトレース
アルゴリズムとデータ構造 2011年6月13日
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
第20章 Flyweight ~同じものを共有して無駄をなくす~
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
プログラム実行履歴を用いたトランザクションファンクション抽出手法
オントロジーを使用した プログラム開発支援システムの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
暗黙的に型付けされる構造体の Java言語への導入
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
知識情報演習Ⅲ(後半第3回) 辻 慶太
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
ソフトウェア制作論 平成30年9月26日.
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
アルゴリズムとデータ構造1 2005年7月5日
プログラムで多用される 動詞と目的語の関係を利用した メソッド名提案ツール
テキストマイニング, データマイニングと 社会活動のトレース
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
Ex7. Search for Vacuum Problem
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
知識情報演習Ⅲ(後半第3回) 辻 慶太
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
同期処理のモジュール化を 可能にする アスペクト指向言語
設計情報の再利用を目的とした UML図の自動推薦ツール
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとデータ構造 2012年6月11日
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
アルゴリズムとデータ構造1 2006年6月23日
オープンソースソフトウェアに対する コーディングパターン分析の適用
統合開発環境のための プログラミング言語拡張 フレームワーク
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
ソフトウェア制作論 平成30年10月17日.
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム理解のための 付加注釈 DocumentTag の提案
Presentation transcript:

Javaソフトウェア部品検索システムのための索引付け手法の提案と実装 大阪大学基礎工学情報科学科 井上研究室 梶田 泰伸

研究背景 Javaソフトウェア部品検索システムSPARS-Jを開発 検索語に対して全文検索を行い,検索語と関連した部品(クラス、インターフェイス)のソースコードを提供 あらかじめソースコードに対し索引付けを行い、索引語をデータベースに登録   →検索語と一致する索引語を検索 用語 索引語 : 文書の内容を特徴付ける単語 索引付け : 文書中から索引語を抽出する処理 2:SPARS-Jは、過去利用されたJavaソフトウェア部品の効率的な再利用を支援することが目的です 最後:例えば、その語がメソッド名であるとか、クラス名であるという情報のことです。 2004/2/26 特別研究発表会

現状の問題点 全ての語を抽出しそのまま索引語としている 複合語“safetyCheck”が存在 不要語が存在 static boolean safetyCheck(int row){ for (int j=1; j<column; j++) if (board[j] == row) return false ; } return true ; 複合語“safetyCheck”が存在 検索語“safety”や“check”にマッチしない この部品は検索されない static boolean safetyCheck ( int row ) { for ・・・ 検索漏れ 不要語が存在 データベース容量の無駄 2004/2/26 特別研究発表会

研究の目的 索引語の拡張 不要語の除去 Javaソースコードの特性を生かした索引付け手法を提案する 検索漏れを減らすため 適合部品: データベースの容量の増加を抑えるため 索引語の拡張 検索語が出現する部品 検索語が、語形変化して出現する部品 拡張 ー>除去 を流れそろえる *検索漏れ、適合部品の説明を自然に。 不要語の除去 2004/2/26 特別研究発表会

提案手法の概要 ソースコードはプログラム部とコメント部に分かれる 不要語の除去 索引語の拡張 プログラム部:文法はプログラム言語に依存 → Java コメント部:文法は自然言語に依存 → 英語 不要語の除去 1.プログラム部、コメント部 *実装の流れに沿っていることを明確に。 2.プログラム部 索引語の拡張 3.コメント部 2004/2/26 特別研究発表会

不要語の除去 (プログラム部、コメント部) 不要語とは その語が他の多くの部品に存在し、出現した部品を絞り込むのに役に立たない語 プログラム部 コメント部   記号 (例外: “_”、“$” ) 数字のみで構成される語 1文字の語(1文字の語+数字) 予約語 名詞(代名詞を除く)、動詞(be動詞を除く)、形容詞、副詞 以外の語 提案手法の説明1 2004/2/26 特別研究発表会

索引付けの例 (不要後の除去:プログラム部、コメント部) 以下の不要語の除去 C: sample case roomNumber column string1 string2 saftyCheck row board row method checks argument This is sample case roomNumber column string1 string2 saftyCheck row board row This method checks argument This is sample case roomNumber column string1 string2 saftyCheck row board row This method checks argument /* This is a sample case. */ class roomNumber { static int column = 10, a0, a1; static char string1, string2; static boolean saftyCheck ( int row ){ for ( int j = 1; j < column; j++){ if ( board[ j ] == row ) return false; }   return true; // This method checks 1 argument. This is a sample case class roomNumber static int column 10 a0 a1 static char string1 string2 static boolean saftyCheck int row for int j 1 j column j if board j row return false   return true This method checks 1 argument This is sample case class roomNumber static int column static char string1 string2 static boolean saftyCheck int row for int column if board row return false   return true This method checks argument This is sample case class roomNumber static int column static char string1 string2 static boolean saftyCheck int row for int column if board row return false   return true This method checks argument This is a sample case class roomNumber static int column 10 a0 a1 static char string1 string2 static boolean saftyCheck int row for int j 1 j column j if board j row return false   return true This method checks 1 argument This is a sample case class roomNumber static int column a0 a1 static char string1 string2 static boolean saftyCheck int row for int j j column j if board j row return false   return true This method checks argument /* This is a sample case. */ class roomNumber { static int column = 10, a0, a1; static char string1, string2; static boolean saftyCheck ( int row ){ for ( int j = 1; j < column; j++){ if ( board[ j ] == row ) return false; }   return true; // This method checks 1 argument. This is a sample case class roomNumber static int column a0 a1 static char string1 string2 static boolean saftyCheck int row for int j j column j if board j row return false   return true This method checks argument 記号 記号 数字のみの語 数字のみの語 1文字の語 1文字の語 予約語 予約語 *コメントマークましにする  不要な品詞の語 不要な品詞の語 C: 2004/2/26 特別研究発表会

索引語の拡張(プログラム部) 複合語の切り分け 省略語を本来の形にする 語の最後が数字なら数字を除去する Javaでは、複合している単語の始まりは大文字で書き、残りは小文字で書く慣例 小文字から大文字になる箇所で切り分ける       大文字から小文字になる箇所の1つ前の文字で切り分ける “$”、”_” でも切り分け 省略語を本来の形にする 省略語リストを作成(現在70語程度) 語の最後が数字なら数字を除去する tmp temporary err error 新たに索引語とする 提案手法の説明3 Itemizeをスライド共通に 切り分け前の文字はどうなるのかをチラッと説明 *索引語を元の語から追加してることを口でチラッと触れる readInputFile add ID Key addIDKey add IDKey addID IDKey getProcessID 2004/2/26 特別研究発表会

索引付けの例 (索引語の拡張:プログラム部) プログラム部の索引語の拡張 C: sample case roomNumber room Number column    string string1 string2 string safety Check safetyCheck row column board row method checks argument sample case roomNumber room Number column string1 string2 safety Check safetyCheck row board row method checks argument sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row method checks argument sample case roomNumber room Number column string1 string2 safety Check safetyCheck row board row method checks argument sample case roomNumber column string1 string2 safetyCheck row board row method checks argument sample case roomNumber column string1 string2 safetyCheck row board row method checks argument sample case roomNumber room Number column string1 string2 safety Check safetyCheck row board row method checks argument 複合語の切り分け 複合語の切り分け 省略語の復元 省略語の復元 末尾の数字を除去 末尾の数字を除去 *省略語説明しない理由をしっかり C: 2004/2/26 特別研究発表会

索引語の拡張(コメント部) 複合語の切り分け 原形でない語は、原形も索引語とする 形態素解析ツール TreeTagger を利用 入力された単語を解析して、その単語の品詞情報と原形を出力 例:“She saw men”を入力すると     She PP she  saw   VVD see  men  NNS man  品詞情報は、不要語の除去に利用 例を工夫する 品詞情報 原形 2004/2/26 特別研究発表会

索引付けの例 (索引語の拡張:コメント部) コメント部の索引語の拡張 C: sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row method checks argument sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row check method checks argument sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row method checks argument sample case roomNumber room Number column   string string1 string2 string safety Check safetyCheck row column board row check method checks argument 複合語の切り分け 原形でない語を原形に戻す 原形でない語を原形に戻す 索引語として 登録 C: データベース 2004/2/26 特別研究発表会

評価 検索漏れをどの程度減らすことができるか 再現率= データベース容量の増加はどの程度抑えられるか 検索漏れの少なさを示す尺度 5種類の検索語で検索 手法適用前と手法適用後で再現率を比較 データベース容量の増加はどの程度抑えられるか 5種類のソースコード群に対してデータベースを作成 不要語除去前と不要語除去後でサイズ(KB)を比較 再現率= 検索された部品中の適合部品の数 全部品の中の適合部品の数 評価の説明 再現率 2004/2/26 特別研究発表会

再現率の変化 Netscape DevEdgeで公開されているソースコード261ファイル(部品数281)を対象 K1 K2 K3 K4 K5 検索語 全ての検索語おいて再現率が上昇 複合語の切り分けが完全でなかった “scrollbar” が “bar” で検索されない 適合部品をどうやって定義?説明する。 なんで1にならんの?とか *切り分けがうまくいかなかった例を挙げる 2004/2/26 特別研究発表会

データベース容量の変化 部品数に関わらず、データベース容量の増加が約20%抑えられた -17.2% -25.3% -18.2% -22.1% DBの種類 部品数 手法導入前 (KB) 索引語拡張のみ(KB) 索引語拡張 +不要語除去(KB) DB1 281 8176 12752 (156.0%) 11344 (138.7%) DB2 511 9440 14608 (154.7%) 12224 (129.5%) DB3 767 17664 25760 (145.8%) 22544 (127.6%) DB4 1120 17456 25584 (146.6%) 21728 (124.5%) DB5 2844 84384 141968 (168.2%) 124480 (147.5%) -17.2% -25.3% -18.2% -22.1% -20.7% *網掛けのずれを直す 平均 -20.7% 部品数に関わらず、データベース容量の増加が約20%抑えられた 2004/2/26 特別研究発表会

まとめと今後の課題 Javaソフトウェア部品検索システムのための索引付けを提案した 今後の課題 索引語を拡張することにより、検索漏れを減らすことができた 不要語を除去することにより、索引語拡張の際のデータベース容量の増加が約20%抑えられた 今後の課題 複合語のより完全な切り分け コメント部が日本語である場合の提案手法の適用 他のプログラム言語への提案手法の適用 まとめ 2004/2/26 特別研究発表会

発表終了 2004/2/26 特別研究発表会

補足:5種類の検索キー K1 バーの設定を行なっている部品が目的 K2 ウィンドウを初期状態に戻す処理が記述されている部品が目的 K3 set  bar バーの設定を行なっている部品が目的 K2 initialize  window ウィンドウを初期状態に戻す処理が記述されている部品が目的 K3 font size フォントのサイズ関連のことが記述されている部品が目的 K4 frame update 新しいフレームにアップデートする際に行なう処理が記述されている部品が目的 K5 mouse event マウスの操作で起こるイベントが記述されている部品が目的 2004/2/26 特別研究発表会

補足: 各手法の検索結果の比較 4 10 5 13 3 7 8 9 12 6 14 set bar initialize window なし 複合語 切り分け 省略語 末尾の 数字 除去 複合語の 原形に 戻す 全手法 適合 文書 set bar 4 10 5 13 initialize window 3 7 font size 8 9 12 frame update 6 mouse event 14 2004/2/26 特別研究発表会

補足: 各手法のデータベース容量の変化 2004/2/26 特別研究発表会

補足: 各手法の索引語総数の変化 2004/2/26 特別研究発表会

補足: 各手法の処理時間の変化 2004/2/26 特別研究発表会

補足:処理の流れ 4 5 3 4 5 1 2 ・拡張した索引語 を登録 ・不要語除去 抽出した語 Word DB プログラム部 ・字句解析 JAVA ソース コード ・索引語として登録 コメント部 3 4 5 1 ・コメント部の語 抽出 ・不要語 除去 ・拡張した 索引語を登録 ・不要な品詞    の語を除去 索引品詞 リスト ・参照 ・形態素解析 コメント部 の語 品詞原形 参照表 2 2004/2/26 特別研究発表会