メソッド間の依存関係を利用した 再利用支援システムの実装 小堀一雄† 山本哲男‡ 松下誠† 井上克郎† †大阪大学 大学院情報科学研究科 ‡立命館大学 情報理工学部 電子情報通信学会 1 発表の流れ 背景 現状の問題点 研究の目的 再利用支援手法の提案 再利用支援システム“E-Zone” 適用実験 まとめと今後の課題 電子情報通信学会 2 背景 Javaソフトウェア部品検索システム SPARS-J 目的 プログラム理解や再利用の支援 特徴 大規模資産からの高速な検索 利用実績と,キーワード出現頻度を考慮した検索 結果の順位付け 検索結果の部品詳細情報を提供 電子情報通信学会 3 部品詳細表示 パッケージブラウザ サブパッケージ一覧 クラス一覧 メソッド一覧 メソッド定義行へ移動 詳細情報を読んで 再利用するか判断 ・プログラム理解 電子情報通信学会 4 システムと利用者のギャップ 既存の検索システムは、検索結果として、単 一の部品に関する情報しか提示しない。 ギャップが発生 一方、機能が単独の部品で実現されているこ とは稀であり、多くの場合は複数の部品に 渡って実現されている 電子情報通信学会 5 ギャップの例 検索 検索 検索 public void class A{ public int x; public int a ( int p ){ B b = new B(); x = b.b(p); return x; } public void aa(){ x = x +1 } public void class B{ public int B (){ } public void b(int p){ C c = new C(); return p +c.c(); } 電子情報通信学会 public void class C{ public int age; public int c(){ return age } 6 問題点 開発者は,検索結果のメソッドを起点とする 一連の処理が新しい部品を呼び出さなくなる まで繰り返し検索しないと,以下の2点を知る ことができない。 どこまで繋がっているか?(総規模) どこを見るべきか?(重要な処理) 開発者にとって大きな作業コスト 電子情報通信学会 7 研究の目的 メソッドの静的な依存関係を利用して、あるメ ソッドが依存,被依存している全部品を自動 的に解析して表示する システムの支援単位を依存部品群とする 開発者が繰り返し検索していた情報をあらかじめ 表示する ギャップを埋める 電子情報通信学会 8 提案する手法 メソッド間の依存関係を利用した再利用支援 手法 あらかじめ登録しておいた大量の部品に対して, 選択された部品と依存関係を持つ部品を収集, 分析して提示する 依存部品群 メトリクスを用いて分析し、重要部品を判定 どこまで繋がっているか? どこを見るべきか? 被依存部品(=利用部品)群 再利用の例として表示 電子情報通信学会 9 手法の流れ 4 部品解析 依存関係抽出 Javaファイル 依存グラフ作成 ユーザ 依存関係探索 メトリクス計算 重要部品判定 電子情報通信学会 対象メソッド 結果表示 10 部品解析・依存関係抽出 A.java ファイル public void class A{ public int x; 1 public int a ( int p ){ B b = new B(); x = b.b(p); return x; } * クラス 1 * メソッド public void aa(){ x = x +1 } 電子情報通信学会 クラス 依存関係 メソッド 依存関係 11 手法の流れ 4 部品解析 依存関係抽出 Javaファイル 依存グラフ作成 依存関係探索 メトリクス計算 重要部品判定 電子情報通信学会 対象メソッド ユー ザ データ表示 12 依存部品グラフ作成 :メソッド :呼び出し関係 電子情報通信学会 13 手法の流れ 4 部品解析 依存関係抽出 Javaファイル 依存グラフ作成 ユーザ 入力 依存部品探索 メトリクス計算 重要部品判定 電子情報通信学会 対象メソッド 結果表示 14 依存部品探索 :メソッド :起点メソッド :依存メソッド :利用メソッド 電子情報通信学会 15 手法の流れ 4 部品解析 依存関係抽出 Javaファイル 依存グラフ作成 ユーザ 依存部品探索 メトリクス計算 重要部品判定 電子情報通信学会 対象メソッド 結果表示 16 メトリクス計算 各部品ごとに以下の3つのメトリクスを求める LOC(行数) CYC(サイクロマチック数) 規模を表すメトリクス 複雑さを表すメトリクス CR(Component Rank) 呼び出し頻度に関する重要度 多くの部品に呼び出されている部品は重要 重要な部品に呼び出されている部品も重要 電子情報通信学会 17 メトリクス計算による“重要部品”判定 “重要部品” 繰り返し呼ばれ、処理が複雑な部品は、主要な機能に強 く関連している可能性が高い 高CR 高LOC/CYC 繰り返し呼ばれている 処理が複雑 赤色でハイライト 閾値 高CR:CRが上位30%以内 高LOC/CYC:CYCが3以上で,1CYC当りのLOCが3以上 電子情報通信学会 18 手法の流れ 4 部品解析 依存関係抽出 Javaファイル 依存グラフ作成 ユーザ 依存部品探索 メトリクス計算 重要部品判定 電子情報通信学会 対象メソッド 結果表示 19 E-Zone メソッドと依存関係を持つ部品群を収集,分 析する再利用支援システム“E-Zone” 入力 メソッド 出力 依存部品群 総規模に関するメトリクス表示,依存関係ツリー表示 “どこまで繋がっているか?” メトリクス計算により、自動的に重要部品を表示 “どこを見るべきか?” 利用部品群 一覧表示 電子情報通信学会 20 システムの処理 4 登録時の流れ 検索時の流れ 部品登録部 部品解析 依存関係解析 ユーザ Javaファイル データベース 依存部品探索部 対象メソッド SPARS-J メトリクス計算部 データ表示部 電子情報通信学会 21 システムの処理 4 登録時の流れ 検索時の流れ 部品登録部 部品解析 依存関係解析 ユーザ Javaファイル データベース 依存部品探索 入力 依存部品探索部 対象メソッド SPARS-J メトリクス計算部 データ表示部 電子情報通信学会 22 システムの処理 4 登録時の流れ 検索時の流れ 部品登録部 部品解析 依存関係解析 ユーザ Javaファイル データベース 依存部品探索 入力 依存部品探索部 対象メソッド メトリクス計算 重要部品判定 メトリクス計算部 SPARS-J データ表示部 電子情報通信学会 23 システムの処理 4 登録時の流れ 検索時の流れ 部品登録部 部品解析 依存関係解析 ユーザ Javaファイル データベース 依存部品探索 入力 依存部品探索部 対象メソッド メトリクス計算 重要部品判定 メトリクス計算部 SPARS-J データ表示部 電子情報通信学会 24 データ表示部 利用部品群 依存部品群 総規模 依存ツリー メトリクス ソースコード ダウンロード 電子情報通信学会 25 適用実験 ケーススタディ 1 “どこまで繋がっているか?” 2 “どこを見るべきか?” 総規模や依存ツリーを用いて支援する 重要部品の表示によって支援する 評価 “重要部品”の適合率 電子情報通信学会 26 ケーススタディ1 “どこまで繋がっているか?” 総規模や依存ツリーを用いて支援する ソートを行うプログラムを作成するために, SPARS-Jに“quicksort”という検索クエリを与えて、 再利用部品候補として2つのメソッドを得た。この とき、どちらが理解し易いか判断したいとする 電子情報通信学会 27 再利用部品候補 部品1 org.apache.turbine.util.QuickSort.quickSort(O bject, int, int, Comparable) LOC 74,CYC 11 部品2 cz.dhl.io.CoSort.QuickSort(CoFile, int, int) LOC 47,CYC 12 電子情報通信学会 28 部品群全体の規模 部品1 単 [ loc:74, cyc:11 ] 全 [ loc:76, cyc:12 ] 部品2 単 [ loc:47, cyc:12 ] 全 [ loc:94, cyc:31 ] シンプルなquicksort 独自のデータ構造が 再利用部品として理解し易いのは部品1 入り込んでいる 電子情報通信学会 29 ケーススタディ2 “どこを見るべきか?” 重要部品の表示によって支援する C++,C,Java等のソースコードを整形,再構成す るソフトウェア“AStyle”のmainメソッドを起点メ ソッドとして、本システムに適用した。 電子情報通信学会 30 判定された重要部品 左のような長いツリーが得られた “どこをみればいいのか?” → 重要部品 重要メソッド名 機能 LOC CY C CR ASBeautifire.beautify ソースを整形する 918 292 20 AStyle.parseOption プログラム言語を設定 163 41 14 ASFormatter. isOneLineBlockReached ブロックが1行に収まる か判定する 52 14 16 ASBeautifier. getNextProgramCharDistnce 次の文字までの空白数 を調べる 32 8 27 ASFormatter. peekNextChar 次の文字を読み込む 18 5 26 電子情報通信学会 31 ツリー構造を用いた機能理解 重要部品周りのツリー構造を読みとることで 重要処理の流れを理解することができる beautifyはmainメソッドから直接見えていない AStyle.main → ASFormatter.nextLine → ASBeautifier.beautify 1行ずつbeautifyを繰り返し呼び出して整形している 電子情報通信学会 32 評価実験 メトリクス評価によってシステムが自動的に判定した “重要部品”(高CR&高LOC/CYC)が、本当にソフト ウェアの重要な機能を実装しているかどうかを評価 する 対象 無作為に選んだ10個のソフトウェアのmainメソッド 本当に重要かどうかの判断 ソースコードやドキュメントコメントを読んで判断 電子情報通信学会 33 ソフトウェア名 依存部品数 重要部品数 (システム) 重要部品数 (人間) 適合率 1 2 3 4 JEdit JeditLogger JGraph Astyle 237 7 49 92 16 1 1 5 10 1 1 4 0.625 1.000 1.000 0.800 5 Tidy 35 2 2 1.000 6 7 8 VncViewer 102 GanttProject 163 FontChooser 3 11 12 1 7 11 0 0.636 0.917 0.000 9 10 Parser ClassFinder 94 8 14 1 11 1 0.786 1.000 790 64 48 0.750 計 電子情報通信学会 34 考察 適合率は0.750と高い数値を示した 規模の小さなソフトウェアにおいては低い適合率に なった プログラムの機能を大まかに理解するには、本システム が提示する重要メソッドを見れば良い 単純な構造下では、CRが意味を持たないため 小規模の場合は,別の判断基準を用いるのが良いと考え られる 再現率は評価中 約100個の依存部品に関して調べたところ約7割 漏れた重要部品=1回しか呼ばないが重要な部品 電子情報通信学会 35 まとめと今後の課題 まとめ メソッド間の依存関係を利用した再利用支援シス テム“E-Zone”を提案し,SPARS-Jの一部として 実現した 適用実験を通じて,本システムのケーススタ ディーを行うとともに、その有効性を検証した 今後の課題 より多くのデータを用いた有効性の検証 電子情報通信学会 36
© Copyright 2024 ExpyDoc