ソースコード間の関係を用いた再利用性評価手法の提案
藤原 晃
松下 誠

横森 励士
楠本 真二

山本 哲男
井上 克郎

大阪大学大学院基礎工学研究科〒 560-8531 大阪府豊中市待兼山町 1-3
再利用性の高いソフトウェア部品を再利用することは，生産性と品質を改善し，結果としてコストを削減できる．ソフトウェア部品の再利用性を評価する方法はこれまでに数多く提案されているが，その方法は全て，部品そのものの持つ静的な特性を計算して再利用性を評価するものとなっている．しかし，再利用性が高いということは，実際に多くのソフトウェア中に再利用されているという実績が定量的に示されることが必要である．つまり，主観的に再利用性が高いと判断されても，実際の利用実績がなければ意味がな
いという立場である．現実には，従来手法では再利用性が低いと評価されても，多くのシステムで再利用されているという部品は多く存在すると考えられる．そこで，本論文では，利用実績に基づいたソフトウェ
ア部品の再利用性評価手法について提案する．再利用性についての基本的な考え方は，以下の (1)∼(3) である．(1) ソフトウェアを構成する部品間には相互に利用関係がある，(2) 一般に，時間が経過して多くのプロジェクト開発で再利用などが行われるに連れて部品の利用関係は変化していく，(3) 十分な時間が経過した状態のもとで，被利用数が多い部品は再利用性が高く，再利用性が高い部品から利用されている部品も再利用性が高い．提案する手法に基づいて，プログラミング言語 Java で開発されたソフトウェア群から再利用性を計測するシステムを開発し，幾つかのソフトウェアシステムに適用した．

Reusability Evaluation Method Using Relations among Source
Code Files
Hikaru Fujiwara, Reishi Yokomori, Tetsuo Yamamoto,
Makoto Matsushita, Shinji Kusumoto and Katsuro Inoue
Graduate School of Engineering Science, Osaka University
1-3 Machikaneyama-cho, Toyonaka,
Osaka 560-8531, Japan
Reusing the software components that have high reusability improve the software productivity, quality
and cost. A lot of reusability metrics have been proposed. Most of them are based on the calculationof the static attributes of the software component. However, in practice, it is necessary to show quantitatively that the components with high reusability have actually reused in many software systems.
There may exist such software component that have low reusability based on the conventional metrics
but actually have reused in many software systems. This paper proposes the new reusability measurement method based on the following principles: (1)There exists use relationship among software
components, (2)Generally, the use relationships are changing as time goes by and some components
are reused in many software developments, (3) With the passing of enough time, the components thathave been reused by many other components have high reusability and ones that are reused by thecomponents with high reusability also have high reusability. Base on the proposed method, we havedeveloped reusability measurement system for Java programs and applied it to several Java programs.

-1-

1

まえがき

4

c

