潜在的意味解析法LSAに基づく ソフトウェアシステム分類法の提案

Slides:



Advertisements
Similar presentations
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
ソフトウェアの類似性の分析とその応用に関する研究
ソフトウェア変更間の関連抽出の ための差分集合構築手法
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
肥後 芳樹, ○石尾 隆, 渡邊 結, 出張 純也, 畑 秀明, 三宅 達也, 水野 修, 丸山 勝久
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
ソードコードの編集に基づいた コードクローンの分類とその分析システム
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
重複コードと非重複コードにおける 修正頻度の比較
限られた保存領域を使用する Javaプログラムの実行トレース記録手法の 提案と評価
Javaプログラムの変更を支援する 影響波及解析システム
社会シミュレーションのための モデル作成環境
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
コンポーネントランク法を用いたJavaクラス分類手法の提案
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コード片のベクトル表現に基づく 大規模コードクローン集合の特徴調査
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
多様なプログラミング言語に対応可能な コードクローン検出ツール CCFinderSW
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
潜在的意味解析法LSA を利用した ソフトウェア分類システムの試作
Q3 On the value of user preferences in search-based software engineering: a case study in software product lines Abdel Salam Sayyad (West Virginia University,
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
アスペクト指向言語のための視点に応じた編集を可能にするツール
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
A-17 検索履歴のプライバシーを秘匿した ユーザクラスタリング
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
Webページタイプによるクラスタ リングを用いた検索支援システム
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
コンパイラ 2012年10月11日
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
1.2 言語処理の諸観点 (1)言語処理の利用分野
Detecting Software Modularity Violations
Presentation transcript:

潜在的意味解析法LSAに基づく ソフトウェアシステム分類法の提案 井上研究室 川口 真司

背景 多数のソフトウェアを集積する「ソフトウェアリポジトリ」が幅広く利用されている リポジトリには大量のソフトウェアが存在 SourceForge(http://sourceforge.net/) Corporate Source* リポジトリには大量のソフトウェアが存在 SourceForgeには55000以上ものソフトウェアが存在(2003/02現在) 分類・整理することが必要不可欠 リポジトリ内にあるソフトウェアは手動で分類 リポジトリ管理者が, 階層構造を作成 分類者が, 定義された階層から, そのソフトウェアにふさわしい分類を選択 *Jamie Dinkelacker and Pankaj K. Garg Corporate Source: Applying Open Source Concepts to a Corporate Environment (Position Paper) 1st ICSE International Workshop on Open Source Software Engineering, May 15, 2001, Toronto, Canada. 2003/02/17 修士学位論文発表会

問題点 階層構造をもって排他的にソフトウェアを分類することは適切か ソフトウェアはさまざまな側面を持っている 一般にはソフトウェアの用途によって分類 しかし、利用しているライブラリや依存アーキテクチャによる分類もまた有用        ソフトウェアはさまざまな側面を持っている 2003/02/17 修士学位論文発表会

非排他的分類 これらライブラリや アーキテクチャに対する 知識がなければ、 このような分類を準備 できない regexp エディタ 表計算 MFC GTK ソフトウェア1 ソフトウェア3 これらライブラリや アーキテクチャに対する 知識がなければ、 このような分類を準備 できない エディタ 表計算 GUI (MFC) GUI (MFC) 正規表現サポート (regexp) 正規表現サポート (regexp) ソフトウェア2 ソフトウェア4 エディタ 表計算 GUI (GTK) GUI (GTK) 正規表現サポート (regexp) 2003/02/17 修士学位論文発表会

目的 ソフトウェアの自動分類 ソフトウェアが持つさまざまな側面を考慮した非排他的分類 依存ライブラリや前提とするアーキテクチャを自動的に判別し分類する ソースコードから自動的に分類 分類対象となるソフトウェアに対する深い知識が必要ない 2003/02/17 修士学位論文発表会

潜在的意味解析法 LSA Latent Semantic Analysis 自然言語で書かれた文書、単語の類似度を計測する ベクトル空間モデルに従った手法の一つ ベクトル空間モデルでは検出できない間接的な関連の抽出を可能にしている 2003/02/17 修士学位論文発表会

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 2003/02/17 修士学位論文発表会

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適用後 2003/02/17 修士学位論文発表会

LSAによるソフトウェア類似度測定 ソフトウェアに対して LSA を適用 LSAを適用した結果からソフトウェアの類似度を測定 文書 ⇒ ソフトウェア 単語 ⇒ 識別子(変数名、関数名、型名) LSAを適用した結果からソフトウェアの類似度を測定 測定した類似度からクラスタ分析ができるのでは クラスタ分析・・・類似度の高いもの同士をグループ化する手法 2003/02/17 修士学位論文発表会

ソフトウェア類似度の傾向 類似度を手がかりに分類を行っても適正な分類が得られない 類似度が高い理由がソフトウェアによって異なる ソフトウェア1 ソフトウェア3 エディタ 表計算 GUI (MFC) GUI (MFC) 正規表現サポート (regexp) 正規表現サポート (regexp) ソフトウェア2 ソフトウェア4 エディタ 表計算 GUI (GTK) GUI (GTK) 正規表現サポート (regexp) 2003/02/17 修士学位論文発表会

識別子による分類 ソースコード中の識別子は、その動作を表している window という識別子があるプログラム文の周辺は、なんらかの GUI に関する操作を行っている 識別子のうち特に類似しているものを結びつけて、それらをひとつのグループとみなして分類を行う ソフトウェア1 ソフトウェア3 エディタ 表計算 GUI (MFC) GUI (MFC) window menuBar cmdButton window MFC 2003/02/17 修士学位論文発表会

提案手法 Sof1 Soft4 Soft2 Soft5 Soft3 Soft6 1.識別子を クラスタリング 2.ソフトウェアクラスタの作成 A B B F G G A B C D F G H Soft2 Soft5 A B C D E F G H H 2.ソフトウェアクラスタの作成 Soft3 Soft6 B C C C D E G H 1 2 3 1 4 5 6 3.クラスタタイトルの作成 1 2 3 1 4 5 6 ClusterName1 ClusterName2 2003/02/17 修士学位論文発表会

1.識別子をクラスタリング LSA の結果を元に識別子間の類似度計測 類似度を利用してクラスタ分析 得られたクラスタを「トークンクラスタ」と呼ぶ Sof1 Soft4 A B B F G G 1.識別子を クラスタリング Soft2 Soft5 A B C D E F G H H A B C D F G H Soft3 Soft6 B C C C D E G H 2003/02/17 修士学位論文発表会

2.ソフトウェアクラスタの作成 各トークンクラスタごとに対応するソフトウェアクラスタを作成 トークンクラスタ内のクラスタを持っているソフトウェアの集合 Sof1 Soft4 A B B F G G A B C D F G H Soft2 Soft5 2.ソフトウェアクラスタの 作成 A B C D E F G H H Soft3 Soft6 1 2 3 1 4 5 6 B C C C D E G H 2003/02/17 修士学位論文発表会

3.クラスタタイトルの作成 クラスタを短く表現するタイトルを作成する LSA を行った後の行列からソフトウェアベクトルを取得 クラスタに含まれるソフトウェアベクトルを合計する そのベクトルの中で値の大きい部分に対応するトークンを数個選び出し、これをタイトルとする 3.クラスタタイトルの作成 1 2 3 1 4 5 6 1 2 3 1 4 5 6 ClusterName1 ClusterName2 2003/02/17 修士学位論文発表会

実験 提案手法でどのような分類が抽出できるのかを実験 分類対象 提案手法を実現するシステムを実装 分類対象として C 言語で記述されたソフトウェアに対応 分類対象 SourceForge から無作為に 6 つのジャンルを選択  boardgames, compilers, database, editor, videoconversion, xterm その中から C 言語で書かれたプログラムをテストデータとして選択 全部で 41 個のソフトウェア 合計 164102個の識別子が存在 そのうち単一のソフトウェアにのみ現れるトークンを除いた残り 22048 個を利用 2003/02/17 修士学位論文発表会

分類システム出力結果(一部) 新しい分類 構文解析ライブラリyaccを利用しているソフトウェアの集合 タイトル ソフトウェア クラスタ数 AOP, emitcode, IC_RESULT, IC_LEFT, aop, aopGet, IC_RIGHT, pic14_emitcode, iCode, etype compilers/gbdk, compilers/sdcc 8597 CASE_IGNORE, CASE_GROUND_STATE, screen, CASE_PRINT, CASE_BYP_STATE, Widget, TScreen, CASE_IGNORE_STATE, CASE_PLT_VEC, CASE_PT_POINT xterm/R6.3, xterm/R6.4 2160 YY_BREAK, yyvsp, yyval, DATA, yy_current_buffer, tuple, yy_current_state, yy_c_buf_p, yy_cp, uint32 compilers/gbdk, database/mysql-3.23.49, database/postgresql-7.2.1 223 AVI, cinfo, OUTLONG, avi_t, AVI_errno, hdrl_data, OUT4CC, nhb, ERR_EXIT, str2ulong videoconversion/dv2jpg-1.1, videoconversion/libcu30-1.0, videoconversion/mjpgTools 177 board, num_moves, ply, pawn_file, npiece, pawns, moves, white_to_move, move_s, promoted boardgame/Sjeng-10.0, boardgame/cinag-1.1.4, boardgame/faile_1_4_4 154 GtkWidget, gchar, gpointer, gint, widget, gtk_widget_show, N_, g_free, dialog, g_return_if_fail boardgame/gbatnav-1.0.4, editor/gedit-1.120.0, editor/gmas-1.1.0, editor/gnotepad+-1.3.3, editor/peacock-0.4 104 既存の(SourceForgeの)分類と同じ分類 GTK ライブラリを利用しているソフトウェアの集合 構文解析ライブラリyaccを利用しているソフトウェアの集合 新しい分類 2003/02/17 修士学位論文発表会

実験結果 合計40個のクラスタ 新しい分類によるクラスタの内訳 新しいクラスタ 8 既存の分類と同一のクラスタ 18 GTK(2クラスタ) GUI ライブラリ yacc(2クラスタ) 構文解析ライブラリ regexp 正規表現解釈ライブラリ getopt 引数解釈用ライブラリ JNI Java のネイティブメソッドを実現するアーキテクチャ Python/C Python インタプリタ拡張アーキテクチャ 新しいクラスタ 8 既存の分類と同一のクラスタ 18 2003/02/17 修士学位論文発表会

考察 ライブラリやアーキテクチャによる分類を前提知識なしで発見 クラスタタイトル 分かりやすいものもあれば、分かりにくいものもある 同じライブラリを利用しているクラスタは、比較的分かりやすいタイトルがつく傾向がある 2003/02/17 修士学位論文発表会

まとめと今後の課題 ソフトウェアを自動分類する手法を提案した 本手法により、ソフトウェア集合やそこに含まれるライブラリについての知識がなくとも、新たな分類を発見できることを示した 今後の課題 クラスタタイトルのよりよい作成方法の考案 大規模な実験 2003/02/17 修士学位論文発表会

終 2003/02/17 修士学位論文発表会

考察 従来の分類では注目してない観点では 従来の分類という観点からは クラスタタイトル ライブラリによる新しい分類を発見 前提知識なしで発見することができた 従来の分類という観点からは 適合率は高い 再現率は低い クラスタタイトル 適切についているものもあるが、そうでないものもある ライブラリを抽出したクラスタはわかりやすい名前がつく傾向がある 2003/02/17 修士学位論文発表会

実験結果 40個のクラスタ トークン数上位 20 個のクラスタ 既存の分類に従うクラスタ 18 既存の分類とは異なる、新しいクラスタ 8 (GTK(2クラスタ), yacc(2クラスタ), regexp, JNI, getopt, Python/C) 8 その他 14 既存の分類に従うクラスタ 14 既存の分類とは異なる、新しいクラスタ (GTK(2クラスタ), yacc) 3 その他 2003/02/17 修士学位論文発表会

適合率・再現率 適合率(precision) 再現率(recall) 全クラスタ 上位20クラスタ 適合率 0.65 0.85 再現率 得られたクラスタのうち、正しい分類となっているクラスタの割合 再現率(recall) 想定される正しい分類が、得られたクラスタにどれだけ含まれているか ここでは、既存の分類のみを想定される正しい分類とする 全クラスタ 上位20クラスタ 適合率 0.65 0.85 再現率 0.16 0.13 2003/02/17 修士学位論文発表会

関連研究 ある単一のソフトウェアを分割し, それらを意味のあるまとまりに再構成する試みがなされている ソフトウェアをある種の単位に分割 ファイル, 関数 それらの単位間での類似度を算出し, 類似度を元に再構成する ファイル名* 関数間の呼び出し関係(コールグラフ)** 利用している識別子*** *N. Anquetil and T. Lethbridge. Extracting concepts from file names; a new file clustering criterion. In Proc. 20th Intl. Conf. Software Engineering, May 1998. **G. A.  Di Lucca, A. R.  Fasolino, F.  Pace, P.  Tramontana, U.  De Carlini, Comprehending Web Applications by a Clustering Based Approach 10th International Workshop on Program Comprehension (IWPC'02) ***Jonathan I. Maletic and Andrian Marcus, Supporting Program Comprehension Using Semantic and Structural Information in Proceedings of the 23rd IEEE International Conference on Software Engineering (ICSE 2001) 2003/02/17 修士学位論文発表会

既存の手法の問題点 単一のソフトウェアが対象 複数のソフトウェアを対象にした場合, これらの仮定が当てはまらない 区分の単位であるファイルや関数は、単一の機能のみ果たしていると仮定できる 呼び出し関係などの構造的情報が利用できる 複数のソフトウェアを対象にした場合, これらの仮定が当てはまらない ソフトウェアは単一の機能のみでは構成されていない 構造的情報を利用している手法は利用できない 2003/02/17 修士学位論文発表会

LSA (Latent Semantic Analysis)* 潜在的意味解析 自然言語で記述された文書・単語の類似度を計測する手法 ドキュメントを単語頻度表のベクトルであらわす 単語間の間接的関係を抽出できる * Landauer, T. K., Foltz, P. W., & Laham, D. (1998). Introduction to Latent Semantic Analysis.  Discourse Processes, 25, 259-284. 2003/02/17 修士学位論文発表会