動的情報を利用したソフトウェア 部品評価手法

Slides:



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

シーケンス図の生成のための実行履歴圧縮手法
利用実績に基づくソフトウェア部品検索システムSPARS-J
情報伝播によるオブジェクト指向プログラム理解支援の提案
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
プログラムの動作を理解するための技術として
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
ソースコードの利用関係を用いた 再利用性評価手法の提案
コンポーネントランクを用いた ソフトウェアのクラス設計に関する 分析手法の提案
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソフトウェア部品間の利用関係を用いた 再利用性評価手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
Javaソフトウェア部品 解析・検索システムSPARS-Jの構築
メソッド間の依存関係を利用した プログラム理解支援手法の提案と実現
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
類似度を用いたプログラムの再利用性尺度の提案と実現
暗黙的に型付けされる構造体の Java言語への導入
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
実行時情報に基づく OSカーネルのコンフィグ最小化
Javaプログラムの変更を支援する 影響波及解析システム
社会シミュレーションのための モデル作成環境
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
コンポーネントランク法を用いたJavaクラス分類手法の提案
Javaを対象としたソフトウェア部品 検索システムSPARS-Jの実験的評価
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
類似度メトリクスを用いた Javaソースコード間類似度測定ツールの試作
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
保守請負時を対象とした 労力見積のためのメトリクスの提案
オブジェクトの動的支配関係解析を 用いたシーケンス図の縮約
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
メソッドの同時更新履歴を用いたクラスの機能別分類法
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
ソースコードの利用関係を用いた 再利用性評価手法の提案
動的情報を利用したソフトウェア 部品重要度評価手法の提案と評価
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム理解のための 付加注釈 DocumentTag の提案
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Presentation transcript:

動的情報を利用したソフトウェア 部品評価手法 藤井 将人 井上研究室 2003年2月18日

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

ソフトウェア部品評価手法 再利用を用いた開発モデル 利用実績から部品の評価値を評価: Component Rank法(CR法)* 開発者は重要であると判断した部品を再利用 被利用数が多い部品ほど重要である 利用実績から部品の評価値を評価: Component Rank法(CR法)* 被利用数の多い部品は重要 重要な部品から利用されている部品は重要 部品間の利用関係をもとに,部品の評価値を計算 よく利用される汎用性の高い部品の検索に有効 再利用性を定量的に評価する手法は多数提案されておりますが、 従来の再利用性評価手法は、個々の部品の静的な特性を評価するものでした。 例えば、えつこーんらは 複数のコードメトリクスを足し合わせて再利用性を評価する手法を提案しております。 また、やまもとらは部品のインターフェース部分の情報から再利用性を評価する手法を 提案しております。 しかしながら、静的な特性、たとえばソースコードの複雑さなどからは 再利用性が低いと評価されていても、 実際には頻繁に再利用されているような部品も存在すると考えられます。 * Inoue et al: “Component Rank: Relative Significance Rank for Software Component Search ”, ICSE2003 (to appear).

再利用の問題点 再利用における問題点 CR法によるソフトウェア部品評価手法 どの部品を利用するか? どのように部品を利用するか? 汎用性の高い部品は? どのように部品を利用するか? 「いつ」「どのように」に利用する? CR法によるソフトウェア部品評価手法 静的な利用関係解析より部品評価値を計算 「どのように部品を利用するか?」という情報を完全に 取得することができない しかしソフトウェア開発に再利用を用いるためには,どの部品を利用するか?という情報だけでなく,どのように部品を利用するかという情報も必要となります.(クリック) しかし,CR法による・・・では,静的な・・計算しているため,「どのように・・・」という情報を・・・できません.

提案手法 動的情報を利用したソフトウェア部品評価手法 特定の“機能”を実装するために,重要となる部品の検出 ソフトウェアを実行し,動的な利用関係を取得 どのように部品を利用するか? CR法を用いて,部品の評価値を求める どの部品を利用するか? 特定の“機能”を実装するために,重要となる部品の検出 そこで,本研究では,動的情報を・・・手法の提案を行います. 本提案手法では,ソフトウェアを実行時に動的な利用関係を取得し,それをもとにCR法を用いて部品評価値を求めます.この時,動的な利用関係から「どのように部品を利用するか?」という情報を取得し,部品評価値から「どの部品をりようするか?」という情報を取得できるため,特定の機能・・・検出に有効な手法であると考えられます. 以降,この提案手法について説明を行いますが,まず初めに利用関係の概念について説明します.

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

動的利用関係 動的利用関係 動的利用関係解析 ソフトウェア実行時に,実際に呼び出し関係が発生した部品間の関係 動的利用関係を抽出する解析手法 ソフトウェアを実行し,その実行履歴から利用関係を取得 C4 : C5 : C2 : C3 C2 C4 C6 : : C1 C3 C5

動的利用関係 動的利用関係 動的利用関係解析 特徴 ソフトウェア実行時に,実際に呼び出し関係が発生した部品間の関係 動的利用関係を抽出する解析手法 ソフトウェアを実行し,その実行履歴から利用関係を取得 特徴 実行方法により利用関係が変化 開発者が再利用したい機能に注目できる 呼び出しの順序が取得できる