ソフトウェアの大規模化と複雑化に伴い，高品質なソフトウェアを一定期間内に効率良く開発することが重要になってきている．これを実現する
ために様々なソフトウェア工学技術が提案されてきている．再利用はそれらの中でも最も有効なものの一つである．
再利用は既存のソフトウェア部品を同一システ
ム内や他のシステムで用いることであると定義されている [5]．一般にソフトウェアの再利用は生産性と品質を改善し，結果としてコスト削減するといわれている．再利用の実際の効果を報告した論文も多く発表されている [4][10][13] ．
個々のソフトウェア部品の再利用性を評価する
方法はいろいろ提案されている．Etzkorn らは，レガシーソフトウェア中の部品 (C++のクラス) に対して，様々なメトリクス値を計算し，それらの値を正規化して足し合わせることで，再利用性とすることを提案した [7]．また、山本らは，ソースコー
ドが非開示なソフトウェア部品に対して，インタ
フェース部分の情報のみを用いて再利用性を評価する方法を提案している [18] ．これらの方法は全て，部品そのものの持つ静的な特性を計算して再利用性を評価するものとなっている．また，提案された再利用性の評価値の妥当性については，複数の部品に対して得られた再利用性の値の順位と実際のプログラマによる主観的な再利用性の評価の結果が似ているといった評価が行われている．
しかし，再利用性が高いということは，実際に多くのソフトウェア中に再利用されているという実績が定量的に示されることが必要である．主観的に再利用性が高いと判断されても，実際の利用実績がなければ意味がないという立場である．現
実には，従来手法では再利用性が低いと評価されても，多くのシステムで再利用されているという部品は多く存在すると考えられる．
そこで，利用実績に基づいたソフトウェア部品の再利用性評価手法について提案する．再利用性についての基本的な考え方は，以下の (1)〜(3) の通りである．(1) ソフトウェアを構成する部品間には相互に利用関係がある．(2) 一般に，時間が経過し，多くのプロジェクト開発で再利用などが行われるに連れて部品の利用関係は変化していく．(3)
十分な時間が経過した状態のもとで，被利用数が多い部品は重要である（再利用性が高い）．また，重要な部品から利用されている部品も重要である（再利用性が高い）．
このような評価手法は，様々な分野において採用されている．例えば，よく知られているサーチ
エンジン Google では，多くのページ良質なページからリンクされているページはやはり良質なページであるという再帰的な関係をもとに，あらゆるページの重要度を評価している [3, 15]．

1

c '

2

(a)

C5
C1

1

c

c

C4

5

c

2

c '

部品間の関係

c

C2

3
(b)

C3

部品群間の関係

図 1: 類似した部品群
この考え方に基づいて，評価手法を定義した．まず，評価対象のソフトウェア部品の集合に対して，それを構成する部品間の利用関係を抽出する．次に，各部品間で類似度が高い部品を集め，その部
品群を一つの部品とみなして，部品群同士の利用関係を抽出する．利用関係はそれぞれ再利用性評
価値の重みを持つ．部品の再利用性評価値は，その部品が利用される関係の重みの合計値となる．部
品の再利用性評価値を求める計算は，行列の固有値計算に帰着される．
提案する手法に基づいて，プログラミング言語
Java で開発されたソフトウェア群から再利用性を計測するシステムを開発し，幾つかのソフトウェ
アシステムにも適用した．
以降，2. では，本研究における再利用モデルの説
明と相対的再利用性について述べる．3. では，提案
手法「R3 法」の定義と計算方法について述べる．4.
では，相対的再利用性評価システム「R3 -System」の実装と Java ソースコードへの適用実験について述べる．

2

再利用性評価モデル

ここでは，再利用に基づくソフトウェア開発をモデル化し，部品間の相対的再利用性について説明する．

2.1 ソフトウェア部品
一般にソフトウェア部品 (Software Comopnent)
は再利用できるように設計された部品とされ，特に部品の内容を利用者が知る必要のないブラックボッ
クス再利用ができるものを指すこともある [11, 1]．
本論文ではより一般的に，ソースコードファイル
やバイナリファイル，ドキュメントなどの種類を問わず，開発者が再利用を行う単位をソフトウェ
ア部品，あるいは単に部品と呼ぶ．部品間には互いに利用する，利用されるという利用関係が存在する．
2.2 類似部品群
一般に，部品の集合には，コピーした部品や，コ
ピーして一部変更した部品が多く存在する．そこ
で，類似した部品をまとめることにより，部品の集合をいくつかの部品群に分類する．以降，類似した部品を集めた部品群を単に部品群と呼ぶ．
図 1 を例に説明する．図 1(a) は部品間の利用関係である．部品 c1 と c1 ，部品 c2 と c2 はそれぞれ-2-

3

