動的情報を利用したソフトウェア 部品重要度評価手法の提案と評価

Slides:



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

シーケンス図の生成のための実行履歴圧縮手法
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
利用実績に基づくソフトウェア部品検索システムSPARS-J
情報伝播によるオブジェクト指向プログラム理解支援の提案
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
ソースコードの利用関係を用いた 再利用性評価手法の提案
コンポーネントランクを用いた ソフトウェアのクラス設計に関する 分析手法の提案
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソフトウェア部品間の利用関係を用いた 再利用性評価手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
オブジェクト指向プログラムのための 動的結合メトリクスの評価
Javaソフトウェア部品 解析・検索システムSPARS-Jの構築
メソッド間の依存関係を利用した プログラム理解支援手法の提案と実現
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
第25章 単一始点最短路 3節 Bellman-Fordのアルゴリズム
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
類似度を用いたプログラムの再利用性尺度の提案と実現
暗黙的に型付けされる構造体の Java言語への導入
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
オブジェクト指向プログラムにおける エイリアス解析について
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
動的情報を利用したソフトウェア 部品評価手法
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
WWW上の効率的な ハブ探索法の提案と実装
Javaプログラムの変更を支援する 影響波及解析システム
社会シミュレーションのための モデル作成環境
利用実績に基づくソフトウェア部品検索システムSPARS-J
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
コンポーネントランク法を用いたJavaクラス分類手法の提案
Javaを対象としたソフトウェア部品 検索システムSPARS-Jの実験的評価
動的データ依存関係解析を用いた Javaプログラムスライス手法
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
類似度メトリクスを用いた Javaソースコード間類似度測定ツールの試作
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
ソフトウェア部品グラフの次数分布におけるべき乗則の調査
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
オブジェクトの動的支配関係解析を 用いたシーケンス図の縮約
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
ソフトウェア工学 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
ソースコードの利用関係を用いた 再利用性評価手法の提案
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム理解のための 付加注釈 DocumentTag の提案
Presentation transcript:

動的情報を利用したソフトウェア 部品重要度評価手法の提案と評価 藤井 将人*, 横森 励士*, 山本 哲男**, 井上 克郎*** *大阪大学大学院基礎工学研究科 **科学技術振興事業団 ***大阪大学大学院情報科学研究科

研究の背景 ソフトウェア開発効率を向上するための手法として,再利用が注目されている 生産性と品質を改善し,結果としてコスト削減にもつながる 既存のソフトウェア部品を同一システム内や他のシステム内で用いること ソフトウェア部品 ソフトウェア開発者が再利用を行う単位 部品例:ソースコード,ドキュメント,・・・ 生産性と品質を改善し,結果としてコスト削減にもつながる まずはじめに研究の背景について説明します。 近年のソフトウェアの大規模化・複雑化に伴い、高品質なソフトウェアを一定期間内に効率よく開発することが重要となってきています。 ソフトウェア開発効率を向上するための手法は多数提案されておりますが、その一手法として再利用が注目されています。 再利用とは既存のソフトウェア部品を同一システム内、他のシステム内で用いることをいい、再利用を用いることにより、生産性と品質が改善され、結果としてコストの削減にもつながると言われています。 この再利用を、実際のソフトウェア開発において行うためには、 どの部品が再利用に適していて、どの部品が適していないかを判断するために 再利用性を定量的に示すことが必要です。

研究の背景 開発者はソフトウェア部品を再利用する 再利用の問題点 開発者はソフトウェア部品を再利用する 再利用の問題点 既存の部品をコピーして再利用 ライブラリとして再利用 再利用の問題点 どのような部品を再利用するか? 開発者はソフトウェア部品を再利用する 既存の部品をコピーして再利用 ライブラリとして再利用 再利用の問題点 どのような部品を再利用するか? 部品の再利用性を定量的に示すことが必要 まずはじめに研究の背景について説明します。 近年のソフトウェアの大規模化・複雑化に伴い、高品質なソフトウェアを一定期間内に効率よく開発することが重要となってきています。 ソフトウェア開発効率を向上するための手法は多数提案されておりますが、その一手法として再利用が注目されています。 再利用とは既存のソフトウェア部品を同一システム内、他のシステム内で用いることをいい、再利用を用いることにより、生産性と品質が改善され、結果としてコストの削減にもつながると言われています。 この再利用を、実際のソフトウェア開発において行うためには、 どの部品が再利用に適していて、どの部品が適していないかを判断するために 再利用性を定量的に示すことが必要です。

