研究速報するツールを実現する．注目すべき部品を絞り込んで動的情報を利用したソフトウェア部品評価手法
藤井将人†

山本哲男††

横森励士†（学生員）

井上克郎†††（正員）

Software Component Ranking using Dynamical Relation
Masato FUJII† , Nonmember,

Reishi YOKOMORI† , Student Member,

Tetsuo YAMAMOTO†† , Nonmember, andKatsuro INOUE††† , Member

開発者に表示することで，ソフトウェア理解・再利用を支援することが可能となる．

2. 動的情報を利用したソフトウェア部品評価手法
本手法による部品評価値計算手順を以下に示し，以降，各計算手順について説明を行う．
（ 1 ） ソフトウェアを実行し，動的支配関係を取得（ 2 ） 動的支配関係から部品グラフを生成† 大阪大学大学院基礎工学研究科, 豊中市

Graduate School of Engineering Science, Osaka University
1–3, Machikaneyama-cho, Toyonaka, Osaka 560–8531, Japan†† 科学技術振興事業団, 川口市（ 3 ） CR 法を用いて部品評価値計算

2. 1 動的支配関係
一般にソフトウェア部品(Software Comopnent) とJapan Science and Technology Corporation
4–1–8, Honmachi, Kawaguchi-shi, Saitama 332–8531, Japan††† 大阪大学大学院情報科学研究科, 豊中市

Graduate School of Information Science and Technology, Osaka University
1–3, Machikaneyama-cho, Toyonaka, Osaka 560–8531, Japan

は，再利用できるように設計された部品とされている [3]．本論文ではより一般的に，開発者が再利用を行う単位をソフトウェア部品，あるいは単に部品と呼ぶ．
部品間には実行時，互いに呼び出す，呼び出されるという 2 項関係が存在する．この関係のことを動的支

本論文では，動的な情報を利用したソフ配関係と呼ぶ．入力データに依存して実行経路も異なトウェア部品評価手法を提案する．本手法を用いるこるため，それに伴い動的支配関係も変化する．この動とで，ソフトウェア実行毎に利用された部品の重要度的支配関係は，実行履歴を保存することで取得できる．

を計算することができ，特定機能を実装している部品メソッド呼び出しや例外等，指定した呼び出しイベンの理解・再利用を支援することが可能となる．

トが発生した際，呼び出した部品と呼び出された部品

あらまし

キーワード

再 利 用, 動 的 支 配 関 係,Componentの対を支配関係として抽出する．

2. 2 動的部品グラフ

Rank 法1. ま え が き

ソフトウェア部品を頂点，動的支配関係を呼び出さ

ソフトウェア開発において既存のソフトウェア部品れる部品から呼び出した部品への有向辺としたものを，を再利用することで，生産性と品質を改善し，結果と動的部品グラフ(Component Graph ) と呼ぶ． 図 1 にして開発コストを削減することができる．我々は，開その例を示す．

発者に部品選択のための基準を示す部品評価手法とし
callercalleeC1C2C2C4C1C3C3C2報がなければ，実利用方法がわからないユーザにとっC3C4て，再利用の恩恵を受けることができない．

C3C5て，静的な部品間の利用実績に基づいたソフトウェア
部品評価手法 (Component Rank 法, CR 法) を提案し，その有効性を確認している [1], [2]．しかし，各部品が「いつ」「どのように」利用されているかという情

そこで本論文では，動的な情報を利用した部品評価手法の提案を行う．ソフトウェア実行時に得られる動関係の推移も得られるだけでなく，部品の支配関係をDynamic-dominancerelationshipFig. 1C4C3C5

C1

動的支配関係的支配関係を用いることで，単に各部品間の呼び出し

C2

動的部品グラフComponent Graph

図 1 動的部品グラフ例
Example: Dynamic Component Graph

定量化した値が得られ，対象システムの振る舞いを理解するのに有効な手法であると考えられる．この提案

2. 3 部品評価値計算法

手法を基に，Java アプリケーションを対象として，部

ここでは，部品グラフを入力とし，繰り返し計算に品評価値，支配関係を求めるシステムを実現し，有効より各頂点の重みを求めることで，それに対応する部性を確認する．また，求めた部品評価値でフィルタリ品の評価値を定める [1], [2]．以下にその概略を示す．