類似した部品である．c3 , c4 , c5 には類似性はない．
部品 c2 は c1 を利用し，c2 , c3 は c1 を利用しているとする．また，c1 は c4 を，c1 は c5 をそれぞれ利用しているとする．
図 1(b) では，類似した部品をまとめて部品群としている．部品群に属する部品はそれぞれ
C1 = {c1 , c1 }, C2 = {c2 , c2 }, C3 = {c3 },C4 = {c4 }, C5 = {c5 } である．
ある部品群 Ci に属する部品が，他の部品群 Cjに属する部品を利用している場合，その 2 つの部
品群間には利用関係があるとする．
例えば，図 1 では，c1 と c1 を利用する関係は，
C1 を利用する関係としてまとめる．また，c1 と c1が利用している関係は，C1 が利用している関係としてまとめる．
上述した考えを用いる場合には，2 つの部品がどの程度類似しているか (類似度 (Similarity)) を定量的に評価する必要がある．そのために類似度を評価するメトリクスを利用する．まず，類似度に基づいてクラスタ分析を行い n 個の部品の集合を m(0 ≤ m ≤ n) 個の部品群に分ける．類似度は0 以上 1 以下の範囲に正規化され，値が高いほど部
品は良く類似しているとし，類似度 1 を完全に部品が一致した場合（コピーした部品）とする．基準となる類似度の閾値 t(0 ≤ t ≤ 1) を与え，部品群間の類似度が t 以下になるように分類する．

2.3

提案手法

3.1 概要ソフトウェア開発者が過去に開発されたソフト
ウェア部品を利用して新しいソフトウェアを開発する場合を想定する．一般に，開発者は過去に開発されたソフトウェア部品の中で，開発しようとしているソフトウェアに対して再利用性が高いと判断したものを利用する．ここで，開発者が部品を利用するということは，その部品に対して「再利用性が高い」という支持投票をしたとみなす．再利用によるソフトウェア開発が何度も繰り返されれば，再利用性の高い部品は何度も利用され，支持投票数が増加していく．逆に再利用性の低い部
品はあまり利用されず，したがって支持投票数は低い値に留まる．このときソフトウェア部品は獲得した票数に応じた再利用性の評価値を持つと考えられるので，以下の式が成り立つ．
(部品の評価値) = (部品への投票数)

相対的再利用性

個々の部品の再利用性を評価する手法は多く提案されている．Etzkorn らは, Modularity, Interface
Size, Documentation, Complexity の 4 つの視点からオブジェクト指向ソフトウェアの再利用性を評価する手法を提案している．彼らはソースコードから計測される複数のメトリクスを正規化して足し合わせることで再利用性のメトリクスとし，C++のソースコードに対して実際にプログラマが評価した再利用性とメトリクス値を比較している [7]．
また，山本らはソースコードが非開示な部品に対して，そのインターフェイスから再利用性を評価する手法を提案している．彼らは理解容易性，利用容易性，テスト容易性，可搬性の 4 つの視点か
ら再利用性メトリクスを定義し，JavaBeans を対象として実際にプログラマがアプリケーションを実装した結果とメトリクス値を比較している [18] ．
これらの方法は全て，部品の構造やインターフェ
イスなど部品そのものの持つ静的な特性を計算して再利用性を評価するものとなっている．
これに対し本論文では，その部品がどの程度利用されているかという実績に基づいた評価を行う
ことを目的とする．この再利用性は多数の部品間の利用関係から相対的に決まるものであり，部品の静的特性から決まる再利用性とは区別して「相対的再利用性 (Relative Reusability)」と呼ぶ．

-3-

このとき，単純に獲得票数を数えるだけでなく，どのような部品から利用されたかによって票に重みづけをする．多くの部品から利用されるような優秀な部品（優秀な部品の開発者）に利用されている部品は，再利用性が高いとみなして，同じ一票の支持投票でも，再利用性の評価値の高い部品から投票された場合と，評価値の低い部品から投票された場合では，前者の票の方がより高い重みを持つようにする．
また，ある部品が利用している部品の数も考慮する．ある部品 A が多数の部品を利用している場
合には，各利用部品が，A の機能に占める割合が少なくなるので，再利用性の評価は分散してしまうとみなす．つまり，ある部品が複数の部品に投票している時は，票の重みは各利用部品にある配分率をもって配分され，以下の式が成り立つ．
(票の重み)= (投票元の評価値) × (投票先に対する配分率)
このように，部品の集合において部品同士がお互いに再利用性を評価し，投票しあうことで決まっていく評価を「相対的再利用性 (Relative
Reusability)」と呼び，部品が獲得した票の重みの合計値を「相対的再利用性評価値（Value of Relative Reusability）」と呼ぶ．
実際に再利用を繰り返してソフトウェア開発を行う場合，新たに開発したソフトウェアが蓄積されていくため，部品の集合の要素数は増加し，利用関係は変化していく．相対的再利用性評価値は部品の集合における利用関係から求められるため，部品の集合の要素数や利用関係が変化すると，変化前の評価値と変化後の評価値では比較することができない．そこで，評価値そのものではなく，そ

