論文

利用実績に基づくソフトウェア部品重要度評価システム
横森 励士†

藤原晃†

楠本 真二†††

井上

克郎†††

山本 哲男††松下誠†††

The Importance Evaluation System of Software Components Based on the Use Frequency
Reishi YOKOMORI†, Hikaru FUJIWARA† , Tetsuo YAMAMOTO†† , Makoto MATSUSHITA††† ,Shinji KUSUMOTO††† , and Katsuro INOUE†††

あらまし 近年，大量の大規模ソフトウェアが開発されており，開発現場ではソフトウェアの再利用がよく用いられているが，現在のプログラム開発環境では個々の開発者の知識に頼っているのが現状で，知識の共有が満足になされていない．本論文では，ソフトウェア部品の検索において部品の選別に利用するための手法として，
ソフトウェア部品の利用実績に基づいて各部品の重要度を測定し，順位付けする手法を提案する．この手法では，実際に開発された複数のシステム内に存在する部品に対して，利用関係に基づいてグラフおよび行列を構築し，繰り返し計算を行う事で，重要度を測定する．また，提案手法に基づき，Java で開発されたソフトウェア群から各部品の重要度を計測するシステムを開発し，適用実験を行う．実験結果では，実際に利用される回数の多いクラスや重要な機能を持つクラスが上位を占め，本手法で測定した部品の重要度が利用実績に基づいた定量的な指標であることを確認できた．この手法を部品検索において利用する事で，利用実績のある部品を効果的に取得で
きる．
キーワード

ソフトウェア部品，部品評価，利用実績， JAVA

発されている事も多い．

1. ま え が き

一方でインターネットの普及により，SourceForge

近年，大規模で複雑なプログラムを含む大量のソフ[21] などのソフトウェア開発に関する情報を交換する

トウェアが開発され，様々な場所で様々な目的で利用

コミュニティが誕生し，大量のプログラムソースコー

されている．これらのプログラムの中には似た種類のドが簡単に入手できるようになった．これらの公開さプログラムが多数存在し，開発期間の短縮や品質向上

れている大量の部品の中から，開発者の必要としていを目的として，既存のソフトウェア部品を同一システる機能を持つ部品，その機能の使い方を示している部

ム内や他のシステムで利用する，いわゆるソフトウェ品のような，再利用に有益な情報を提供する検索シス

アの再利用がよく用いられている．ソフトウェアの再テムを実現する事で，知識の共有が実現でき，再利用

利用による効果を最大限に引き出すためには，開発者を促進する事ができると考えられる．

が今から開発しようとするソフトウェアに必要な部品知識の共有を目的としたソフトウェアの部品検索シ

およびライブラリに関する知識を持つことが重要にステムを構築する際，検索された部品を評価し順位付

なってくるが，知識の共有が満足になされていないた

けし，選別して表示する仕組みが必要となる．部品のめに，同種のプログラムが別々の場所で，独立して開特性から個々のソフトウェア部品の再利用性を評価する手法が提案されているが [4], [17]，このような部品† 大阪大学大学院基礎工学研究科，豊中市

Graduate School of Engineering Science, Osaka University, Toyonaka-shi, 560-

検索システムにおける利用を考えた場合，目的にあっ8531, Japanた部品を選出することと同様に，いろいろなソフト†† 科学技術振興事業団，川口市

Japan Science and Technology Corporation 4-1-8, Honmachi, Kawaguchi-shi,

ウェアで使われ完成度が高い部品を選出することが必要であると考えられる．このとき，各部品の利用実績

Saitama 332-8531, Japan††† 大阪大学大学院情報科学研究科，豊中市

Graduate School of Information Science and Technology, Osaka University,を定量的に評価した指標が必要となる．
そこで本論文では，ソフトウェア部品の利用実績にToyonaka-shi, 560-8531, Japan

電子情報通信学会論文誌

D–I

Vol. Jxx–D–I No. xx

pp. 1–11xxxx 年 xx 月

1

電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx

基づいて各部品の重要度を測定し，順位付けし，評価する手法 (Component Rank 法, CR 法) を提案する．この手法では，十分な時間が経過し利用関係が収束した
ソフトウェア部品の集合に対して，各ソフトウェア部
品間に存在する利用関係に基づいてグラフおよび行列を構築し，構築された行列に対して繰り返し計算を行う事で各部品の重要度を測定する．求められる重要度

G = (V, E) と表現する．
図 1 は二つのソフトウェアシステム X と Y を部品グラフ化したものである. X は A から E の 5 つ，Yは F から I の４つの部品で構成されており，部品 C
は 部品 A および B を利用し，部品 D および E は 部
品 C を利用している．同様に部品 H と I は 部品 Gを利用し, 部品 G と F はお互いに利用しあっている．

は，開発者が利用関係に沿って参照を行うと仮定した

A

場合の各部品の参照されやすさを表しており，よく利FB

用される部品や，重要な部品から利用される部品の重GC

要度は高くなる．
また，提案する手法に基づいて，プログラミング言D

語 Java で開発されたソフトウェア群から重要度を計

H

E

I

測するシステムを開発し，求めた値が妥当であるかを検証するために幾つかのソフトウェアシステムに適System X

用する．また，重要度を元に検索された部品を評価
し順位付けし，選別して表示する部品検索システム(Software Product Archiving, analyzing, and Retrieving
System ,SPARS) について説明する．
以降，2. 節では，提案手法「CR 法」の定義と計算方法について述べる．3. 節では，部品重要度評価シス
テム「CR-システム」の実現について述べる．4. 節では，Java ソースコードへの適用実験について述べる．
5. 節では，関連研究およびソフトウェア部品検索への考察について述べる．最後に 6. 節では，まとめと今後の課題について述べる．