ソフトウェア部品評価手法 既存のソフトウェア部品評価手法 個々の部品の静的な特性から評価 利用実績から評価 コードメトリクスを足し合わせて部品の再利用性を評価[1] インターフェース部分の情報から部品の再利用性を評価[2] 静的な特性からは再利用性が低いと評価されても,実際には頻繁に再利用されている部品も存在する 利用実績から評価 Component Rank法(CR法)[3] 部品間の利用関係を抽出して各部品の再利用性を評価 再利用性を定量的に評価する手法は多数提案されておりますが、 従来の再利用性評価手法は、個々の部品の静的な特性を評価するものでした。 例えば、えつこーんらは 複数のコードメトリクスを足し合わせて再利用性を評価する手法を提案しております。 また、やまもとらは部品のインターフェース部分の情報から再利用性を評価する手法を 提案しております。 しかしながら、静的な特性、たとえばソースコードの複雑さなどからは 再利用性が低いと評価されていても、 実際には頻繁に再利用されているような部品も存在すると考えられます。 [1] L. Etzkorn et al.: ``Automated reusability quality analysis of OO legacy software,'' Information and Software Technology, Vol. 43, Issue 5, pp. 295-308 (2001). [2]山本 他: ``再利用特性に基づくコンポーネントメトリクスの提案と検証," FOSE2001, (2001). [3]横森 他: "ソフトウェア部品間の利用関係を用いた再利用性評価手法の提案 ", ソフトウェア・シンポジウム論文集 , (2002).

動的な利用関係解析手法を用いてCR法を実現し、 従来の静的な利用関係解析手法との結果を比較する 研究目的 CR法での部品評価には,利用関係の解析が必要 提案されたCR法では、利用関係解析手法について言及されていない 従来の実装システムでは、静的に利用関係を抽出 静的利用関係解析手法 ソフトウェアを実行せず,ソースコード等から利用関係を抽出 ソフトウェアによっては,静的には決定しない要素をもつ オブジェクト指向言語のメソッド呼び出しや,フィールド参照 全てを利用関係があるとみなす 動的な利用関係解析手法を用いてCR法を実現し、 従来の静的な利用関係解析手法との結果を比較する

提案手法 動的利用関係解析とCR法を用い,ソフトウェア部品の評価を行う 利点 実際に実行された部品の利用関係のみ取得できる ソースコードが存在しない部品についても評価が行える 動的利用関係解析による部品評価ではどのような結果が得られるか考察を行う 静的利用関係解析との比較

部品間の利用関係 ソフトウェア部品間には利用関係が存在する 部品グラフ(Component Graph) 利用関係解析 利用関係例 ソースコード:メソッド呼び出し,継承 ドキュメント:リンク,参考文献 部品グラフ(Component Graph) 頂点:ソフトウェア部品 有向辺:利用関係 利用関係解析 部品グラフを構築 c4 c5 c1 まず、これまでソフトウェア部品という言葉を使ってきましたが、ソフトウェア開発者が再利用を行う単位をソフトウェア部品あるいは単に部品と呼びます。 部品例として、ソースコードファイルやドキュメントがあげられます。 またおのおのの部品間には、利用する、されるという利用関係が存在します。 右下の図を用いて説明します。 四角は部品をあらわし、 矢印は利用関係を表します。 この図では、 c2はc1を利用し、c1はc4を利用しています。 また、この図では、 C2’とC3がC1’を利用して、C1’はC5とC3を利用しています c2 c3 部品グラフ例