C1

0.2

0.4

定義 1 分類の基準となる類似度の閾値を t(0 ≤t ≤ 1) とするとき，部品の集合 C を次の (1)(2) を満たすように分割した部分集合 C1 , C2 , ..., Cm を
類似部品群と呼ぶ．
(1) Ci に属するすべての部品について，類似
度は t 以上とする．

C2
0.2

0.2

0.4

C3

0.2

0.4

∀ck , cl ∈ Ci | s(ck , cl ) ≥ t

図 2: 再利用性評価の例の評価値による部品の順位に着目する．部品の集合の要素数や再利用関係が変化したときも，その変化前後の部品の順位の変動を見ることで，部品の相対的再利用性がどのように変化したのかを理解することができる．
2.2. で述べたように，実際の部品の集合には多数のコピーや類似部品が存在しているため，提案手法では部品群を部品の単位とし，部品群の相対的再利用性評価値による順位づけを行うことで評価を行う．この手法を「Relative Reusability Ranking
法 (R3 法)」と呼ぶ．
図 2 を例に説明する．C1 , C2 , C3 は部品群を表している．利用関係は利用する部品群から利用される部品群への矢印で表している．簡単のため，利用していない部品群への配分率は 0 としている．また，
利用している部品には均等に配分する．C1 , C2 , C3の評価値を v1 , v2 , v3 とし，評価値の総和が１となるようにしておく．このとき，図 2 の利用関係か
ら各部品群の評価値は v1 = 0.4, v2 = 0.2, v3 = 0.4となる．よって C1 , C3 は C2 よりも相対的再利用性が高いと評価される．

3.2 部品の分類
評価対象となる部品が n 個あるとし，それぞれ
c1 , c2 , ..., cn とする．
部品間には方向性を持つ利用関係があり，部品ci から cj への関係を r(ci , cj ) と表し，r(ci , cj )(2) 異なる集合間の類似度は t より低い．
すなわち，すべての i, j(1 ≤ i, j ≤ m) について次式が成り立つ．
S(Ci , Cj ) < t(i = j)(2)

C を m 個の類似部品群に分割し，それぞれC1 , C2 , ..., Cm とする．以降，類似部品群を単に部品群と呼ぶ．
部品群間には方向性を持つ利用関係があり，部品群 Ci から Cj への関係を R(Ci , Cj ) と表す．
定義 2 ci ∈ Ci , cj ∈ Cj とするとき，ある ci , cj について ci から cj への利用関係があれば，Ci からCj への利用関係があるとみなし，次式で表す．

R(Ci , Cj ) =if (∃ci , cj |r(ci , cj ))then trueelse false すなわち， (3)3.3 相対的再利用性評価値の定義
部品群は相対的再利用性評価値を持つとし，部品群 Ci の相対的再利用性評価値を vi と表す．また，Ci から Cj への利用関係の重みを wij と表す．
定義 3 部品群 Ci の相対的再利用性評価値は，部品群 Ci への利用関係の重み wji の総和である．

vi == if (ci は cj を利用している)
then true
else

(1)

m


wji

(4)

j=1

部品群 Ci から部品群 Cj への重みの配分率 (Distribution Ratio) を dij (0 ≤ dij ≤ 1) と表す．

false

とする．
部品間の類似度を s(ci , cj ) と表す．類似度は 0 ≤s(ci , cj ) ≤ 1 に正規化されているとする．
評価対象となる部品全体の集合を定義 4 部品群 Ci から Cj への利用関係の重み wij
は，Ci の相対的再利用性評価値を配分率 dij で配分した値である．