2. Component Rank 法
ここでは，部品の概念をモデル化し，その上で利用実績に基づいた部品重要度の評価手法 (Component

Rank 法, CR 法) について説明する．
2. 1 部品と部品間の利用関係
一般にソフトウェア部品 (Software Comopnent) とは再 利 用 で きる よ う に 設計 さ れ た 部品 と さ れ てい
る [7], [12]．ここではより一般的に，ソースコードファ
イルやバイナリファイル，ドキュメントなどの種類を

System Y

図 1 部品グラフの例
Fig. 1 An example of component graph

2. 2 重みの定義
CR 法では，部品グラフ G = (V, E) 上の個々の辺および頂点に対して重みを計算し，対応する頂点の重みをもとに各部品の重要度を評価する．最初に，頂点の重みを次のように定義する．
［定義 1］（頂点の重みの和） 部品グラフ G 上の各頂
点 v は 0 ≤ w(v) ≤ 1 の重みを持ち，G の頂点の重みの総和は，1 とする．



w(v)

=1

v∈G
また，部品グラフ G 中の頂点 v の重みを求めるた
めに，辺の重みを次のように定義する．
［定義 2］（辺の重み） 頂点 vi から vj への辺 eij に関する辺の重み w  (eij ) を次のように定義する．

w  (eij ) = dij × w(vi )図 2 (a) はこの定義を図示したものである．dij は配

問わず，開発者が再利用を行う単位をソフトウェア部

分率とよび，0 ≤ dij ≤ 1 かつ品，あるいは単に部品と呼ぶ．これらの部品間には互値とする．頂点 vi から vj へ利用関係が存在しない場

いに利用する，利用されるという利用関係が存在する．

合，ここでは dij = 0 とする．この配分率 dij は，次本論文では各部品を頂点，部品間の利用関係を利用すに示す頂点の重みの定義において，有向辺の終点とな

idij = 1 を満たす

る側からされる側への有向辺として，グラフ上に表現る頂点の重みの決定に利用される．図 2 (b) は次の定する．以下，この部品間の利用関係を表現したグラフ

義を図示したものである．

を部品グラフ (Comopnent Graph) と呼ぶ．以下では，［定義 3］（頂点の重み） IN(vi ) を vi を終点とする有V を部品（頂点）の集合，E を有向辺の集合として，向辺の集合とする．この時，頂点 vi の重みは vi が終2

論文／利用実績に基づくソフトウェア部品重要度評価システムに参照するかをマルコフ連鎖 [2] でモデル化し表現すe1i

w(vi )w’(eij )viw’(eki )vj

eij

w(vi )に沿って利用関係のある部品の一つを参照するとみな

vi

eki

る．すなわち，開発者はある部品を参照した後に，辺す．ここで，式 (1) を満たす解 W は D t に関する定常分布となり，対象とする部品の集合の中での参照を十w(vi ) = w’(e1j ) + w’(e2j ) +分長い間時間繰り返した場合の，開発者によって各部・・・+ w’(e品が参照されている確率を示すことになる．つまり，

w’(eij ) = dij w(vi )) +kj(a) Weight of Edge

・・・(b) Weight of Node

重みが高い部品ほど開発者によって頻繁に参照されることになる．この値を重要度とすることで，ただ単に

図 2 重みの定義
Fig. 2 Definition of weights

利用数が多い部品だけでなく，利用数が多い部品が利用している部品も重要であると評価することが出来る．

点となる有向辺 eki の重みの総和とする．つまり，

w(vi ) =が既約であることが必要となるが，CR 法では，既約w  (eki )である事を保証するために後述する補正を加えている．

eki ∈ IN(vi )

この場合，D t における絶対値最大の固有ベクトル

2. 3 重みの計算
2.2 節の重みの定義に基づいて，頂点 w(vi) に対して次の方程式が生成できる．

w(vi ) =dki × w(vk )eki ∈ IN(vi )各頂点に関してこの方程式を立てる事で，n(= |V |)個の連立方程式が生成できる．また，各頂点の重みをベクトル W として次のように表現し，

w(v1 )

定常分布が一意にもとめられる事を示すためには，D t w(v2 ) 

..

.



を求める事で，定常分布を求めることができるが，行
列 D t の絶対値最大の固有値は１であるため，累乗法(power method) を用いて適当な初期ベクトルに対して繰り返し D t を掛ける事で，近似解を容易に求める事ができる．図 3 は，与えられたグラフにおいて各頂点の重み（重要度）を計算した結果である．v1 は 2 つの有向辺の始点で，v1 の重み 0.4 は二つの辺に 0.2 ずつ等分されている (つまり，d12 = d13 = 0.5)．また，v3
は 2 つの有向辺の終点で，それぞれの辺が 0.2 の重みを持つため，v3 の重みは 0.4 であることがわかる．
0.2

0.4

W =


v1

d

=0.5

12

w(vn )

d

13



= 0.5

0.2

配分率を次の行列 D として表現する事で，

0.4



d11

 d21
D=
 ..
 .

d12
d22
..
.

...
...
..
.

d1n

d2n 
.. 

. 

dn1

dn2

...

dnn

d

31

= 1

v2

0.2

d

v3

23

= 1

0.2

0.4

図 3 重みの計算例
Fig. 3 An example of stable weights assigned to nodes and edgesn(= |V |) 個の連立方程式を次のように表す事ができる．ここで 行列 D t は D の転置行列を表す.

2. 4 部品重要度計算に関する補正
前節で部品の重要度の計算に関する説明を行ったが，実際に運用する場合不具合が起こる場合がある．例えば，部品 i がどの部品も利用していない場合，頂点 vit