動的部品グラフの生成 動的利用関係 動的部品グラフ 実行されるまで,どの部品が利用されるか特定できない 実行中,部品が呼び出されて初めて利用関係が生じる 利用される部品は利用する部品に依存する 動的部品グラフ 有向辺の向き:利用される部品→利用する部品 C4 : C5 : 動的な利用関係では,実行されるまで・・・できません.実行中,部品が・・・生じます そのため,利用される部品・・依存するとみなすことができます. そこで,動的部品グラフを作成する際,利用される部品から利用する部品へ有効辺を引くこととします.この部品グラフを用いた部品評価値では,利用数の多いクラスは重要であると判断されます. C2 : C3 C2 C4 c1 c4 c5 C1 C6 : : 動的部品グラフ C3 C5

Component Rank法の利用 利用実績を基に部品の評価値を求める 部品評価値計算方法 計算手順 C1 C2 C3 C1 C2 C3 部品グラフの利用 計算手順 各頂点に適当な重みを与える 頂点の重みの総和は1 各有向辺の重みを求める 頂点の重みを,その頂点から出ていく辺で分配する 辺ごとに与えられた配分率を用いて計算 各頂点の重みを再計算 頂点に入ってくる辺の重みの総和を,その頂点の重みとして再定義する 頂点の重みが収束するまで,2.,3.を繰り返し計算する 収束した頂点の重みを,その頂点に対応する部品の評価値として出力 C1 0.500 C2 0.1665 C3 0.3335 C1 0.400 C2 0.200 C3 C1 C2 C3 0.1665 0.167 0.500 C1 0.333 C2 0.167 C3 0.500 C1 0.334 C2 0.333 C3 C1 0.334 C2 0.333 C3 v1×50% v2×100% v3×100% C1 C2 C3 0.167 0.333 われわれの研究グループが提案する、利用実績に基づく再利用性評価手法(Component Rank法)では、先に説明しました利用関係に着目し、その関係を抽出してグラフを作成します。 そして、各関係に重み付けし評価を行います。そのときの評価の方法として、非利用数が多い部品は重要である、また、重要な部品から利用されている部品も重要であるという方針で計算を行います。

システムの実装 システムの構成 ソフトウェア部品評価システム 利用関係解析部 部品グラフ生成部 部品評価値計算部 対象ソフトウェア:Javaプログラム 部品 クラス(ソースコード) 部品間の利用関係 クラスの継承,インターフェースおよび抽象クラスの実装,メソッド呼び出し,フィールド参照 システムの構成 利用関係解析部 ソフトウェア実行の際に,実行履歴を保存し,利用関係を出力 部品グラフ生成部 利用関係より部品グラフを生成 部品評価値計算部 CR法に基づいて,部品の評価値を計算

システムの構成 Component Rank class files A ・・ 利用関係解析部 Component Graph Class Rank  A ・・   B ・・ ・・ ・・ class files CA ・・・ 08 ・・・ 00 ・・・ 利用関係解析部 Component Graph - A B ・・ 1 : Profiler (JVMDI) JavaVM Ranker A B ・・・ 部品評価値計算部 Dynamic Relation Analyzer execute result prof files 部品グラフ生成部

評価実験 実験対象プログラム javac (javaコンパイラ) 実行方法: 「正常コンパイル終了」する プログラムを引数に与える 全159クラス(内部クラス含む) 実行方法:  「正常コンパイル終了」する  プログラムを引数に与える 評価値順位 クラス名(部品名) 部品評価値 利用部品数 利用数順位 1 com.sun.tools.javac.v8.Main 6230715 17 11 2 com.sun.tools.javac.v8.JavaCompiler 5401857 24 7 3 com.sun.tools.javac.v8.comp.Gen 3308156 36 4 com.sun.tools.javac.Main 2911060 53 5 com.sun.tools.javac.v8.comp.Attr 2844601 34 6 com.sun.tools.javac.v8.comp.Enter 2588095 28 com.sun.tools.javac.v8.comp.TransInner 2007288 27 8 com.sun.tools.javac.v8.comp.ClassReader 1949322 26 9 com.sun.tools.javac.v8.comp.Enter$CompleteEnter 1821256 16 14 10 com.sun.tools.javac.v8.comp.TransTypes 1797646 評価値順位 クラス名(部品名) 部品評価値 利用部品数 利用数順位 1 com.sun.tools.javac.v8.Main 6230715 17 11 2 com.sun.tools.javac.v8.JavaCompiler 5401857 24 7 3 com.sun.tools.javac.v8.comp.Gen 3308156 36 4 com.sun.tools.javac.Main 2911060 53 5 com.sun.tools.javac.v8.comp.Attr 2844601 34 6 com.sun.tools.javac.v8.comp.Enter 2588095 28 com.sun.tools.javac.v8.comp.TransInner 2007288 27 8 com.sun.tools.javac.v8.comp.ClassReader 1949322 26 9 com.sun.tools.javac.v8.comp.Enter$CompleteEnter 1821256 16 14 10 com.sun.tools.javac.v8.comp.TransTypes 1797646 まず初めに,Javac(Javaコンパイラ)に対して,部品評価値を求めた結果を表に示します.ここで,実行方法には,正常に・・・与えて実行を行いました.表を見てわるように,評価値の順位と利用部品数の順位との間には完全な相関があるわけではないことがわかります. ソフトウェアにおいて,部品利用数が少ない部品でも重要である部品も存在すると考えられます.例えば,表のMainクラスは,Javac実行時に一番最初に実行されるクラスであり,提案手法では,4位に位置していますが,利用数では53位に位置します.機能を再利用する際に,Mainの情報も必要になると考えられます.そのため,単純に利用数で評価を行うよりも,提案手法は有効であると考えられます.