C = {c1 , c2 , ..., cn}

wij = vi dij(5)

定義 5 部品群 Ci の相対的再利用性評価値はすべての部品 Cj (1 ≤ j ≤ m) に配分される．

と表す．部品間の類似度 s に基づいて部品の集合間の類似度が決まるとし，部品の集合 Ci , Cj の類似度
を S(Ci , Cj ) と表す．類似度は 0 ≤ S(Ci , Cj ) ≤ 1に正規化されているとする．

m

j=1

-4-

dij = 1

(6)

価の投票はこの楕円内に蓄積され，全体へ評価が循環しないことになる．本提案手法では，部品の集合における票の偏りを分析することで相対的再利用性を評価しているため，部品の集合全体に票が循環しなければ正しい評価を行なうことができない．そこで，部品群を利用しない場合には，非常に低い重みの票を投票すると考える．
補正 2 部品群のもつ評価値のうち p(0 < p < 1)は利用した部品群にのみ配分し，(1 − p) はすべての部品に配分する．もとの配分率を dij ，修正後の配分率を dij とし，以下のように配分率を修正する．
1dij = pdij + (1 − p)
(9)m

3.5 評価値の計算方法
ここでは，実際に相対的再利用性評価値を求める方法を説明する．
定義 3, 4 より，次式が成り立つ．

図 3: 評価が全体に循環しない場合
定義 6 利用している部品群への配分率は，利用していない部品群への配分率より高い．すなわち，R(Ci , Cj ) = true, R(Ci , Ck ) = false のとき，

dij > dik

vi =

(7)

(10)

これを vi (i = 1, 2, ..., m) のすべてについて解
けば，すべての部品群の評価値を求めることがで
きる．
すなわち，

v1
v2

=

=

m

j=1
m


vj dj1
vj dj2

j=1

..
.
vm

=

m


vj djm(11)

j=1の m 個の連立方程式を解けば良い．
これを行列の記法で表す．
m 個の部品群の評価値を表す m 次元列ベクトルを V とする．

補正 1 部品群 Ci がどの部品群も利用していない
場合，すべての j について1m

vj djij=1とする．
3.4 補正前節までで定義した相対的再利用性評価値を実際のソフトウェア部品にそのまま適用するといく
つかの問題が生じるため，若干の補正が必要となる．以下ではその問題点と対策を説明する．
3.4.1 利用していない部品に対する評価
一般に，ソフトウェア開発においては，他の部品を一つも利用せずに開発した部品も存在する．
ある部品群 Ci が他のどの部品も利用していない
場合，Ci はどの部品に対しても投票を行っていな
いことになる．したがってどの部品にも評価値を配分できないと考えて di0 , di1 , di2, ..., din をすべて0 とすると，定義 5 を満たさないことになる．そこで，どの部品にも投票しない場合は「再利用性が非常に低い」という評価をすべての部品に対して投票したと解釈する．

dij =

m


V = (v1 , v2 , ..., vm)t(8)

(t は転置を表す)

また，Ci から Cj への配分率を表す m × m 行列
を D とする．

とする．
3.4.2 評価が全体に循環しない場合
図 3 を例に説明する．ここで，四角は部品群を，矢印は利用関係を表している．図 3 上部では，楕
円内の部品群に入る矢印は存在するが，楕円から出ていく矢印は存在しない．従って，再利用性評

d11
 d21
D=
 ..
.

d12
d22
..
.

...
...
..
.


d1m
d2m 
.. 

.

dm1

dm2

...

dmm



-5-

表 1: Java への適用
3

R 法のモデル
部品
類似度
利用関係

検索キー

Java
Java ソースファイル
Sline
継承，実装，呼出Java

検索システム

ファイル間の関係
抽出部

SMMT（一致したファイル）
検索結果の
順位付け

ファイル (N個)（NC2の類似度）

クラスタ分析
ツール（M個の部品群）（N×N行列）部品群間の関係
抽出部（M個の部品群）
部品群の順位
→ファイルの順位