W =D W(1)

から全ての頂点への配分率 dix が全て 0 になり，配分率に関する定義（頂点からの辺への配分率の総和が１）

定義１から，行列 D t は推移確率行列の性質を満たtしているため，D を用いて開発者が部品をどのようを満たさなくなる．また，グラフが図 4(a) のように強連結でない場合，頂点 v1 の重みが 0 になってしま3電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx

い，v1 から v2 への利用関係を正しく評価する事がでこれらの類似部品は類似部品中のある一つの部品を利きない．

用してコピーして作成されたと推測することができる．

このような場合，与えられた行列が既約であること

そのため，それらの類似部品間に利用関係を定義するを保証できず，定常分布が一意に定まらない場合があのが妥当であると考えられる．ライブラリとして再利る．そこで，全ての頂点を図 4 (b) のように低い配分

用された場合には，部品グラフ上で利用関係を有向辺

率の擬似辺で結ぶ事で，与えられたグラフを強連結なとして定義できるが，コピーの場合はコピー元の特定グラフに変換し，行列が既約である事を保証する．こが難しく，部品グラフ上の有向辺として定義するのはの擬似辺は，各部品における自分を含めた全ての部品

難しい．

への明示的でない参照を意図している．ここで p は実

そこで，提案手法では似た部品をグループ化し，部際の辺と擬似辺の重みの配分比率を指す．

品群それぞれに対して重要度を与える．このとき各部［定義 4］（修正配分率） 頂点 vi を始点とする辺への品の重要度は，その部品が属する部品群の重要度とす

配分率 d (eij ) を次のように定義する．

p × dij + (1 − p)/n1/ndij =

る．その際，それぞれの類似部品へ指されていた辺が，グループ化を行う事で一つの部品群への辺とみなされ

if vi からの辺が存在
if vi からの辺がない

この補正は，前節で説明したマルコフ連鎖を用いたモデル上での参照行為を，「ある部品を参照した後に，辺に沿って利用関係のある部品の一つを参照するが，ある確率（1 − p）で，ランダムに全部品の中の一つを参照する」のように修正する．この修正により，参照
行為をより自然な形でモデル化することができる．
(a)

v1

v2

v3

る．そのため，コピーして再利用される回数が多いほど，その部品群はたくさんの部品から利用されることになる．グループ化によりコピーされた部品の重要度が高くなるため，コピーされたという利用実績を重要度に反映させる事ができる．
グループ化を行う際には，2 つの部品がどの程度類似しているかを定量的に評価するために部品間の類似度(Similarity) を評価するメトリクスを利用する．以下，
部品 v1 ，v2 間の類似度を s(v1 , v2 ) と表す．類似度は 0
以上 1 以下の範囲に正規化され，値が高いほど部品は良く類似しているとし，類似度 1 を完全に部品が一致した場合（コピーした部品）とする．また，グループ化の閾値として t という値を定義し，s(v1, v2) ≥ t であるときに s(v1, v2 ) は類似関係にあるとする．部品集合

(b)

v1

v2

v3

図 4 部品重要度計算に関する補正（擬似辺の追加）
Fig. 4 Introduction of pseudo use relation for convergence

2. 5 部品のグループ化
システムを構築する際には，過去に開発したシステ

V 内で類似関係にある部品を同一の部品群とすることで，V の商集合からなる類似部品群の集合 V  を求める．この時，G の部品群グラフ（clustered component

graph ）G = (V  , E  ) を次のように定義する．
［定義 5］（部品群グラフ G = (V  , E  )） V の商集合からなる集合 V  を G の頂点集合とする．また vi ，vjが属する V  中の集合をそれぞれ vi ，vj としたときに，よくある．これらの部品は，ライブラリとして再利用

E  = {(vi , vj )|(vi, vj ) ∈ E} を G の辺集合とする．
図 5 は 部品のグループ化を行った際に，コピーされされる他に，コピーされたり，コピーされた上で大小た部品の重要度がどのように変わるかを例で示したも様々な変更が加わった上で再利用されることが考えらのである．3 つのシステムのうち，2 つのシステムにはれる．そのため，様々なソフトウェアから部品を集め

X.A および Y.A という同一の部品が存在する．A とた場合，その部品集合にはコピーした部品や，コピーいう部品がライブラリとして再利用された場合は，部して一部を変更しただけの部品（類似部品）が数多く品 A が部品 X.B および Y.C の両方と利用関係にある

存在すると考えられる．

ことを把握できる．しかし一方で，部品がコピーされムの部品の一部を再利用して開発が行われることがこのとき，異なるシステムをまたいで類似部品が現て再利用された場合は，部品が属する名前空間（パッれる場合を考える．再利用という観点から考慮すると，

ケージ名）が異なる，または部品名が異なるなどの理4

論文／利用実績に基づくソフトウェア部品重要度評価システム

1/6

1/6

1/6

X.A

Y.A

Z.D

X.B

Y.C

Z.E

1/6

1/6

1/6

Weight Computation without grouping

2/6

1/6

A’

（X.A,Y.A)

B’

C’

D’

(Z.D)

E’

（X.B)

（Y.C)

（Z.E)

1/6

1/6

1/6

Weight Computation with grouping

図 5 グループ化の効果
Fig. 5 Effect of grouping components

分配率:

現在は重要度計算の効率化のため，分配率を利用関係の種類にかかわらず全て等しくしている．
例えばある部品が 5 つの部品を利用した場合，それぞれの辺は 17%の重みを持つ．
類似度の閾値 t:

グループ化において部品間の類似度を評価するメトリクスとして，文献 [16] で提案されている「Sline 」を用いる．Sline は 2 つのソースコード
ファイル間で一致する行の割合で，2 つのファイル間う．このとき，グループ化を行わないと，コピーされの類似度を表す．
「SMMT(Similarity Metrics MesuringTool)」は Sline をソースコードファイルから計測するシステムである．閾値 t については t = 0.8 を採用した部品は別々の部品として評価されるため，図 5 の場ている．

由から X.A，Y.A は別々の部品として扱われてしま

合すべての部品の重要度が等しくなる．
そこで，提案手法では部品間の類似度を測定するこ

3. 2 CR-システムの構成
CR-システムの構成を図 6 に示す．解析の手順は以とでグループ化を行なう．これにより X.A および Y.A

下の通りである．

が同一部品であると判定され，部品 X.A および Y.A(1) 入力された M 個の部品に対して，SMMT を用いへのそれぞれの有向辺が一つの部品群 A への有向辺ることで，各部品間の類似度を計測する．

に統合されるため，コピーが存在する部品 A の重要度

(2) SMMT で得られた類似度をもとに，閾値 t 以上の類似度を持つ部品をまとめることで，M 個の部品を，N 個の部品群にグループ化する．

が他の部品よりも高くなることがわかる．以降の実際の重要度計算では，部品グラフではなく部品群グラフ
を対象としており，部品群グラフに対して修正配分率(3) M 個の Java ソースコードファイルを解析し，利に関する補正を行った上で部品群における重要度を計

用関係を抽出する．Java ソースコードの構文解析には，算している．

ANTLR [18] を利用している．
(4) 部品群に関する情報とファイル間の関係抽出部の3. Component Rank システム
2 節で提案した CR 法に基づいて，我々は Java プロ

結果（部品間の関係）から，部品群間の利用関係を求め，部品群グラフを形成する．

グラムを対象としてソースコードの重要度を評価する(5) 部品群グラフから行列を構築し，行列における繰

システム「Component Rank システム（，以下 CR-シ

り返し計算を元に定常分布を求め，それを各頂点（部ステム）」を構築した．ここでは，構築した CR-シス品）の重要度とする．

テムについて説明する．

(6) 各部品が属する部品群の重要度から，各部品の重3. 1 CR-システムの実現
Java に適用する際の，モデルと Java の概念との対応を以下に示す．
部品:

オブジェクト指向言語 Java は原則として 1 つ

要度を求め，順位付けを行い，部品の重要度ランクを出力する．

4. 評 価 実 験のソースファイルには 1 つのクラスを記述している．

本節では，CR-システムによって求められた部品のそこで，クラス単位での利用が行いやすいソースコー

順位が妥当であるかを確認するために，3 つのソフト

ドファイルを部品の単位とする．

ウェア部品の集合に対して適用実験を行う．

利用関係:

部品間の利用関係をクラスの継承，インターフェースおよび抽象クラスの実装，メソッドの呼びだし，フィールド参照とする．
辺と擬似辺の重みの配分比率 p:

配分比率 p として
p = 0.85 を採用している．この場合，部品の重みの85%が実際の辺に分配され，15%が擬似辺の重みとして全ての部品に均等に分配される．

4. 1 JDK 1.3.0 への適用
Sun Microsystems [20] から 配布されてい る Java 2
Software Development Kit, Standard Edition 1.3.0 (以下JDK) のソースコードを対象として評価実験を行った．
JDK は 1877 ファイルで構成され，総行数は約 575000
行である．Pentium 4 2GHz の CPU, 2GBytes のメモリーを持つ PC 上で，JDK に対して CR-システムを用
5

電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx

xx.java

スが上位を占めているということから，CR 法による

.java file ≡component
Input

部品の順位付けは妥当であると考えられる．

4. 2 研究室内ソースコードへの適用
研究室内で過去に開発された Java アプリケーションのソースコード (582 ファイル) を適用対象として実験(1) Similarity
Measurementby SMMT(3) Use Relation
Extraction(2) Clustering(4) Clustered Component
Graph Construction(6) De-Clustering to
Original Component Graph(5) Component Rank
Computation
by Repetition

OutputOrder of Weights ≡Component Rank of .java files
図 6 Component Rank システム（CR-システム）の構成
Fig. 6 Architecture of the component rank system
表 1 JDK 1.3.0 における Component Rank
Table 1 Component Rank for JDK 1.3.0
C.Rank
1
2
3
4
5
6
7
8
9
10
.
.
.
1256
1256

Class Namejava.lang.Object
java.lang.Class
java.lang.Throwable
java.lang.Exception
java.io.IOException
java.lang.StringBuffer
java.lang.SecurityManager
java.io.InputStream
java.lang.reflect.Field
java.lang.reflect.Constructor.
.
.
sunw.util.EventListener.
.
.

Weight0.161260.087120.055100.03103
0.013430.012140.011690.010270.009480.00936.
.
.
0.00011.
.
.

を行った．適用対象について簡単に説明する．

C-K メトリクス計測ツール: Java ソースコードから
C-K メ ト リ ク ス [3] を 計 測 す る ツ ー ル と そ の バ ー
ジョンアップ 版 ．パッケ ージ 名 は cktool およ び cktool new(29+29 ファイ ル)．ANTLR [18] を 使 用 し て
ソースコードの構文解析を行っている．

CR-システム: 本論文で作成した CR-システム．下記で示したライブラリを利用している．パッケージ名は

jp.ac.osaka u.es.ics.iip lab.metrics．(68 ファイル)
ライブラリ群: ANTLR(パッケ ー ジ 名 antlr, 188 ファイ ル), JAMA [19](パッケ ー ジ 名 Jama, 9 ファイル), Caffe Cappuccino Class Library [13](パッケージ名
jp.gr.java conf.keisuken, 245 ファイル)．
(14 ファイル)適用結果を表 2 に示す．2 位，8 位に同じ順位の部

