SPARS-J 技術解説 大阪大学大学院情報科学研究科 井上研究室 横森 励士 2015/10/1 SPARS技術解説 1 発表の流れ SPARS-Jのアーキテクチャ 部品の登録・解析 部品の切り出し・登録 検索機能実現を目的とした解析 ソースコードの解析 とキーワードの抽出 検索を支援するための情報提供を目的とした解析 類似部品の発見と部品群の構築 利用関係の抽出 部品の順位付け 部品の検索 シンプルな画面構成と豊富な付加機能の両立 キーワードベースの検索機能 閲覧支援機能(パッケージブラウザ,メソッド一覧,…) 2015/10/1 SPARS技術解説 2 SPARS-J (Software Product Archive,analysis and Retrieval System for Java) Javaソフトウェア部品検索システム 部品:1クラス・インタフェースのソースコード 再利用しやすい単位として,クラスを採用 SPARS-Jの特徴 大規模資産から自動的に部品を抽出 キーワードとトークン種類を検索キーとした全文検索 利用関係と,キーワード出現頻度を考慮した検索結果の順位 付け 部品詳細情報の提供 – 類似部品,部品の利用関係,各種メトリクス値など 2015/10/1 SPARS技術解説 3 SPARS-Jのアーキテクチャ 部品登録部 表示画面 Javaファイル 部品情報 部品詳細 リポジトリ キーワード トークン種類 検索結果 部品詳細 ユーザ 検索結果(順位) 部品詳細 登録時の流れ 部品検索部 クエリ 検索時の流れ 2015/10/1 SPARS技術解説 検索画面 4 部品の登録・解析 2015/10/1 SPARS技術解説 5 部品の登録 指定されたフォルダ 以下の全てのJava ソースコードを解析 複数指定も可 指定した場所に, リポジトリを作成 各部品の情報を 保存 検索に利用 2015/10/1 SPARS技術解説 6 部品の解析 部品登録時に行われる解析 部品の切り出し 検索機能実現を目的とした解析 ソースコードを文書とみなしての解析 キーワードの抽出 部品の索引付け 情報提供を目的とした解析 Javaプログラムの解析 類似している部品のグループ化 部品間の利用関係の抽出 部品の順位付け 2015/10/1 SPARS技術解説 7 部品の解析 部品登録時に行われる解析 部品の切り出し 検索機能実現を目的とした解析 ソースコードを文書とみなしての解析 キーワードの抽出 部品の索引付け 情報提供を目的とした解析 Javaプログラムの解析 類似している部品のグループ化 部品間の利用関係の抽出 部品の順位付け 2015/10/1 SPARS技術解説 8 部品の切り出し Sort.java (FileID:25) 部品の切り出し 検出できたJavaファイル毎に FileIDを付加 各ファイルを解析し,クラス・イ ンタフェース毎に クラス名,ファイルID,開始・終 了行番号を保存 部品IDを割り振り 1: 2: 3: 4: 5: 6: 7: 8: 9: public final class Sort { /* quicksort */ private static void quicksort(…) { int pivot; : quicksort(…); quicksort(…); } } – 部品IDで管理 2015/10/1 部品ID クラス名 FileID 開始行 終了行 30 Sort 25 1 9 SPARS技術解説 9 部品の解析 部品登録時に行われる解析 部品の切り出し 検索機能実現を目的とした解析 ソースコードを文書とみなしての解析 キーワードの抽出 部品の索引付け 情報提供を目的とした解析 Javaプログラムの解析 類似している部品のグループ化 部品間の利用関係の抽出 部品の順位付け 2015/10/1 SPARS技術解説 10 キーワードの抽出 部品の特徴を現す単語(キーワード)を抽出 構文解析時の情報を利用 予約語以外をキーワードとして抽出 プログラム上でのトークン種類も入手 public final class Sort { /* quicksort */ private static void quicksort(…) { int pivot; : quicksort(…); quicksort(…); } } 2015/10/1 SPARS技術解説 11 キーワードの索引付け キーワードの索引付け public final class Sort { /* quicksort */ private static void quicksort(…) { int pivot; : quicksort(…); quicksort(…); } } キーワードとトークン種類の 組を索引キーに 部品IDと関連付けして保存 索引キーの出現頻度もカウ ント 2015/10/1 ID キーワード 30 Sort クラス定義名 1 30 quicksort コメント 1 30 quicksort メソッド定義名 1 30 pivot 変数名 1 30 quicksort メソッド呼び出し 2 30 : : SPARS技術解説 トークン種類 索引キー : 出現頻度 12 部品の解析 部品登録時に行われる解析 部品の切り出し 検索機能実現を目的とした解析 ソースコードを文書とみなしての解析 キーワードの抽出 部品の索引付け 情報提供を目的とした解析 Javaプログラムの解析 類似している部品のグループ化 部品間の利用関係の抽出 部品の順位付け 2015/10/1 SPARS技術解説 13 類似部品のグループ化 ソフトウェア開発の際には,過去に作成したソース コードを再利用することも多い コピーしてそのまま利用する場合もあれば クラス名など,一部を変更(カスタマイズ)して利用する場 合もある 類似部品に関する情報は検索支援に役立つ 同じ機能(クラス)を利用している,他の利用例の検索 がより簡単に カスタマイズの仕方など,ノウハウの共有が簡単に 2015/10/1 SPARS技術解説 14 類似部品の判定とグループ化 類似部品をグループ化する メトリクスを用いて類似部品を判定する トークン構成や構造が似ている部品を類似部品に 得られた各グループを類似部品群と呼ぶ c4 c5 c1 c1 ' c2 2015/10/1 c2 ' {c4} 部品群化 {c5} {c1, c1'} {c2, c2'} c3 SPARS技術解説 {c3} 15 利用関係の抽出 部品(ソースコード)の場合,ある部品が他の部品を 利用することが多い メソッド呼び出し,継承,etc ..... など多様にわたる この点が自然言語文書との大きな違い この利用関係はソースコードの理解を難しくしている原因 ソフトウェアの振る舞いを理解するための拠り所でもある ソースコードを検索する際には,利用関係を追跡 できる機能は必須 2015/10/1 SPARS技術解説 16 利用関係の抽出 継承 7種のクラス間の関係を利用関係とする 利用関係は部品群グラフ上で表す 頂点は部品群,有向辺は利用関係 辺には利用関係の種類が付与される 抽象クラスの実装 インタフェース実装 変数型 インスタンス生成 フィールド参照 メソッド呼び出し 利用関係 public final class A extends B{ public static void main(…) { : C.method(super.field); } } 2015/10/1 B C 継承 フィールド参照 メソッド呼び出し A SPARS技術解説 部品群グラフ 17 部品の順位付け 検索システムで多数の部品が候補として上がってき たとき,それを順位付けする方法が必要 自然言語文書の場合,キーワードの出現頻度に基づい て評価するのが一番効果的 ソフトウェア部品の検索システムの場合は,ソース コードの特性を順位付けに生かすことができるはず その部品がよく利用されている? 単なる出現頻度ではなく,出現場所を考慮 2015/10/1 SPARS技術解説 18 SPARS-Jにおける順位付け手法 1. 利用関係をもとにした評価手法(CR) 2. キーワードの出現頻度をもとにした評価手法(KR) 3. 1.2.の手法を統合した評価手法(CR+KR) 2015/10/1 SPARS技術解説 19 1.利用関係をもとにした評価手法 Component Rank(CR)法 利用関係から部品の重要さを評価し,順位付けする 多くの部品から利用されている部品は重要 重要な部品から利用されている部品もまた重要 使用例が多く,汎用的な部品が上位に来る 2015/10/1 SPARS技術解説 20 CR法の計算手法 部品群グラフをもとにした繰り返し計算 1. 各頂点に総和を1として適当な重みを与える 2. 頂点の重みを,出ていく辺で分配する 3. 入ってくる辺の重みの総和を,その頂点の重みとして再定義 4. 頂点の重みが収束するまで,2.3.を繰り返し計算 5. 収束した重みが部品群のCR値 C1 0.334 C1 0.334 C1v1×50% CC210.167CC21 0.333 0.333 0.333 v1×50% 0.167 v3×100% 0.333 C3 0.333 2015/10/1 C3 0.333 CC2 10.1665CC21 0.500 0.167 0.400 0.1665 v2×100% 0.500 0.333 C3 C3 0.500 SPARS技術解説 C2 0.200C2 0.1665 0.200 0.200 0.400 0.167 C3 C2 C3 0.200 C3 0.3335 0.400 21 2.キーワードの出現頻度をもとにし た評価手法 Keyword Rank(KR)法 文書検索システムで用いられる手法を部品検索に特化 部品を特徴付ける索引キーに,より重みを与える ある部品に繰り返しあらわれる索引キー 希少で,特定の部品に偏ってあらわれる索引キー クラス定義名など部品を象徴するトークン種類の索引キー 上位に来る部品はクエリと適合しやすい 2015/10/1 SPARS技術解説 22 3. 順位付け手法の統合 各順位付けの観点 1. 部品の使用例の多さ,汎用さ – CR法 2. クエリと部品内容の適合度 – KR法 両面で優れている部品を検索結果の上位に 表示する Bordaの手法を用いて順位を統合 2015/10/1 SPARS技術解説 23 3. 順位付け手法の統合 Bordaの手法を利用 順位に対して評価点を割り当て,その合計点をもとに昇順にソート 例) 部品群 = { A, B, C, D, E } CR KR 合計点 CR KR CR+KR 1位 A D A 1 3 4 1位 A 2位 E C B 4 4 8 2位 C 3位 C A C 3 2 5 3位 D 4位 B B D 5 1 6 4位 E 5位 D E E 2 5 7 5位 B CRとKRの順位 各部品群の評価点 統合された順位 計算量は平均O(nlogn) (n:ヒットした部品群数) クイックソート×3 + 評価点の計算 単純で高速 2015/10/1 SPARS技術解説 24 部品の検索 2015/10/1 SPARS技術解説 25 部品の検索 部品登録部 表示画面 Javaファイル 部品情報 部品詳細 リポジトリ キーワード トークン種類 検索結果 部品詳細 ユーザ 検索結果(順位) 部品詳細 登録時の流れ 部品検索部 クエリ 検索時の流れ 2015/10/1 SPARS技術解説 検索画面 26 部品検索部の実現 検索閲覧機能はcgiを用いて実現 ApacheなどのWebサーバ上に,cgiを設置 cgi 設置時にはリポジトリの位置情報が付加されたcgi が 生成される SPARS-Jは指定されたリポジトリを参照する 2015/10/1 SPARS技術解説 27 検索機能について キーワードベースの検索が可能 部品登録時に生成された,索引表を用いて検索 検索の種類 トップページからの検索 一般的な利用を想定した検索条件を設定 トークンの種類を特に意識せずに検索 検索オプションの利用 トークン種類を検索条件に含めることができる – クラス名だけから,コメントだけから,コメント以外から,… 形態素解析により,語形変化した語も検出できる 2015/10/1 SPARS技術解説 28 検索画面(トップページ) 2015/10/1 SPARS技術解説 29 検索画面(検索オプション) 2015/10/1 SPARS技術解説 30 検索・閲覧の支援機能 豊富な検索・閲覧支援機能 閲覧しやすさの向上 検索結果一覧 ソースコードへのハイライト メソッド一覧 ソフトウェア全体像の把握 パッケージブラウザ 類似部品一覧 利用部品一覧 被利用部品一覧 更なる解析,品質の調査に メトリクス一覧 使い勝手の向上 ソースコード(アーカイブ)の取得機能 2015/10/1 SPARS技術解説 31 検索結果の表示 2015/10/1 SPARS技術解説 32 部品詳細表示(ソースコード) パッケージブラウザ サブパッケージ一覧 クラス一覧 メソッド一覧 メソッド定義行へ移動 2015/10/1 SPARS技術解説 33 部品詳細表示(類似部品群) 2015/10/1 SPARS技術解説 34 部品詳細表示(利用する部品) 2015/10/1 SPARS技術解説 35 部品詳細表示(利用される部品) 2015/10/1 SPARS技術解説 36 部品詳細表示(メトリクス) 2015/10/1 SPARS技術解説 37 まとめ SPARS-Jのアーキテクチャを紹介した. SPARS-Jは 大量のソースコードから自動的に部品を抽出し,キーワー ドとトークン種類を検索キーとした全文検索を提供する. 検索結果の表示では,部品間の利用関係や,キーワー ド出現頻度を考慮して,順位付けする. 部品の閲覧を支援するために,類似部品,部品の利用 関係,各種メトリクス値などの情報を提供する. 2015/10/1 SPARS技術解説 38
© Copyright 2024 ExpyDoc