動的利用関係解析手法 動的利用関係解析 ソフトウェアを実行し,その実行履歴から利用関係を抽出 実行時に実際利用した部品のみ利用関係を抽出 : C4 C5 C6 C2 C3 C1 C4 : C5 : C2 : C3 C2 C4 C6 : : C1 C3 C5

動的利用関係解析手法 動的利用関係解析 ソフトウェアを実行し,その実行履歴から利用関係を抽出 実行時よく利用される部品が重要となる 実行時に実際利用した部品のみ利用関係を抽出 実行時よく利用される部品が重要となる 実装が比較的容易 実行履歴を追跡することで,利用関係が取得可能

Component Rank法 利用実績を基に部品の評価値を求める 部品評価値計算の方針 部品評価値計算方法 被利用数が多いソフトウェア部品は重要 重要な部品から利用されている部品は重要 部品評価値計算方法 部品グラフの利用 繰り返し計算により各頂点の重みを求めることで,それに対応する部品の評価値を定める われわれの研究グループが提案する、利用実績に基づく再利用性評価手法(Component Rank法)では、先に説明しました利用関係に着目し、その関係を抽出してグラフを作成します。 そして、各関係に重み付けし評価を行います。そのときの評価の方法として、非利用数が多い部品は重要である、また、重要な部品から利用されている部品も重要であるという方針で計算を行います。

Component Rank法 部品評価値計算手順 各頂点に適当な重みを与える 各有向辺の重みを求める 各頂点の重みを再計算 頂点の重みの総和は1 各有向辺の重みを求める 頂点の重みを,その頂点から出ていく辺で分配する 辺ごとに与えられた配分率を用いて計算 各頂点の重みを再計算 頂点に入ってくる辺の重みの総和を,その頂点の重みとして再定義する 頂点の重みが収束するまで,2.,3.を繰り返し計算する 収束した頂点の重みを,その頂点に対応する部品の評価値として出力

Component Rank法 部品評価値計算手順 各頂点に適当な重みを与える 各有向辺の重みを求める(図:重みの定義(a)) 頂点の重みの総和は1 各有向辺の重みを求める(図:重みの定義(a)) 頂点の重みを,その頂点から出ていく辺で分配する 辺ごとに与えられた配分率を用いて計算 各頂点の重みを再計算 頂点に入ってくる辺の重みの総和を,その頂点の重みとして再定義する 頂点の重みが収束するまで,2.,3.を繰り返し計算する 収束した頂点の重みを,その頂点に対応する部品の評価値として出力

重みの定義 e1i w(vi ) w(vi ) vi vj vi eij eki (a) 辺の重み計算 (b)頂点の重み計算 w’(eij ) w’(eki ) vi vj vi eij eki w’(eij ) = dij х w(vi ) w(vi ) = w’(e1j ) + w’(e2j ) + ・・・+ w’(ekj ) + ・・・ Fig 2 (a) 辺の重み計算 (b)頂点の重み計算

Component Rank法 部品評価値計算手順 各頂点に適当な重みを与える 各有向辺の重みを求める 頂点の重みの総和は1 各有向辺の重みを求める 頂点の重みを,その頂点から出ていく辺で分配する 辺ごとに与えられた配分率を用いて計算 各頂点の重みを再計算(図:重みの定義(b)) 頂点に入ってくる辺の重みの総和を,その頂点の重みとして再定義する 頂点の重みが収束するまで,2.,3.を繰り返し計算する 収束した頂点の重みを,その頂点に対応する部品の評価値として出力

重みの定義 e1i w(vi ) w(vi ) vi vj vi eij eki (a) 辺の重み計算 (b)頂点の重み計算 w’(eij ) w’(eki ) vi vj vi eij eki w(vi ) = w’(e1j ) + w’(e2j ) + ・・・+ w’(ekj ) + ・・・ w’(eij ) = dij х w(vi ) Fig 2 (a) 辺の重み計算 (b)頂点の重み計算