その他:

品がそれぞれ存在している．これは，それぞれ二つのクラスがよく似ているため同一部品群に存在していることを示している．
複数のアプリケーションで共通に使用される ANTLRのようなパッケージが，研究室内で作成されたアプリ
ケーションよりも全体的に上位に来る傾向が見られる．また，データを格納する Token ，Vector，Matrix，

Array クラスやデバッグ情報を出力するための Event
クラスのような，ソフトウェア全体で広く利用されるクラスが高く評価されている．これらのクラスは，ソフトウェア内で参照される回数が多く，様々なクラス

いて順位付けを行ったところ，約 7 分の時間を必要と内で利用されていることが予想できる．ソフトウェア

した．

内での利用回数が多く，汎用的で重要な役割を担って

表 1 は得られた順位の上位 10 位までを表にしたもいることを予想できるようなクラスが上位に来ており，のである．上位 10 クラスについて見てみると，Object,

これらの結果から CR 法による順位づけは妥当である

Class, Throwable など，Java の言語仕様 [5] で利用しと考えられる．

なければならないクラスが大半を占めている．例え4. 3 部品検索への利用例

ば，java.lang.Class クラスは実行中のクラスおよびイ

今回提案した手法の応用例として，インターネット

ンターフェイスを表すクラスで，このクラスを直接継上で公開されている大量の部品の中から，開発者の必承するようなクラスはないが，実行時のオブジェクト

要としている機能を持つ部品や，その機能の使い方を型の情報を取得するために頻繁に呼び出される．一方示している部品のような，再利用に有益な情報を提供

で最下位は 1256 位で，最下位に属する 622 クラスはするための部品検索システムの実現が考えられる．こどのクラスからも利用されていない．

のとき，あらかじめ全ての部品に対して CR 法を用いこれらの Java において重要な役割を担っているクラ
6てその部品の重要度を一元的に定義し，検索結果にお論文／利用実績に基づくソフトウェア部品重要度評価システム
表 2 研究室内ツールにおける Component Rank
Table 2 Component Rank for SE tools
C.Rank
1
2
2
4
5
6
7
8
8
10
.
.
.
418

Class Nameantlr.Token
antlr.debug.Event
antlr.debug.NewLineEvent
antlr.collections.impl.Vector
jp.gr.java conf.keisuken.
text.html.HtmlParameterjp.gr.java conf.keisuken.
net.server.ServerProperties
Jama.Matrix
jp.gr.java conf.keisuken.
util.IntegerArrayjp.gr.java conf.keisuken.
util.LongArrayjp.ac.osaka u.es.ics.iip lab.metrics.
parser.IdentifierInfo.
.
.
cktool new.examples.Main

Weight0.10727
0.06189
0.061890.05434
0.05246
0.03699
0.015640.013900.013900.01365.
.
.
0.00050で 現 れ る ノ ー ド の 種 類 を 得 る た め の メ ソッド で ある”getNodetype” について検索を行う場合を考える．
今回の検索では UNIX のコマンドである grep を用いて検索を行った．ただし，コメントにのみ現れる場合は除外している．検索の結果，181 のクラスが該当し，
CR-システムの順位をもとに検索結果を順位づけした
ところ，表 3 のようになった．
部品全体の順位は JDK に対する適用の場合と同様に，java.lang.Object のような汎用的な部品が上位を占めるが，検索結果においてはそれらの部品はヒットせず，部品定義を行う部品とその利用方法に関する部品のみが抽出された．今回は，1 位と 2 位にそのメソッドの定義が出現し，その他のクラスは利用例であった．
利用例を見ていくと，上位の利用例は DOM の解析などにおけるノードの操作（3〜5，10 位），スタイル
シートなどの XML 文書の解析（6〜9 位）など一般的

いて部品が複数検出されたときに，重要度の順に並びなものであったが，下位になればなるほど，XML で替えて表示を行う．これによりよく利用される汎用性

書かれた内容を解釈して実行するための FuncID クラの高い部品を先頭に表示する事ができるため，知識のスのような特殊な利用例が現れやすくなっていた．

共有を円滑にでき，再利用を促進することができると

表 3 検索結果（Component Rank 順）
Table 3 Search Result Sorted by Component Rank
Order
(C.Rank)
1(67)
2(169)
3(275)
4(316)
5(355)
6(382)
7(437)
8(446)
9(500)
10(506).
.
.
125(4441)
125(4441)

今回提案する重要度を部品検索システムにおける検索結果の表示順位決定に用いる事で，今回の例のよう考えられる．

Class Nameweightenhydra3.1..dom.Node
saxon7 0..saxon.om.NodeInfo
saxon7 0..saxon.pattern.NodeTest
enhydra3.1..dom.DocumentImpl
saxon7 0..saxon.pattern.Patternsaxon7 0..saxon.Controller
enhydra3.1..xslt.XSLTEngineImpl
enhydra3.1..dom.ElementImpl
saxon7 0..saxon.style.StyleElement
saxon7 0..saxon.tree.NodeImpl.
.
.
enhydra3.1..FuncID.
.
.

0.0291100.000969
0.000437
0.000368
0.000324
0.000296
0.0002410.000235
0.000202
0.000198.
.
.
0.000029.
.
.

に大量の部品の中からでも部品定義に関する情報を上位に配置できる．さらに，ある機能の利用方法を知りたい場合にも，一般的な利用方法から参照できるようになるため，知識の共有を円滑に行うことができる．
順位付けがない場合，最悪の場合全ての部品を見る必要があることを考えると，CR 法を部品検索システムの表示順位の決定に用いる事は有益であると考えら
れる．