このとき連立方程式 (11) はV = Dt V

表示(12)

N個のファイルの順位と表される．
式 (12) を満たすようなベクトル V は行列 Dt の固有値 λ = 1 の固有ベクトルである．
よって配分率の行列の固有ベクトルを求めることで，相対的再利用性評価値を決定することができる．

4（M×M行列）相対的再利用性
計算部
部品群の評価値（M次元ベクトル）

図 4: R3 システムの構成図
表 2: JDK-1.3.0 への適用結果
順位
1
2
3
4
5
6
7
8
9
10
..
.
1256

再利用性評価システム

4.1 概要提案した再利用性評価モデルに基づいて，Java
ソースコードを対象に相対的再利用性評価システム「R3 -System」を実装した．R3 法を Java に適用する際の，モデルと Java の概念との対応を表 1 に示
す．Java はオブジェクト指向言語であり，クラス単位での利用が行いやすい．また，原則として 1 つのソースファイルには 1 つのクラスを記述する．そこ
で，Java ソースコードファイルを部品の単位とし，R3 法を適用する．クラスの継承，インターフェー
スおよび抽象クラスの実装，メソッドの呼びだしを利用関係とみなす．また，部品間の類似度を評価するメトリクスとして文献 [17] で提案されている，「Sline 」を用いる [17] ．Sline は 2 つのソースコー
ドファイル間で一致する行の割合で類似度を計測する手法である．Sline をソースコードファイルから計測するシステム「SMMT(Similarity Metrics
Mesuring Tool)」も開発されており，本システム
では SMMT を用いて類似度を算出する．
4.2 システムの構成
R3 -System の構成図を図 4 に示す．N 個の Java
ソースコードファイルを相対的再利用性の評価対象とする．
ファイル間の関係抽出部 Java ソースコードファ
イルを解析し，クラス間の継承，インターフェ
イスと抽象クラスの実装，メソッドの呼びだしを利用関係として抽出する．Java ソースコードの構文解析には，ANTLR[2] を利用している．
SMMT Java ソースコードファイル間の類似度
Sline を算出する．
クラスタ分析ツール SMMT で得られた類似度をもとにクラスタ分析を行い，ファイルの集合を
M 個の部品群に分類する．クラスタ分析においては，分類の基準となる閾値 t をパラメータとして与える (定義 1)．

1256
..
.
1256
1256

クラス名
java.lang.Object
java.lang.Class
java.lang.Throwable
java.lang.Exception
java.io.IOException
java.lang.StringBuﬀer
java.lang.SecurityManager
java.io.InputStream
java.lang.reﬂect.Field
java.lang.reﬂect.Constructor..
.
com.sun.image.codec.jpeg.
TruncatedFileException
sunw.util.EventObject..
.
sunw.io.Serializable
sunw.util.EventListener

評価値
0.161260.087120.055100.03103
0.013430.012140.011690.010270.009480.00936..
.

0.000110.00011..
.
0.000110.00011

部品群間の関係抽出部 クラスタ分析ツールとファイル間の関係抽出部の結果から，部品群間の関係を抽出する．
相対的再利用性計算部 部品群間の関係から，R3法で部品群の相対的再利用性評価値による順位づけを行う．なお，行列の固有値計算には，Javaで行列演算を行うパッケージ JAMA[12] を利用している．
部品群順位→ファイル順位変換部 部品群の相対的再利用性順位を，ファイルの順位に変換する．
検索システム 検索キーが入力され，検索キーに一致する部分を持つソースコードファイルを返す．
検索結果の順位づけ部 相対的再利用性の順位をもとに，検索結果を順位づけして表示する．

4.3 適用例
本提案手法では，3. で説明したように再利用性
評価値の順位によって各部品の相対的再利用性を評価している．そこで，部品の順位が利用実績を-6-