Component Rank法 部品評価値計算手順 各頂点に適当な重みを与える 各有向辺の重みを求める 各頂点の重みを再計算 頂点の重みの総和は1 各有向辺の重みを求める 頂点の重みを,その頂点から出ていく辺で分配する 辺ごとに与えられた配分率を用いて計算 各頂点の重みを再計算 頂点に入ってくる辺の重みの総和を,その頂点の重みとして再定義する 頂点の重みが収束するまで,2.,3.を繰り返し計算する 収束した頂点の重みを,その頂点に対応する部品の評価値として出力

Component Rank法 部品評価値計算手順 各頂点に適当な重みを与える 各有向辺の重みを求める 各頂点の重みを再計算 頂点の重みの総和は1 各有向辺の重みを求める 頂点の重みを,その頂点から出ていく辺で分配する 辺ごとに与えられた配分率を用いて計算 各頂点の重みを再計算 頂点に入ってくる辺の重みの総和を,その頂点の重みとして再定義する 頂点の重みが収束するまで,2.,3.を繰り返し計算する 行列の固有ベクトルを求める計算に帰着される 収束した頂点の重みを,その頂点に対応する部品の評価値として出力

部品評価値計算例 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 0.333 C2 C3 v1×50% v2×100% v3×100% C1 v1 C2 v2 C3 v3 C1 0.400 C2 0.200 C3 C1 C2 C3 0.167 0.333 C1 0.333 C2 0.167 C3 0.500 C1 C2 C3 0.167 0.500 C1 0.417 C2 0.167 C3 C1 0.500 C2 0.167 C3 0.334 C1 C2 C3 0.250 0.167 0.334 C1 C2 C3 0.167 0.250 0.417 C1 0.334 C2 0.250 C3 0.417 では、具体的に評価値が決まる様子を図をもちいて説明します。 (はじめの図) この図では、部品群C1はC2、C3を利用し、 C2はC3を、C3はC1をそれぞれ利用しています。 各部品群の評価値をv1、v2、v3とします。 (クリック1) 各部品は、自分の評価値を票の重みとして、 利用する部品に対して配分します。 C1はC2とC3を利用しているので、自分の評価値v1を C2とC3に半分ずつ配分します。 C2はC3だけを利用しているので、C3にすべての評価値を配分します。 同様にC3もC1のみを利用しているので、C1にすべての評価値を配分します。 (クリック2) 次に、評価値の合計が1になるように、 各部品の初期値を決めます。 部品数は3ですから、各部品に0.333を与えます。 ここから、評価値の投票を繰り返します。 (くりっく3) このように部品の重みが投票の重みになります。 各部品の評価値は、獲得した票の重みの合計とし、 (くりっく4) このようになります。 これを繰り返すと、 (くりっく連打) このように各評価値が 0.4、0.2、0.4 という状態に収束します。 この収束した値を部品群の相対的再利用性評価値とします。 この計算はグラフの隣接行列の固有ベクトルを求める計算に帰着されます。

Component Rankシステム 解析手順 利用関係解析とCR法に基づいた,ソフトウェア部品評価システム 対象ソフトウェア:Javaプログラム 部品 クラス(ソースコード) 部品間の利用関係 クラスの継承,インターフェースおよび抽象クラスの実装,メソッド呼び出し,フィールド参照 解析手順 1. 利用関係解析より,部品(クラス)間の利用関係を抽出する 2. 部品間の利用関係から,部品グラフを生成 3. CR法を用い,部品グラフから部品の評価値を計算 4. 評価値を基に,順位付けを行い出力する

提案手法の実装 提案手法をCRシステムに追加実装 JVMPIの利用 プロファイル機能より,実行履歴を取得 event control Profiler (JVMPI) event control CA ・・ 08 ・・ 00 ・・ A B ・・・ Java Virtual Machine class files execution result prof files

CRシステムの構成 class files Component Graph static relation analyzer A ・・ CA ・・・ 08 ・・・ 00 ・・・ static relation analyzer - A B ・・ 1 : Class Rank  A ・・   B ・・ ・・ ・・ dynamic relation analyzer java+profiler Component Rank ranker relation analyzer A B ・・・ CR system prof files