ングを行い，重要な部品間のみのシーケンス図を作成

部品評価値計算手順の概略

電子情報通信学会論文誌 X Vol. Jxx–X No. xx

pp. 1–3xxxx 年 xx 月

1

電子情報通信学会論文誌 ’xx/xx Vol. Jxx–X No. xx（ 1 ） ソフトウェアを実行し，動的支配関係を取得（ 2 ） 動的支配関係を基に，動的部品グラフを生成

Table 1

(部品評価値計算が必ず収束するようにするための補正を加えた擬似辺も含む [2].)（ 3 ） 動的部品グラフの各頂点に初期重み (1/頂点数) を与える
（ 4 ） 動的部品グラフの各有向辺の重みを求める(各頂点の重みを，その頂点から出ていく辺で分配する)（ 5 ） 頂点に入ってくる辺の重みの総和を，その頂点の重みとして再定義する（ 6 ） 頂点の重みが収束するまで，4,5 を繰り返し計算する（ 7 ） 収束した頂点の重みを，その頂点に対応する部品の評価値として出力する
部品評価値計算例を， 図 2 に示す．部品 C1 ，C2 ，C3 の重みは，それぞれ 0.4，0.2，0.4 で収束しており，この値を部品評価値として出力する．

C10.2

0.4

C20.2

0.2

0.4

C30.2

評価値
順位
Rank
12345678910

表 1 javac：正常終了
javac ：Normal Execution{(a): the number of the dominance relation(b): Ranked by (a) }クラス名

Classnamev8.Mainv8.JavaCompilerv8.comp.Gen
Mainv8.comp.Attr
v8.comp.Enter
v8.comp.TransInner
v8.code.ClassReader
v8.comp.Enter$CompleteEnter
v8.comp.TransTypes

部品評価値(×108 )
Value
62307155401857
3308156
291106028446012588095
200728819493221821256
1797646

支配部品数(a)1724362342827261626

支配数
順位(b)
117
1
53
2
345145機能に必要な，中心となる部品と考えられる．しかし，ある部品 A が支配部品数の多い部品 B のみを呼び出している場合，部品 B の呼び出し方法が記述されている部品 A も再利用にとって重要な部品であり，支配数が少ない部品でも，中心となる部品が存在しているはずである．提案手法を用いることで，機能実行における重要な部品を知ることができる．
次に，実行方法による部品評価値の違いを検証する
ため，j2sdk1.4.0 01.demo.jfc.Notepad プログラムに対し，複数機能を実行した時の，部品評価値の上位 10位までを 表 2 に，ファイルオープン機能のみ実行した
ときの，部品評価値の上位 10 位までを 表 3 に示す．

0.4

図 2 部品評価値計算例
Fig. 2 Example: Evaluation of Components

3. 評 価 実 験
2. 節の提案手法を基に，Java アプリケーションを対象とした部品評価値を計算する評価システムの実装を行った．このシステムでは，ソフトウェア部品の単位としてクラスとし，支配関係としてクラスの継承，インターフェースおよび抽象クラスの実装，メソッド

Table 2
評価値
順位
Rank
12345678910

表 2 Notepad：複数機能実行
Notepad ：Execution of Multiple Function（See Table 1）

クラス名

ClassnameSystemNotepadNotepad$UndoAction
Notepad$OpenActionNotepad$ShowElementTreeAction
Notepad$UndoHandler
ElementTreePanel
Notepad$3
Notepad$FileLoader
Notepad$2

部品評価値(×108 )
Value
16207350
13356511
573207353612535063501
480329747407214732369
47317134358630

支配部品数(a)161254334322

支配数
順位(b)
1234
664
61010の呼びだし，フィールド参照としている．
この実装システムを利用して，評価実験を行った．
以降，実験結果ならびに考察について述べる．また，

表 3 Notepad ：ファイルオープン機能実行
Table 3 Notepad：Execution of File-Open Function

部品評価値のシーケンス図への適用について述べる．

3. 1 実験結果及び考察
実装システムを利用して評価実験を行った． 表 1は，javac(Java コンパイラ) に正常にコンパイルが終了するプログラムを引数に与えて実行した時の，部品評価値の上位 10 位までの結果である．
表 1 からわかるように，支配部品数の少ない部品で評価値
順位
Rank
12345