反映していることを示すために，実際のソフトウェ
ア部品に対して R3 法を適用する実験を行った．
実際に Java ソースコードに R3 システムを適用した場合の適用例を以下に示す．評価対象として
JDK-1.3.0 と我々の研究室内で開発された複数のJava アプリケーションの２つを選んだ．調整パラメータとして，定義 1 で述べたクラスタ分析における分類の閾値を s = 0.80 ，補正 2 で述べた票の重みの比率を p = 0.85 とした．
4.3.1 JDK-1.3.0 への適用
ここでは，評価対象として Sun Microsystems[16] から配布されている Java 2 Software Development Kit, Standard Edition 1.3.0 (以下 JDK) のソースコード (1877 ファイル) を対象とした．JDKへ適用して得られた結果の一部を表 2 に示す．
JDK は Java の基本パッケージであり，Java でアプリケーションを開発するときには JDK が必要となる．相対的再利用性の上位 10 クラスについて見てみると，Object, Class, Throwable など，Javaの言語仕様 [8, 9] で利用しなければならないクラスが大半を占めている．Java 言語仕様によれば，
java.lang.Object クラスはすべてのクラスのスーパークラスである．したがってすべてのクラスから利用されていることになり，相対的再利用性が 1位となっている．また，java.lang.Class クラスは実
行中のクラスおよびインターフェイスを表すクラスで，このクラスを直接継承するようなクラスはないが，実行時のオブジェクト型の情報を取得するために頻繁に呼び出される．java.lang.Throwable
クラスはすべてのエラーと例外のスーパークラス
であり，したがって例外やエラーを扱うクラスはすべてこのクラスを間接的に利用していることになる．このように，実際に直接的，間接的に利用される回数の多いクラスが上位を占めている．
最下位は 1256 位で，該当するクラスは 622 あった．これらのクラスは，どのクラスにも利用されていない．
4.3.2 研究室内ソースコードへの適用
ここでは研究室内で過去に開発された Java ア
プリケーションのソースコードを適用対象とした(582 ファイル)．
適用対象について簡単に説明する．
C-K メトリクス計測ツール 1 Java ソースコー
ドから C-K メトリクス [6] を計測するツール．パッケージ名は cktool．(29 ファイル) ANTLR[2]を使用してソースコードの構文解析を行っている．
C-K メトリクス計測ツール 2 上のツールを若干修正したもの．上と同じく ANTLR を用いている．パッケージ名は cktool new．(29 ファイル)
R3 -System 本論文で作成した R3 -System．ソー
スコードの構文解析には ANTLR を使用している．また，行列計算には JAMA[12] を使用

表 3: 研究室内ソースコードへの適用結果

順位
1
2
2
4
5

6
7
8
8
10
..
.
418
418
..
.
418
418

クラス名
antlr.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.IdentiﬁerInfo..
.
jp.gr.java conf.keisuken.
util.PropertiesSerializer
cktool new.examples.Main..
.
cktool new.examples.WriteLog
cktool.examples.WriteLog

評価値
0.10727
0.06189
0.061890.05434

0.05246
0.03699
0.015640.013900.013900.01365..
.
0.000500.00050..
.
0.000500.00050している. そのほか Caﬀe Cappuccino Class
Library[14] というライブラリも使用している．
パッケージ名は
jp.ac.osaka u.es.ics.iip lab.metrics．(68 ファイ
ル)
使用パッケージのソース ANTLR(パッケージ名
antlr, 188 ファイ ル), JAMA(パッケ ー ジ 名
Jama, 9 ファイル), Caﬀe Cappuccino Class
Library(パッケージ名 jp.gr.java conf.keisuken,
245 ファイル) のソースコードも適用対象とした．
その他 (14 ファイル)
適用結果を表 3 に示す．
研究室内で作成されたアプリケーションよりも，利用したパッケージの方が上位に来る傾向が見られる．また，主に機能を提供するようなクラスよりも，データを格納するようなクラスの方が高く評価される傾向にある．全体的に複数のアプリケー
ションで共通に使用されている ANTLR のクラスが高く評価されている傾向にある．
これらの結果から，相対的再利用性評価値による順位づけは，実際の利用実績の傾向を反映していると考えられる．

5

まとめ