評価実験 実験対象プログラム 実験目的 実行方法 Javac 静的利用関係解析手法と比較 引数を与えない 全159クラス,利用JDKライブラリ:505クラス 実験目的 静的利用関係解析手法と比較 実行方法 引数を与えない javac:5クラス,利用JDKライブラリ137クラス 正常にコンパイルが完了するプログラムを引数に与える javac:46クラス,利用JDKライブラリ138クラス 構文エラーを出力し終了するプログラムを引数に与える javac:40クラス,利用JDKライブラリ138クラス

評価実験 Javac+JDKライブラリ 静的利用関係解析 動的利用関係解析(1~3の和集合) 順位 クラス名 評価値 1 16961704 java.lang.Object 16961704 2 java.lang.String 2937344 3 java.lang.System 2424681 4 java.lang.Class 1551920 5 java.lang.ClassLoader 1347817 6 java.lang.StringBuffer 1345898 7 java.lang.Throwable 1058042 8 java.security.AccessController 1018639 9 com.sun.tools.javac.v8.util.List 997645 10 java.io.IOException 965720 : 183 Java.lang.Byte 429795 順位 クラス名 評価値 1 java.lang.Object 9703340 2 java.lang.Class 8668064 3 java.lang.String 6381128 4 java.lang.Integer 5028541 5 java.lang.Character 3228831 6 com.sun.tools.javac.v8.util.List 3017972 7 java.io.InputStream 2767631 8 java.lang.System 2747740 9 com.sun.tools.javac.v8.tree.Tree 2325401 10 java.net.URL 2289867 : 169 com.sun.tools.javac.Main 70780 StringやStringBufferといった我々がJavaプログラムを作成する際にも頻繁に利用するようなクラスが上位に来ました。ライブラリ内でも頻繁に利用されており、例えばStringクラスのequalsメソッドがNULL判定に利用されているなど、実際のソースコード中でよく利用されているおり、この結果は妥当であると考えられます。 また、SystemやClassLoaderといったJavaプログラムを実行するのに不可欠なクラスも上位にランクしていることがわかりました。 Javac+JDKライブラリ

順位相関係数 spearmanの順位相関係数 Spearmanの順位相関係数 静的利用関係解析との比較 (1).実行方法1による動的利用関係解析 (2).実行方法2による動的利用関係解析 (3).実行方法3による動的利用関係解析 (4).実行方法1~3の和集合 Spearmanの順位相関係数 (1) (2) (3) (4) 順位相関係数(javacクラスのみ) 0.3070 0.6923 0.6309 0.8074 順位相関係数(全クラス) 0.5354 0.6289 0.6133 0.6409 動的に利用するJavacクラス数 5 46 40 47

考察 動的に利用される部品数が多い時 動的に利用される部品数が少ない場合 動的利用関係解析で上位に位置する部品(クラス)は,静的利用関係解析でも上位に位置する 上位10位までの相関係数の平均値:0.7424 静的利用関係解析による部品評価と同等な評価が行える 動的に利用される部品数が少ない場合 動的利用関係解析と静的利用関係解析との間の相関係数は低い 特定の機能を実現している部品の評価が行える

まとめと今後の課題 まとめ 今後の課題 動的情報を利用した利用したソフトウェア部品評価手法について提案 CRシステムによる動的利用関係解析と静的利用関係解析との比較・評価 利用する部品数の差が小さければ,動的な利用関係による部品評価は,静的な利用関係による部品評価と同等の結果が得られる 今後の課題 より多くの部品について評価 それぞれの解析手法の使い分け どのような場面で,静的?動的? 部品評価値の利用方法 ソフトウェア理解