5. 考

察

5. 1 関 連 研 究
利用回数による評価手法
本論文で提案した CR 法は，利用関係をもとに各部品の重要度を評価する手法である．各部品の重要度をSection 4.2 節で紹介したツールおよび，テキストエ
ディタ JEDIT ，アプリケーションサーバー Enhydra ，評価する方法としては，各部品の利用回数をもとに評XSLT プロセッサー saxon ，gnutella clientphex などのSourceForge [21] で 公開されている Java アプリケー

クラス数からクラスの人気度を測定する測定法として，価する手法も考えられる．[11] では、クラスの被利用ション群を対象に検索の例を示す．総ファイル数はCP（class popularity）が提案されている．
この手法の場合，CR 法のような繰り返し計算は必7171 個で，これらのアプリケーションでは XML 文書

要としない．しかし，今回想定しているようなソフト

に関する操作を行っている．

ウェアの部品検索システムにおける利用を考えた場合，

こ れ ら の 部 品 を 対 象 と し て ，DOM ツ リ ー の 中

実際に機能を実現している部品を発見するのが困難に
7電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx

B

1

C

1

feature X
1
D

用される回数を元に行列を構築し，繰り返し計算を行う事で各学術論文誌の重要度（Influence Weight）を評価する手法が提案されている [10]．また，サーチエン
ジン Google では，検索結果の表示順を決めるために，

10 A
….
...
Fig. 7It evaluates only
a wrapper class.

リンク構造から行列を構築し，繰り返し計算を行う事
であらゆるページの重要度（PageRank ）を評価していUsed by 10class

図 7 利用回数による評価における問題
A problem of evaluation by the number of use classesなる場合があると考えられる．例えば図 7 のような，複数の部品である機能 X を実現しているような部品の集合 A，B，C，D が存在するとする．この部品の集合
では，B，C，D は機能 X の一部をそれぞれ実現している一方で，A は機能 X に関して外部とのやりとりをするためのラッパークラスで，B，C，D で実現されているメソッドを呼び出すだけである．この機能 X がよく利用されている場合に評価を行う場合を考える．この場合，利用回数で評価してしまうと．検索を行った
ときに橋渡しをしている A のみが評価され，実際に機能 X を実現している B，C，D が評価されない．
一方で CR 法では，A の重要度が利用関係を通じて

B，C，D に反映されるため，B，C，D も比較的上位として評価することができる．実際に機能 X を実現している部品 B，C，D はただ機能 X の使い方を知りた
い際にはさほど重要ではないが，機能 X を理解したり
機能 X を拡張する際にはきわめて重要であると考えられる．再利用支援を目的とした部品検索システムの場
合，前者の利用法の取得だけでなく，後者のような機
能理解や機能拡張も検索の目的として考えられる．そのため，部品検索に利用する際には CR 法を用いる方法が適切であると考えられる．Java のようなオブジェ
クト指向言語においては，複数の部品で一つの機能を生成する事が多く，そのような部品内では他のメソッ
ドを呼び出すだけのメソッドが定義される事が多いた
め，今回のように Java で記述された部品に対して CR法を適用することは適切であると思われる．

他分野における評価方法
今回提案した CR 法のような，利用関係をもとに行る [9], [14]．Influence Weight や PageRank と CR 法は，利用関係をグラフおよび行列に変換したのち各ノードの重みを計算しているなど，よく似ている．また，

JDK の API の一部（java.lang パッケージ）の文書中からリンク構造を抽出し，PageRank 手法を適用した
例 [15] では本論文における JDK への適用結果とよく似た結果が示されている．
しかし，これらの手法の対象はソフトウェア部品ではなく，参考文献，ハイパーテキスト，ソフトウェア
部品の内容を記述した文献など，全て文書である．現在のところ，ソフトウェア部品に対して直接適用した事例はない．
さらに，ソフトウェア部品に対してこのような手法を適用する際には，コピーの存在を考慮する必要があ
る．実際のソフトウェア開発現場では，既存の部品か
らコピーされ修正される事によって出来上がることが多く，コピーは開発期間の短縮などソフトウェアの実
現に大きな意味を持つ．一方で学術論文や Web ページのコピーにはほとんど意味がない．部品においては
このような類似部品の存在が特性となっており，評価を行う際には類似部品の存在を前提としなければならない．
インターネット上から様々なソフトウェア部品を集めた場合，収集された部品の中には，流用したためであるとか，実行に必要なライブラリを添付したためであるなどの理由で，類似部品が大量にあると考えられる．部品のグループ化を行わずにただ単に部品に記述されている利用関係を追跡するだけでは，ライブラリと各ソフトウェア間の利用関係は解析できるが，異なるソフトウェア間のコピーした，されたという関係は解析できない．この場合でも，ライブラリ中の部品の重要度は利用実績を反映していると考えられるが，ソフトウェア内の部品はソフトウェア毎に利用関係が独立することが考えられるため，利用実績を反映したものにならない．

列を生成し繰り返し計算を行うことで評価を行う手法

ソフトウェア内の部品の利用実績を評価するためには様々な分野において採用されている．例えば，計量は，類似部品の存在を念頭においてどのようにその部

社会学において，ある論文誌を引用する回数および引品が生成されたかを考慮して，異なるソフトウェア間

8

論文／利用実績に基づくソフトウェア部品重要度評価システムに存在するコピーに関する利用実績を定義する必要が配分比率 p に関して p の値を変えて順位の変動を検ある．ただ，コピーの関係を部品グラフ上の有向辺と証したところ，p = 0（補正のみしかないため全てのして定義するのは難しいため，提案手法では部品のグ部品が同順位になる）と p = 1.0（補正無し）の時以