本論文では，ソフトウェア部品の相対的再利用性を定義し，その評価方法として R3 法を提案した．実際に R3 法に基づいて相対的再利用性を評価-7-

するシステム R3 -System を実装し，JDK のソー
スコードファイルに対して適用した．適用結果では，実際に利用されている回数の多いクラスが上位を占め，本手法の有効性が確認された．
再利用によるソフトウェア開発において，多くのソフトウェア部品の中から開発者が本当に必要としているものを見つけ出すのは困難な作業であるが，再利用する部品を選択する基準として R3 法
を用いることで開発者の負担を軽減できると考えられる．
今後の課題としては，さらに多くの部品への R3 System の適用，Java ソースファイルにおける継承，実装，メソッド呼びだしの各関係の重みづけの検討，部品検索システムの検討と実装，2.2 で述
べたクラスタ分析における分類の閾値 s と，3.4.2
で述べた票の重みの比率を p のパラメータの調整などが挙げられる．

Edition”, Sun Microsystems,
http://java.sun.com/docs/books/jls/
second edition/html/j.title.doc.html[9] J. ゴズリン, B. ジョイ, G. スティール, G. ブ
ラーハ, 村上 (訳): Java 言語仕様 第 2 版, ピ
アソン・エデュケーション, (2000).
[10] S. Isoda: “Experience report on a software
reuse project: Its structure, activities, andstatistical results”, Proc. of ICSE14, pp.320326 (1992).
[11] I. Jacobson, M. Griss and P. Jonsson: Software Reuse, Addison Wesley, (1997).
[12] “JAMA : A Java Matrix Package”,
http://math.nist.gov/javanumerics/jama/[13] B. Keepence and M. Mannion: “Using patterns to model variability in product families”, IEEE Software, Vol. 16, No. 4, pp.
102-108 (1999).

謝辞 本研究は，平成 13 年度科学技術振興事業団
計算科学技術活用型特定研究開発推進事業 (ACTJST) の支援を受けている．

参考文献[14] 西本: “Java 言語について”,
http://cappuccino.ne.jp/keisuken/java/[1] 青山, 中所, 向山: コンポーネントウェア, 共
立出版, (1998).

[15] L. Page, S. Brin, R. Motwani, T. Winograd: “The PageRank Citation Ranking:
Bringing Order to the Web”, http://wwwdb.stanford.edu/ backrub/pageranksub.ps[2] “ANTLR Website”, http://www.antlr.org/[3] 馬場: “Google の秘密 - PageRank 徹底解説”, http://www.kusastro.kyoto-u.ac.jp/baba/wais/pagerank.htm[16] “The Source For Java(TM) Technology”,
Sun Microsystems, http://java.sun.com/[4] V. R. Basili, G. Caldiera, F. McGarry,
R. Pajerski, G. Page and S. Waligora:“The software engineering laboratory - anoperational software experience”, Proc. of
ICSE14, pp. 370-381 (1992).

[17] 山本, 松下, 神谷, 井上: “ソフトウェアシステ
ムの類似度とその計測ツール SMMT”, 電子
情報通信学会論文誌 D-I(採録決定).
“再 利用 特性 に基 づ
[18] 山 本, 鷲 崎, 深 澤:くコンポーネントメトリクスの提案と検証”, ソフトウェア工学の基礎ワークショッ
プ (FOSE2001), (2001).

[5] C. Braun: Reuse, in John J. Marciniak, editor, Encyclopedia of Software Engineering,Vol. 2, John Wiley & Sons, pp. 1055-1069(1994).
[6] S. R. Chidamber and C. F. Kemerer: “A
metrics suite for object-oriented design”,
IEEE Trans. on Software Eng., Vol.20, No.6,
pp.476-493 (1994).
[7] L. H. Etzkorn, W. E. Huges Jr., C. G. Davis:“Automated reusability quality analysis of
OO legacy software”, Information and Software Technology, Vol. 43, Issue 5, pp. 295308 (2001).
[8] J. Gosling, B. Joy, G. Steele and G. Bracha:“The Java Language Spwciﬁcation Second-8-