評価実験 Javacのみ 静的利用関係解析 動的利用関係解析(1~3の和集合) 順位 クラス名 評価値 9 997645 11 957841 com.sun.tools.javac.v8.util.List 997645 11 com.sun.tools.javac.v8.util.Name 957841 30 com.sun.tools.javac.v8.comp.Env 563968 31 com.sun.tools.javac.v8.util.StaticName 544410 39 com.sun.tools.javac.v8.code.Symbol 495454 42 com.sun.tools.javac.v8.code.Type 492252 44 com.sun.tools.javac.v8.code.Scope 488402 46 com.sun.tools.javac.v8.util.ListBuffer 477878 53 com.sun.tools.javac.v8.util.Hashtable 447058 59 com.sun.tools.javac.v8.tree.Tree 429795 順位 クラス名 評価値 6 com.sun.tools.javac.v8.util.List 3017972 9 com.sun.tools.javac.v8.tree.Tree 2325401 14 com.sun.tools.javac.v8.util.Name 1158991 40 com.sun.tools.javac.v8.util.Convert 336325 43 com.sun.tools.javac.v8.code.Symbol 300807 52 com.sun.tools.javac.v8.util.Log 250902 53 com.sun.tools.javac.v8.util.ListBuffer 237411 54 com.sun.tools.javac.v8.code.Scope 227312 66 com.sun.tools.javac.v8.util.Hashtable 176201 68 com.sun.tools.javac.v8.util.StaticName 169437 StringやStringBufferといった我々がJavaプログラムを作成する際にも頻繁に利用するようなクラスが上位に来ました。ライブラリ内でも頻繁に利用されており、例えばStringクラスのequalsメソッドがNULL判定に利用されているなど、実際のソースコード中でよく利用されているおり、この結果は妥当であると考えられます。 また、SystemやClassLoaderといったJavaプログラムを実行するのに不可欠なクラスも上位にランクしていることがわかりました。 Javacのみ

Spearmanの順位相関係数 順位相関 計算式(同順位が存在するとき) 正の場合:二変数には正の相関関係がある 負の場合:二変数には負の相関関係がある 0の場合:二変数は無相関である 計算式(同順位が存在するとき)

提案手法 動的情報を利用したソフトウェア部品評価手法 計算手順 c1 c2 c3 c4 動的利用関係解析の利用 プログラムを実行して利用関係を抽出 計算手順 プログラム実行時,実行履歴を保存 実行履歴から利用関係を抽出 部品グラフを構築 利用関係 c2 c1 c3 : callee caller c4 c1 c2 c3 c4 部品グラフ : Entry C1 Entry C2 Entry C3 Exit C3 Entry C4 実行履歴

重みの定義 定義1:頂点の重みの総和 部品グラフG=(V,E) 頂点:v∈V 重み:w(v) (0≦w(v)≦1) われわれの研究グループが提案する、利用実績に基づく再利用性評価手法(Component Rank法)では、先に説明しました利用関係に着目し、その関係を抽出してグラフを作成します。 そして、各関係に重み付けし評価を行います。そのときの評価の方法として、非利用数が多い部品は重要である、また、重要な部品から利用されている部品も重要であるという方針で計算を行います。

重みの定義 定義2:辺の重み 定義5:配分率 頂点vi から頂点vj への有向辺eij の重みを w(eij) とする dij は配分率と呼ぶ 定義5:配分率 頂点vi を始点とする辺への配分率d’ij Nは頂点数 われわれの研究グループが提案する、利用実績に基づく再利用性評価手法(Component Rank法)では、先に説明しました利用関係に着目し、その関係を抽出してグラフを作成します。 そして、各関係に重み付けし評価を行います。そのときの評価の方法として、非利用数が多い部品は重要である、また、重要な部品から利用されている部品も重要であるという方針で計算を行います。

重みの定義 定義3:頂点の重み 頂点vi の重みは,有向辺eki の重みの総和とする IN(vi) は vi を終点とする有向辺の集合 われわれの研究グループが提案する、利用実績に基づく再利用性評価手法(Component Rank法)では、先に説明しました利用関係に着目し、その関係を抽出してグラフを作成します。 そして、各関係に重み付けし評価を行います。そのときの評価の方法として、非利用数が多い部品は重要である、また、重要な部品から利用されている部品も重要であるという方針で計算を行います。