クラス名

ClassnameNotepadSystemNotepad$OpenAction
Notepad$FileLoader
Notepad$ShowElementTreeAction
Notepad$UndoHandler
Notepad$UndoAction
Notepad$NewAction
Notepad$RedoAction
Notepad$ExitAction

部品評価値(×108 )
Value
28475829
14920808
10882916
77159193800453
3800453
3800453
3800453
3800453
3800453

支配部品数
(a)
1243
1000000

支配数
順位(b)1234555555あっても，部品評価値の高い部品が存在することがわ
かる．一般に，支配部品数が多い部品ほど，実行した
2

表 2 と 表 3 を比べてわかるように，実行方法によっレターて，部品評価値が異なることが確認できる．さらに，品の選択基準に利用できることを確認した．さらに，

表 3 では，OpenAction クラスや FileLoader クラス

シーケンス図作成の際に，特定の部品評価値でフィルといった，ファイルオープンに必要な部品の評価値が，タリングすることで，ソフトウェア理解，再利用支援

表 2 よりも高いことがわかる．つまり，実行した機能につながる情報の表示を行えることを確認した．に依存した部品評価値が得られることが確認できる．

今後の課題として，さらに多くのアプリケーション

3. 2 シーケンス図への適用に対して適用する，他の評価手法との比較を行う，有部品評価値はどの部品が重要であるかの指標となり，向辺によるフィルタリング，などが挙げられる．

再利用における部品選択の基準の一つとして利用できる．しかし部品評価値だけでは，部品が実際にどのように活用されているかという情報を取得することができない．そこで，本研究では，部品評価値のシーケンス図(Sequence Diagram) への適用を行う．
シーケンス図とは，オブジェクトの相互作用を時系列に沿って並べて表現した図のことをいう [4]．この文

献[1] K. Inoue, R. Yokomori, H. Fujiwara, T. Yamamoto,
M. Matsushita, S. Kusumoto:“Component Rank:

Relative Significance Rank for Software Component
Search”, ICSE2003(to appear). (2002).
[2] 藤原 晃, 横森 励士, 山本 哲男, 松下 誠, 楠本 真二 , 井上克郎 “ソースコード間の関係を用いた再利用性評価手法の提案”, 情報処理学会研究報告, 2002-SE-136, Vol.2002,
No.23, pp.155-162 (2002).

シーケンス図を動的支配関係のみで作成すれば，全て[3] C. Braun: Reuse, in John J. Marciniak: “Encyclope-の呼び出し関係が表示されるため，開発者にとってわdia of Software Engineering”, Vol. 2, John Wiley &かりにくい図となってしまう．そこでシーケンス図作成の際に，適当な部品評価値でフィルタリングし，重要な部品間の呼び出し関係のみを表示するようにする．
フィルタリングすることにより，重要でない部品間のSons, pp. 1055-1069 (1994).
[4] J. Rumbaugh, I. Jacobson, G. Booch : “The Unified Modeling Language Reference Manual”,AddisonWesley Pub Co. (1998).

（平成 x 年 xx 月 xx 日受付）

支配関係を削減することで，開発者が注目すべき部品，支配関係を絞り込めるため，ソフトウェア理解につながり，結果再利用の支援を可能とすると考えられる．
図 3 は， 表 3 の FileLoader クラスの部品評価値(7715919) でフィルタリングを行ったシーケンス図である．全 19 クラスから成り立っていたシーケンス図が，3 クラス間の支配関係のみ出力されている．実際，この 3 クラスで，ファイルオープン機能は実装されており，全体を表示するより開発者に有益な表示となっている．
28475829

Notepad10882916
Notepad$
OpenAction<init><init>
getFrame
getFrame

7715919
Notepad$FileLoader<init><init>

図 3 フィルタリングを行ったシーケンス図例
Fig. 3 Example: Filtered Sequence Diagram

4. まとめと今後の課題
本研究では，動的な情報を利用した部品評価手法の提案を行った．提案手法をシステムに実装し，評価実験を行った結果，特定の機能を実装している重要な部
3