ループ化を行う事でコピーの関係を重要度に反映させ外は，値を変更しても結果として得られる順位に違いている．コピーして再利用される回数が多い（類似部はほとんど見られなかった．また，p = 1.0（補正な品が多い）ほどその部品群を利用している部品の数はし）の場合は補正を行った場合と比べて 10 倍以上の多くなるため，類似部品の重要度を高くすることがで計算時間を必要とした．

きる．

このことから，p は順位の決定に影響を与えるパラメーターではなく，計算の収束にのみ必要なパラメー

再利用性の評価
前述の通り CR 法は利用実績を考慮する際，部品の再利用についても考慮している．我々は，CR 法を実タで，p はどの値でも問題ないことがわかった．そこで，現在のところ最初に採用していた値である p = 0.85
を利用している．

際に多くのソフトウェア中に再利用されているという一方で，閾値 t に関しても t の値を変えて順位の変実績を定量的に評価した指標として，ソフトウェア部

動を検証したところ，似ていると判定される部品が増品の再利用性評価に利用できると考えている．

えるため一部の部品の順位は変わるが，結果として得再利用は，一般に生産性と品質を改善し，結果としられる順位に大きな影響を与えるものではなかった．

てコストを削減するといわれており，コストを削減すしかし閾値を低くした場合，判定回数が増え計算時間る事ができた事例の報告も行われている [1] [6] [8]．こが膨大になるため．効率化を行うためにできるだけ高れまでに個々のソフトウェア部品の再利用性を評価す

い閾値を用いて判定対象を絞り込む必要がある．そこる方法がいくつか提案されている．例えば，Etzkorn

で，閾値を t = 0.8 まであげたところ，閾値を 0.1 にらは，レガシーソフトウェア中の部品 (C++のクラス)

した場合と比べて時間が 1/10 以下に抑えられたにもに対して，様々なメトリクス値を計算し，それらの値かかわらず，閾値 0.1 において類似と判定された部品を正規化して足し合わせることで，再利用性とするこに関してその半分以上は類似していると判定できた．

とを提案した [4]．また，山本らは，ソースコードが非グループ化を行う際の目的が「コピーされた部品も開示なソフトウェア部品に対して，インタフェース部

しくは一部修正が加わった部品を検出すること」であ分の情報のみを用いて再利用性を評価する方法を提案

ることを考慮すると，「コピーした上で一割強程度の変している [17]．

更がなされた部品」までを把握できれば十分な精度がこれらの手法は全て，部品そのものから読み取れる特性のみを計算して再利用性を評価するもので，実際のプログラマによる主観的な再利用性の評価の結果と得られると考えられ，現在のところ t = 0.8 を用いている．

5. 3 SPARS

似ているという結果が得られている．しかし従来の手

私たちは CR-システムを用いたソフトウェア部品

法は，部品そのものから読み取れる特性のみを評価し検索エンジンとして，現在 SPARS（Software Product

たもので，利用実績については考慮されていない．現すると考えられる．CR 法は，従来の再利用性評価手Archiving, analyzing, and Retrieving System ）を開発している．図 8 は SPARS の構成図である．
SPARS は収集してきた Java のソースプログラムに対して解析を行い，リポジトリに保存し，CR-システ

法において考慮されていない部分である，利用実績にムを用いて各部品を順位付けする．部品を検索したい

関する評価を補完するものであり，ソフトウェア部品

利用者はブラウザを通じて必要な部品に関する情報をの再利用性評価に利用できると考えている．

検索キーとして入力する．現在のところ，キーワード

実には，従来手法では再利用性が低いと評価されても，多くのシステムで再利用されている部品は数多く存在

5. 2 配分比率および閾値についてによる検索を想定しているが，コード断片による検索

今回提案した CR 法では，パラメータとして辺と擬も考慮する予定である．部品検索部は，検索キーを解

似辺の重みの配分比率 p およびグループ化における

析しリポジトリ内を検索し．検索にヒットした部品を

閾値 t が存在する．以下では，値の決定について考察

CR-システムによる順位を元に並び替えて出力する．

する．

これにより利用者はよく利用される利用実績の高い部
9電子情報通信学会論文誌 ’xx/xx Vol. Jxx–D–I No. xx
Collection ofJava Source Programs[3]

S. R. Chidamber and C. F. Kemerer: “A metrics suite for objectoriented design”, IEEE Trans. on Software Eng., Vol.20, No.6,

Raw
Component
Archive

Component
Rank
Enginepp.476-493, 1994.

RankedComponent
Archive[4]

ity quality analysis of OO legacy software”, Information and Software Technology, Vol. 43, Issue 5, pp. 295-308, 2001.
[5]

Component Searcher
BrowserQuery
Analyzer
Formatter

SearchEngineSPARS
図 8 SPARS の構成
Fig. 8 Architecture of SPARS

L. H. Etzkorn, W. E. Huges Jr., C. G. Davis: “Automated reusabil-

J. Gosling, B. Joy and G. Steele, 村上雅章 [訳]: “Java 言語仕様”, アジソン・ウェスレイ・パブリッシャーズ・ジャパン,
1997.
[6] S. Isoda: “Experience report on a software reuse project: Its structure, activities, and statistical results”, Proc. of ICSE14, pp.320326,1992.
[7]

I. Jacobson, M. Griss and P. Jonsson: Software Reuse, Addison
Wesley, 1997.

[8]

B. Keepence and M. Mannion: “Using patterns to model variability in product families”, IEEE Software, Vol. 16, No. 4, pp.

品を容易に取得する事ができる．

102-108, 1999.
[9]