重みの計算 頂点の重み計算 定義4 式(3)に式(2)を代入 ベクトルW 行列D n(=|V|) われわれの研究グループが提案する、利用実績に基づく再利用性評価手法(Component Rank法)では、先に説明しました利用関係に着目し、その関係を抽出してグラフを作成します。 そして、各関係に重み付けし評価を行います。そのときの評価の方法として、非利用数が多い部品は重要である、また、重要な部品から利用されている部品も重要であるという方針で計算を行います。

部品評価値計算例 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 v1 C2 v2 C3 v3 C1×50% C2×100% C3×100% C1 0.333 C2 C3 C1×50% C2×100% C3×100% C1 v1 C2 v2 C3 v3 C1 0.400 C2 0.200 C3 C1 C2 C3 0.167 0.333 C1 0.333 C2 0.167 C3 0.500 C1 C2 C3 0.167 0.500 C1 0.417 C2 0.167 C3 C1 0.500 C2 0.167 C3 0.334 C1 C2 C3 0.250 0.167 0.334 C1 C2 C3 0.167 0.250 0.417 C1 0.334 C2 0.250 C3 0.417 では、具体的に評価値が決まる様子を図をもちいて説明します。 (はじめの図) この図では、部品群C1はC2、C3を利用し、 C2はC3を、C3はC1をそれぞれ利用しています。 各部品群の評価値をv1、v2、v3とします。 (クリック1) 各部品は、自分の評価値を票の重みとして、 利用する部品に対して配分します。 C1はC2とC3を利用しているので、自分の評価値v1を C2とC3に半分ずつ配分します。 C2はC3だけを利用しているので、C3にすべての評価値を配分します。 同様にC3もC1のみを利用しているので、C1にすべての評価値を配分します。 (クリック2) 次に、評価値の合計が1になるように、 各部品の初期値を決めます。 部品数は3ですから、各部品に0.333を与えます。 ここから、評価値の投票を繰り返します。 (くりっく3) このように部品の重みが投票の重みになります。 各部品の評価値は、獲得した票の重みの合計とし、 (くりっく4) このようになります。 これを繰り返すと、 (くりっく連打) このように各評価値が 0.4、0.2、0.4 という状態に収束します。 この収束した値を部品群の相対的再利用性評価値とします。 この計算はグラフの隣接行列の固有ベクトルを求める計算に帰着されます。

相対的再利用性評価値 相対的再利用性評価値を求める計算は行列の固有ベクトルを求める計算に帰着される C1 C2 C3 C1 C2 C3 v1 50% 100% V = Dt・V C1 0.400 C2 0.200 C3 λ=1の固有ベクトル この評価値を求める計算は、行列の固有値をもとめる計算に帰着されます。 先ほどの図において、 各部品群の評価値をこのようにベクトルVとします。 また、この重みつきの投票関係を行列Dで表します。 (さしながら、) たとえばC1からC2へ投票する重みを 1行2列の成分としています。 定常状態に収束すれば V=DtVという関係を満たします。 tは転置を表します。 この式から、評価値ベクトルVはDtにおける固有値らむだ=1の固有ベクトルです。 (クリック) 先ほどの収束状態においても、 このように式を満たしていることがわかります。

評価が循環しない場合 部品全体における有向辺の重みの偏りを分析することで相対的に再利用性を評価している 辺が全体に循環しなければ正しく評価できない 利用してない部品に対しては非常に低い重みの有向辺を引いたとみなす 本提案手法では、部品全体における票の重みの偏りを 分析することで 相対的再利用性を評価しております。 (クリック) したがって、票が全体に循環しなければ正しく評価できません。 図では、この部分で票がとどまってしまうため、 評価値が全体に循環しません。 そこで、利用していない部品には非常に低い重みの投票をしたとみなします。 図の破線の矢印は、非常に低い重みの投票を表します。 このように全体に矢印を補うことで、評価を循環させます。 次に、提案する手法を用いてJavaソースコードを評価するシステムについて説明します。

SPARSシステム Raw Source Repository Ranker Searcher Query Parser Browser Analyzer Relation Java ソースファイル群