評価実験 実験対象プログラム j2sdk1.4.0_01.demo.jfc.Notepad 単純なテキストエディタプログラム 全19クラス(内部クラス含む) 複数機能実行結果 「file open」実行結果 「copy&paste」実行結果 順位 クラス名 1 <System> 2 Notepad 3 Notepad$UndoAction 4 Notepad$OpenAction 5 Notepad$ShowElementTreeAction 6 Notepad$UndoHandler 7 ElementTreePanel 8 Notepad$3 9 Notepad$FileLoader :     : 順位 クラス名 1 Notepad 2 <System> 3 Notepad$OpenAction 4 Notepad$FileLoader 5 Notepad$UndoHandler Notepad$UndoAction Notepad$RedoAction Notepad$NewAction Notepad$ExitAction Notepad$ShowElementTreeAction    : 順位 クラス名 1 Notepad 2 <System> 3 Notepad$UndoHandler 4 Notepad$UndoAction Notepad$OpenAction 6 Notepad$RedoAction Notepad$NewAction Notepad$ExitAction Notepad$ShowElementTreeAction Notepad$ActionChangedListener Notepad$1    : 最下位ってゆう?

考察 部品利用数と部品評価値 実行方法と部品評価値 部品利用数と部品評価値に完全に相関があるわけではない 利用数が少なくても,機能実装の核となる部品が存在 提案手法による部品評価手法は有効 実行方法と部品評価値 実行された機能を実現する部品ほど、高い評価値を得られる ファイルオープンを実行した時には,その動作に関連の高い部品が,高い評価値を得る 「特定の機能を実現する部品」の再利用に利用できる

部品評価値の利用法 シーケンス図(sequence diagram)への適用 動的な部品間の利用関係をグラフ化 「いつ」「どのように」部品を利用しているか? Greeter Database Recipe Planner Massage: browse() 部品 Massage: display() return: display() メッセージのやり取り 時間軸 return: browse() Massage: makePlan()

部品評価値の利用法 適当な部品評価値でフィルタリング 例:Notepad ・・・ ・・・ 28,475,829 3,800,453 10,882,916 7,715,919 Notepad Notepad$ UndoHandler Notepad$ UndoAction Notepad$ RedoAction ・・・ Notepad$ OpenAction ・・・ Notepad$ FileLoader <init> <init> <init> <init> <init> <init> Notepadについてまずフィルタリングせずにシーケンス図を描くと下のようになります. たった19のクラスから成り立つプログラムであっても,それらの間の利用関係が全て出力されれば 複雑な図になり,開発者にとって有意義な図であるとはいえません. しかし,(クリック)FileLoaderクラスの評価値でフィルタリングすることにより(クリック) <init> <init> <init> <init> getFrame getFrame

部品評価値の利用法 適当な部品評価値でフィルタリング 例:Notepad 重要な部品のみ出力 開発者が注目すべき部品,利用関係を絞り込める 28475829 10882916 7715919 Notepad Notepad$ OpenAction Notepad$ FileLoader 重要な部品のみ出力 開発者が注目すべき部品,利用関係を絞り込める “機能の再利用”へ利用 ソフトウェア理解を支援 <init> <init> getFrame getFrame 次のように,出力される部品数が減らすことができます.この時,評価値でフィルタリングをしていますので,与えたフィルタリング値より重要な部品が残ることになり,開発者は注目すべき部品を絞り込めます.例では,FileLoaderの評価値でフィルタリングしていますが,その結果,ファイルを開くという機能を実装している部分のみ出力され,再利用を行うのに利用できるのではないかと考えられます. また,ソフトウェア理解を支援にも利用できると考えられる. : <init> <init>

システムへの追加 動的利用関係によりシーケンス図を作成 部品評価値でフィルタリング フィルタリング前 フィルタリング後

まとめ まとめ 今後の課題 動的情報を利用したソフトウェア部品評価手法の提案 評価値の利用方法-シーケンス図への利用 ソフトウェア中の特定の“機能”の再利用に利用できる 評価値の利用方法-シーケンス図への利用 ソフトウェア理解支援 今後の課題 提案手法による部品評価値計算 より多くのソフトウェアに適用 他の評価手法との比較 シーケンス図の表示 辺の重みによるフィルタリング フィルタリングの有効性検証