L. Page, S. Brin, R. Motwani, T. Winograd:“The PageRank

Citation Ranking: Bringing Order to the Web”,

6. む す び

http://www-db.stanford.edu/ backrub/pageranksub.ps

本論文では，ソフトウェア部品の利用実績に基づいて各部品の重要度を測定し，順位付けし，評価する手法として CR 法を提案した．提案手法では，各ソフト
ウェア部品間に存在する利用関係に基づいてグラフおよび行列を構築し，構築された行列に対して繰り返し計算を行う事で，各部品の重要度を測定している．
また，実際に CR 法に基づいて部品重要度を評価す[10] G. Pinski and Francis Narin: “Citation influence for journal aggregates of scientific publications: Theory, with application to the literature of physics”, in Information Processing and Management,
Vol. 12, Num 5, pp. 297-312, 1976.
[11] 青木淳: オブジェクト指向システム分析設計入門, ソフトリ

サーチセンター, 1992.
[12] 青山幹雄, 中所武司, 向山博: コンポーネントウェア, 共立出

版, 1998.
[13] 西本圭佑: “Java 言語について”, http://cappuccino.ne.jp/keisuken/

る CR-システムを実装し，幾つかのソフトウェアシス

java/

テムに適用した．いくつかの例に適用した結果，よく[14] 馬 場 肇:利用されるクラスや一般的な使い方をしているクラス“Google の 秘 密 - PageRank 徹 底 解 説”,

http://www.kusastro.kyoto-u.ac.jp/ baba/wais/pagerank.html[15] 山本篤: “Google の基礎技術 PageRank について”，KTYYが集中して上位のランクに現れた．このように，部品

Seminar, 2001,

重要度は，利用実績を表すものであると同時に，ソフ

Seminar/20010220/

トウェア部品の検索のための順位付けにも有用なものであった．この CR 法を再利用する部品を選択する基準として用いることで，知識の共有をスムーズに行うことができ，開発者の負担を軽減できると考えられる．
今後の課題としては，さらに多くの部品への適用，

http://aglaia.c.u-tokyo.ac.jp/ỹamamoto/KTYY[16] 山本哲男, 松下誠, 神谷年洋, 井上克郎: “ソフトウェアシス

テムの類似度とその計測ツール SMMT”, 電子情報通信学会論文誌 D-I, Vol．J85-D-I, No.6, pp.503-511, 2002.
[17] 山本浩数, 鷲崎弘宜, 深澤良彰: “再利用特性に基づくコン
ポーネントメトリクスの提案と検証”, ソフトウェア工学の基礎ワークショップ (FOSE2001), 2001.
[18] “ANTLR Website”, http://www.antlr.org/

継承，実装，メソッド呼びだしの各関係の重みづけの[19] “JAMA : A Java Matrix Package”,http://math.nist.gov/javanumerics/

検討，部品検索システム（SPARS）の実現などが挙げ[20] “The Source For Java(TM) Technology”, Sun Microsystems,
http://java.sun.com/

られる．

謝辞

本研究は，科学技術振興事業団計算科学技術

活用型特定研究開発推進事業 (ACT-JST) の支援を受け
ている．

文
[1]

献

V. R. Basili, G. Caldiera, F. McGarry, R. Pajerski, G. Page and S.
Waligora: “The software engineering laboratory - an operational
software experience”, Proc. of ICSE14, pp. 370-381,1992.

[2]

G. Blom, L. Holst and D. Sandell, 森真 [訳]: “確率問題ゼミ”,

シュプリンガ−・フェアラ−ク東京, 1995.

10[21] “SourceForge”,http://sourceforge.net/（平成年月日受付，月日再受付）

論文／利用実績に基づくソフトウェア部品重要度評価システム

横森

励士 （学生員）

平 11 阪大・基礎工・情報卒．平 13 同大
大学院修士課程了．現在同大学院博士課程在学中．プログラム構造解析の研究に従事．

藤原晃

平 14 同大大学院修士課程了．現在，松下電器産業株式会社に勤務．在学中，ソフ
トウェアの生産性や品質の定量的評価に関する研究に従事．

山本哲男

平 9 阪大・基礎工・情報卒．平 11 同大
大学院博士前期了．平 14 同大大学院博士後期課程了．現在，科学技術振興事業団 計算科学技術研究員．博士（工学）．ソフト
ウェアプロセス，ソフトウェア開発支援の研究に従事．

松下誠

平 5 阪大・基礎工・情報卒．平 10 同大大学院博士後期課程了．同年同大・基礎工・情報・助手．平 14 阪大大学院情報科学研
究科・助手．工博．ソフトウェアプロセス，
オープンソースソフトウェア開発の研究に従事．

楠本

真二 （正員）昭 63 阪大・基礎工・情報卒．平 3 同大
学院博士課程中退．同年同大・基礎工・情報・助手．平 8 同大講師．平 11 同大助教
授．平 14 阪大・情報・コンピュータサイ
エンス・助教授．博士 (工学)．ソフトウェ
アの生産性や品質の定量的評価，プロジェ
クト管理に関する研究に従事．情報処理学会，IEEE ，IFPUG 各
会員．

井上

克郎 （正員）昭 54 阪大・基礎工・情報卒．昭 59 同大
大学院博士課程了．同年同大・基礎工・情報・助手．昭 59 〜昭 61 ハワイ大マノア校・情報工学科・助教授．平 1 阪大・基礎工・情報・講師．平 3 同学科・助教授．平 7 同学科・教授．平 14 阪大大学院情報科学研
究科・教授．ソフトウェア工学の研究に従事．情報処理学会，
日本ソフトウェア科学会，IEEE ，ACM 各会員．

11