Javaソフトウェア部品検索システム SPARS-Jの構築 井上研究室 西 秀雄 2015/10/1 修士論文発表 1 発表内容 研究の背景と目的 SPARS-J システム構成 各部の説明 部品解析部 部品検索部 ユーザインタフェース 性能評価 まとめと今後の課題 2015/10/1 修士論文発表 2 背景 過去開発された大量のソフトウェア資産が存在 企業内で開発されたソフトウェアプロダクト WWWから入手可能なソフトウェア成果物 過去の資産を有効活用するために・・・ 効率的なソフトウェアの部品化,可視化が望まれる 大量のソフトウェア資産から必要な部品・情報を検 索するシステムが必要 2015/10/1 修士論文発表 3 目的 ソフトウェア部品検索システムの構築 ソフトウェア的特性を考慮して,大量の資産から自動的 に部品を抽出 必要な部品を高速に検索 部品の機能や使用例に関係する詳細情報を検索者に 提供 システムの用途 既存部品を他のシステム開発で用いる再利用支援 部品の関連の掌握によるプログラム理解や保守支援 2015/10/1 修士論文発表 4 SPARS-J (Software Product Archive,analysis and Retrieval System for Java) Javaソフトウェア部品検索システム 部品:1クラス・インタフェースのソースコード 用途に応じた修正が可能 詳細が把握可能でプログラム理解や保守に便利 特徴 大規模資産から自動的に部品を抽出 キーワードとトークン種類を検索キーとした全文検索 利用関係と,キーワード出現頻度を考慮した検索結果 の順位付け 部品詳細情報の提供 類似部品,部品の利用関係,各種メトリクス値など 2015/10/1 修士論文発表 5 システムの構成 部品登録部 表示画面 Javaファイル 部品情報 部品詳細 データベース キーワード トークン種類 検索結果 部品詳細 ユーザ 検索結果(順位) 部品詳細 登録時の流れ 部品検索部 クエリ 検索時の流れ 2015/10/1 修士論文発表 検索画面 6 システムの構成 部品登録部 Javaファイル 部品情報 部品詳細 表示画面 1. 部品情報の抽出 2. 部品群グラフの構築 1. 利用関係の抽出 2. 類似部品の部品群化 3. 利用関係に基づく順位付け データベース キーワード トークン種類 検索結果 部品詳細 ユーザ 検索結果(順位) 部品詳細 登録時の流れ 部品検索部 クエリ 検索時の流れ 2015/10/1 修士論文発表 検索画面 7 部品情報の抽出 部品の切り出し クラス・インタフェースを見つけて,開 始,終了行番号を保存 部品IDの割り振り 部品の索引付け 予約語以外のキーワードとトークン 種類の組を索引キーとして抽出 索引キーの出現頻度をカウント 2015/10/1 修士論文発表 public final class Sort { /* quicksort */ private static void quicksort(…) { int pivot; : quicksort(…); quicksort(…); } } キーワード トークン種類 Sort クラス定義名 1 quicksort コメント 1 quicksort メソッド定義名 1 pivot 変数名 1 quicksort メソッド呼び出し 2 : : : 索引キー 出現頻度 8 利用関係の抽出 継承 7種のクラス間の関係を利用関係とする 利用関係は部品グラフで表す 頂点は部品,有向辺は利用関係 辺には利用関係の種類が付与される 抽象クラスの実装 インタフェース実装 変数型 インスタンス生成 フィールド参照 メソッド呼び出し 利用関係 public final class A extends B{ public static void main(…) { : C.method(super.field); } } 2015/10/1 B C 継承 フィールド参照 メソッド呼び出し A 部品グラフ 修士論文発表 9 類似部品の判定と部品群化 類似部品:コピーした部品やコピーして一部変更した部品 コピーして別名で用いられた部品 SPARS-Jへの登録時には,コピー元と別部品として扱われる 実際はコピー元を利用している 類似部品を部品群にまとめることで,コピー元への利用関係を反映 所属している部品の利用関係を部品群の利用関係とみなす 類似判定はメトリクスを用いて高速に行う c4 c5 c1 c1 ' c2 2015/10/1 c2 ' 部品グラフ {c4} 部品群化 {c5} {c1, c1'} {c2, c2'} c3 修士論文発表 部品群グラフ {c3} 10 利用関係に基づく順位付け Component Rank(CR)法 利用関係から部品重要度を評価し,順位付けする 多くの部品から利用されている部品は重要 重要な部品から利用されている部品もまた重要 多く利用される部品や,重要な箇所で利用される部品 に大きな評価値が与えられる 使用例が多く,汎用的な部品が上位に来る 以降,得られた評価値をCR値,順位をCRと呼ぶ 2015/10/1 修士論文発表 11 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 修士論文発表 C2 0.200C2 0.1665 0.200 0.200 0.400 0.167 C3 C2 C3 0.200 C3 0.3335 0.400 12 システムの構成 部品登録部 表示画面 Javaファイル 部品情報 部品詳細 1. 部品の検索 データベース 2. キーワード出現頻度に基づく 検索結果(順位) 順位付け 部品詳細 キーワード 検索結果3. 順位の統合 トークン種類 ユーザ 部品詳細 登録時の流れ 部品検索部 クエリ 検索時の流れ 2015/10/1 修士論文発表 検索画面 13 キーワード出現頻度に基づく順位 付け Keyword Rank(KR)法 文書検索システムで用いられるTF-IDF法を改変 部品を特徴付ける索引キーに適当な重みを与える 部品に繰り返しあらわれる索引キー 希少で,特定の部品に偏ってあらわれる索引キー クラス定義名など部品を象徴するトークン種類の索引キー 重みの総和を評価値として順位付け クエリと適合する部品が上位に来る 以降,得られた評価値をKR値,順位をKRと呼ぶ 2015/10/1 修士論文発表 14 順位の統合 各順位付けの観点 1. 部品の使用例の多さ,汎用さ – CR法 2. クエリと部品内容の適合度 – KR法 順位を統合して,両面で優れている部品を検索 結果の上位に表示する 部品検索部で行うため高速な方法が望ましい 2015/10/1 修士論文発表 15 順位の統合(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:ヒットした部品群数) クイックソート×2 + 評価点の計算 2015/10/1 修士論文発表 16 システムの構成 部品登録部 表示画面 Javaファイル 部品情報 部品詳細 データベース キーワード トークン種類 検索結果 部品詳細 ユーザ 検索結果(順位) 部品詳細 登録時の流れ 部品検索部 クエリ 検索時の流れ 2015/10/1 修士論文発表 検索画面 17 検索画面 2015/10/1 修士論文発表 18 検索結果の表示 2015/10/1 修士論文発表 19 部品詳細表示(ソースコード) パッケージブラウザ サブパッケージ一覧 クラス一覧 メソッド一覧 メソッド定義行へ移動 2015/10/1 修士論文発表 20 部品詳細表示(類似部品群) 2015/10/1 修士論文発表 21 部品詳細表示(利用する部品) 2015/10/1 修士論文発表 22 部品詳細表示(利用される部品) 2015/10/1 修士論文発表 23 部品詳細表示(メトリクス) 2015/10/1 修士論文発表 24 性能評価 5つの部品集合を対象にDB構築時間,構築したDBサイズ,検索時 間を比較 評価環境 OS : FreeBSD 5.2-RC CPU : Intel(R) Xeon 2.80GHz(Dual) Memory : 2.0 GB 対象 File数(Size: MB) 部品数 部品群数 索引キー数 A : JDK13 – 部品数少,索引キー多 B : SourceForge – 索引キー少,類似部品多 C : java.about.com – 索引キー少 D : xml.apache.org E : jakarta.apache.org 2015/10/1 A 3593 (35) 5407 5370 574048 B 6158 (67) 7594 966 132583 C 9561 (93) 12355 8995 306551 D 13696 (130) 15634 9033 745663 E 18384 (192) 20463 13839 886574 修士論文発表 25 DB構築時間 AがB,Cと同程度時間がかかっている Aは索引キー数が多いため Bは類似部品が多く,部品群化に時間がかかる D,Eで極端に構築時間が大きくなる メモリが尽きてスワップが生じた 構築時間は索引キー数に依存 File数(Size: MB) 部品数 部品群数 索引キー数 合計時間(秒) 2015/10/1 A 3593 (35) 5407 5370 574048 857.8 B 6158 (67) 7594 966 132583 933.7 C 9561 (93) 12355 8995 306551 866.9 D 13696 (130) 15634 9033 745663 6469.5 E 18384 (192) 20463 13839 886574 16093.1 修士論文発表 26 構築したDBサイズ 格納している情報はほぼ同じ割合 ファイル情報 : 1 %, 部品情報 : 30 % 利用関係情報 : 10%, 索引情報 : 60~70 % 索引キー数に依存 File数(Size: MB) 部品数 部品群数 索引キー数 DB size(MB) 2015/10/1 A 3593 (35) 5407 5370 574048 288 B 6158 (67) 7594 966 132583 288 C 9561 (93) 12355 8995 306551 252 D 13696 (130) 15634 9033 745663 800 E 18384 (192) 20463 13839 886574 1000 修士論文発表 27 検索時間 300件のクエリに対してCGIを経由せず検索 実際には,結果表示の時間がプラス 部品数の増加に従って検索時間も増加 索引キー検索よりも,ヒットした部品のソートに時間がかかる File数(Size: MB) 部品数 部品群数 索引キー数 合計時間(秒) 2015/10/1 A 3593 (35) 5407 5370 574048 4.140 B 6158 (67) 7594 966 132583 4.787 C 9561 (93) 12355 8995 306551 5.964 D 13696 (130) 15634 9033 745663 14.395 E 18384 (192) 20463 13839 886574 19.514 修士論文発表 28 評価の考察 DB構築時間 2万個の部品でも5時間未満 一度構築するだけなので,実用上問題なし DBサイズ 2万個の部品で1GB 全文検索的な索引付けを行うことを考えれば,妥当 検索時間 2万個の部品で1回あたり平均0.07秒 実用上問題なし 順位の統合手法を複雑にすると,精度は向上する可能性がある が,検索時間は急激に増加すると思われる 結果,本システムの性能は実用的である 2015/10/1 修士論文発表 29 まとめと今後の課題 Javaソフトウェア部品検索システムSPARS-Jを構 築し,性能評価によりシステムの実用性を確認した 今後の課題 他のソフトウェア部品への対応 順位付けに関する検討 重み付けや統合順位の求め方 ライセンス管理 ユーザグループによる閲覧権限の設定 2015/10/1 修士論文発表 30 2015/10/1 修士論文発表 31 評価結果 DB構築時間 索引キー数に依存,Eで5時間未満 一度構築するだけなので,実用上問題なし DBサイズ 索引キー数に依存,Eで1GB 全文検索的な索引付けを行うことを考えれば,妥当 検索時間 部品数に依存(ソート時間),Eで300クエリの合計検索時間が 19.5秒 順位の統合手法を複雑にすると,精度は向上する可能性あるが, 検索時間は急激に増加すると思われる 結果,本システムは実用的である 2015/10/1 修士論文発表 32 KR値の計算 総部品数をN,与えたm個の検索語をt1,…, tm, 検索対象としたトークン種類の集合をsubjectとし たときの部品cのKR値 kw(s):トークン種類 s の重み tfs(t,c):c中の種類 s の t の出現頻度 dfsubject(t):集合subject中のいずれかのトークン 種類であるtを含む部品数 m KR (loge ( i 1 kw(s) tf (t , c)) df ssubject s N i subject (ti ) 所属する部品のKR値の平均値が部品 群のKR値 2015/10/1 修士論文発表 ) トークン種類 重み クラス定義 200 インタフェース定義 50 メソッド定義 200 パッケージ 50 インポートパッケージ 30 メソッド呼び出し 10 フィールド参照 10 変数の型 10 生成したクラス 10 ローカル変数参照 1 コメント 30 文書コメント 50 行末コメント 10 文字列リテラル 1 トークン種類と重み 33 索引キーの重み計算 キーワードの出現頻度による順位付けで の負担を減らす キーワード トークン種類重み トークン種類 トークン種類 重み クラス定義 200 インタフェース定義 50 メソッド定義 200 パッケージ 50 インポートパッケージ 30 メソッド呼び出し 10 Sort クラス定義名 1 200 200 フィールド参照 10 quicksort コメント 1 30 30 変数の型 10 quicksort メソッド定義名 1 200 200 生成したクラス 10 pivot 変数名 1 1 1 ローカル変数参照 1 quicksort メソッド呼び出し 2 10 20 コメント 30 : : : : : 文書コメント 50 行末コメント 10 文字列リテラル 1 索引キー 2015/10/1 出現頻度 索引キー重み 修士論文発表 34 類似判定 2種類の特徴メトリクスが一致している割合 複雑度メトリクス クラス内のメソッド数, サイクロマチック数(分岐数)etc ソフトウェア部品の構造的特徴を表す トークン構成メトリクス トークン種類ごとの出現数 ソフトウェア部品の表層的特徴を表す 2015/10/1 修士論文発表 35 順位の統合 効果:一面的な評価で不相応な高順位を得ている ものを減らす 複数の検索システムが出力した順位を統合する,メタ検 索システムで用いられている Searcherで行うため,高速であることが望ましい Bordaの手法を用いる 単純で高速 選挙のアルゴリズムとして知られる 各投票者が様々な観点から候補者を評価,順位をつける 統合順位は多数の投票者が納得する候補者が上位になる 2015/10/1 修士論文発表 36
© Copyright 2024 ExpyDoc