Software Symposium 2002

ソフトウェア部品間の利用関係を用いた再利用性評価手法の提案
横森 励士
大阪大学大学院基礎工学研究科
yokomori@ics.es.osaka-u.ac.jp
山本 哲男
大阪大学大学院基礎工学研究科
t-yamamt@ics.es.osaka-u.ac.jp
楠本 真二
大阪大学大学院基礎工学研究科
kusumoto@ics.es.osaka-u.ac.jp

藤原 晃
大阪大学大学院基礎工学研究科
h-fujiwr@ics.es.osaka-u.ac.jp
松下 誠
大阪大学大学院基礎工学研究科
matusita@ics.es.osaka-u.ac.jp
井上 克郎
大阪大学大学院基礎工学研究科
inoue@ics.es.osaka-u.ac.jp

Abstract

1. まえがき

再利用性の高いソフトウェア部品を再利用することで，生産性と品質を改善し，結果としてコストを削減できる．
ソフトウェア部品の再利用性を評価する方法はこれまでに数多く提案されているが，その方法は全て，部品そのものの持つ静的な特性を計算して再利用性を評価するものである．しかし，現実に存在する部品に関しては，実際に多くのソフトウェア中に再利用されているという実績に基づいて再利用性を定量的に評価することが必要である．現実には，従来手法では再利用性が低いと評価されても，多くのシステムで再利用されているという部品は多く存在すると考えられる．
そこで，本論文では，利用実績に基づいたソフトウェア
部品の再利用性評価手法について提案する．再利用性についての基本的な考え方は，以下の (1)∼(3) である．(1)ソフトウェアを構成する部品間には相互に利用関係がある，(2) 一般に，時間が経過して多くのプロジェクト開発
で再利用などが行われるに連れて部品の利用関係は変化していく，(3) 十分な時間が経過した状態のもとで，被利用数が多い部品は再利用性が高く，再利用性が高い部品から利用されている部品も再利用性が高い．
提案する手法に基づいて，プログラミング言語 Java で開発されたソフトウェア群から再利用性を計測するシス
テムを開発し，適用実験を行う．適用実験では，幾つかのソフトウェアシステムに適用し，本手法の有効性の検証，類似部品群を形成する際の閾値と相対的再利用性評
価値との関係の検証を行う．実験結果では，実際に利用されている回数の多いクラスが上位を占め，本手法の有効性が確認された．

ソフトウェアの大規模化と複雑化に伴い，高品質なソフ
トウェアを一定期間内に効率良く開発することが重要になってきている．これを実現するために様々な手法が提案されてきている．再利用はそれらの中でも最も有効なものの一つである．
再利用は既存のソフトウェア部品を同一システム内や他のシステムで用いることであると定義されている [5]．一
般にソフトウェアの再利用は生産性と品質を改善し，結果としてコストを削減するといわれている．再利用を実際に用いる事でコストを削減する事ができた事例の報告も行われている [4][9][13]．
個々のソフトウェア部品の再利用性を評価する方法はいろいろ提案されている．Etzkorn らは，レガシーソフト
ウェア中の部品 (C++のクラス) に対して，様々なメトリ
クス値を計算し，それらの値を正規化して足し合わせる
ことで，再利用性とすることを提案した [7]．また，山本らは，ソースコードが非開示なソフトウェア部品に対して，インタフェース部分の情報のみを用いて再利用性を評価する方法を提案している [19]．これらの方法は全て，部品そのものの持つ静的な特性を計算して再利用性を評価するものとなっている．また，提案された再利用性の評価値の妥当性については，複数の部品に対して得られた再利用性の値の順位と実際のプログラマによる主観的な再利用性の評価の結果が似ているといった評価が行われている．
しかし，現実に存在する部品に関しては，実際に多くのソフトウェア中に再利用されているという実績に基づいて再利用性を定量的に評価することが必要である．つまり，静的な特性や主観的な評価から再利用性が高いと判-216-

Software Symposium 2002
断されても，実際の利用実績がなければ意味がないという立場である．現実には，従来手法では再利用性が低いと評価されても，多くのシステムで再利用されている部品は数多く存在すると考えられる．

1

c '

2

(a)

C4

5

C5
C1

1

c

2

c '

部品間の関係

c

C2

3
(b)

C3

部品群間の関係

図 1. 類似した部品群

2. 再利用性評価モデル

このような実績に基づいた評価手法は，様々な分野において採用されている．例えば，計量社会学において，多くの論文誌に引用される論文誌は重要である，重要な論文誌に引用される論文誌はまた重要であるという再帰的な関係をもとに，各学術論文誌の重要度（Influence
Weight ）を評価する手法が提案されている [15]．また，
サーチエンジン Google では，多くのページ良質なペー
ジからリンクされているページはやはり良質なページであるという再帰的な関係をもとに，あらゆるページの重要度（PageRank）を評価し，その結果に基づいて検索結果を表示している [3, 16]．
我々が提案する利用実績に基づいたソフトウェア部品の再利用性評価手法では，まず，評価対象のソフトウェア
部品の集合に対して，それを構成する部品間の利用関係を抽出する．次に，各部品間で類似度が高い部品を集め，その部品群を一つの部品とみなして，部品群同士の利用関係を抽出する．この部品群同士の利用関係に基づいて，各部品群の再利用性評価値を求める．各部品群はそれぞれ再利用性評価値の重みを持ち，その評価値の重みに基づいて各部品群間の利用関係の重みが定義される．各部品群の再利用性評価値は，その部品群が利用される関係の重みの合計値となる．部品群の再利用性評価値を求める計算は，部品群間の利用関係を行列として定義する事
で，行列の固有ベクトル計算に帰着される．部品群における再利用性評価値をもとに部品における再利用性評価
値を決定する．

以降，2 節では，本研究における再利用モデルの説明と相対的再利用性について述べる．3 節では，提案手法「R3法」の定義と計算方法について述べる．4 節では，相対的再利用性評価システム「R3 -System」の実装と Java ソー
スコードへの適用実験について述べる．5 節では，R3 法の利用方法として，ソフトウェア部品検索への応用について述べる．

cc

そこで，本論文では，利用実績に基づいたソフトウェア
部品の再利用性評価手法について提案する．再利用性についての基本的な考え方は，以下の (1)〜(3) の通りである．(1) ソフトウェアを構成する部品間には相互に利用関係がある．(2) 一般に，時間が経過し，多くのプロジェクト開発で再利用などが行われるにつれて部品の利用関係は変化していく．(3) 十分な時間が経過した状態のもとで，被利用数が多い部品は重要である（再利用性が高い）．また，重要な部品から利用されている部品も重要である．

提案する手法に基づいて，プログラミング言語 Java で開発されたソフトウェア群から再利用性を計測するシス
テムを開発し，幾つかのソフトウェアシステムにも適用
した．

4

c

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

2.1. ソフトウェア部品
一般にソフトウェア部品 (Software Comopnent) は再利用できるように設計された部品とされ，特に部品の内容を利用者が知る必要のないブラックボックス再利用ができるものを指すこともある [1, 10]．本論文ではより一般的に，ソースコードファイルやバイナリファイル，ドキュ
メントなどの種類を問わず，開発者が再利用を行う単位
をソフトウェア部品，あるいは単に部品と呼ぶ．これらの部品間には互いに利用する，利用されるという利用関係が存在する．

2.2. 類似部品群
一般に，部品の集合には，コピーした部品や，コピーして一部を変更しただけの部品が数多く存在する．これらの部品を別々に扱ってしまうと，利用関係を正しく把握することができなくなる．コピーした部品間に存在する利用関係を把握する必要があるが，コピー元の特定は難
しく，利用関係として定義するのは難しい．そこで，類似した部品をまとめることにより，部品の集合をいくつかの部品群に分類する．以降，類似した部品を集めた部品群を単に部品群と呼ぶ．
図 1 を例に説明する．図 1(a) は部品間の利用関係である．部品 c1 と c1 ，部品 c2 と c2 はそれぞれ類似した部品である．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 つの部品群間 Ci ，Cj-217-

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

て再利用性が高いと判断したものを用いると思われる．
提案手法においては，この行為を新しいソフトウェア部
品上における，過去に開発された部品への再利用性に関する支持投票と定義する．再利用によるソフトウェア開発が何度も繰り返されれば，再利用性の高い部品は何度も利用され，支持投票数が増加する．逆に再利用性の低い部品はあまり利用されず，したがって支持投票数は低い値に留まる．また，十分な時間が経過した状態で部品間の利用関係はある形に収束すると仮定する．このときソフトウェア部品は獲得した票数に応じた再利用性の評価値を持つと考えられるので，以下の式が成り立つ．

(部品の評価値) = (部品への投票数)

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

このとき，単純に獲得票数を数えるだけでなく，どのような部品から利用されたかによって票に重みづけをする．
多くの部品から利用されるような優秀な部品（優秀な部品の開発者）に利用されている部品は，再利用性が高いとみなして，同じ一票の支持投票でも，再利用性の評価
値の高い部品から投票された場合と，評価値の低い部品から投票された場合では，前者の票の方がより高い重みを持つようにする．
また，ある部品が利用している部品の数も考慮する．ある部品 A が多数の部品を利用している場合，A の各機能に占める各利用部品の割合が少なくなるので，再利用性の評価は分散してしまうとみなす．つまり，ある部品が複数の部品に投票している時は，票の重みは各利用部品にある配分率をもって配分され，以下の式が成り立つ．

(票の重み)= (投票元の評価値) × (投票先に対する配分率)
このように，部品の集合において部品同士がお互いに再利用性を評価し，投票しあうことで決まっていく評価を「相対的再利用性 (Relative Reusability) 」と呼び，部品が獲得した票の重みの合計値を「相対的再利用性評価値（Value of Relative Reusability ）」と呼ぶ．
実際に再利用を繰り返してソフトウェア開発を行う場合，新たに開発したソフトウェアが蓄積されていくため，部品の集合の要素数は単調増加し，利用関係は変化していく．相対的再利用性評価値は部品の集合における利用関係から相対的に求められる．そのため，部品の集合の要素数や利用関係が変化した場合に各部品の変化前後の評
価値を直接比較してもあまり意味がない．

3.1. 概要

そこで，評価値そのものではなく，その評価値による部品の順位に着目する．部品の集合の要素数や再利用関係が変化したときも，その変化前後の部品の順位の変動を見ることで，部品の相対的再利用性がどのように変化したのかを理解することができる．

ソフトウェア開発者が，過去に開発されたソフトウェア
部品を用いて新しいソフトウェアを開発する場合を想定する．一般に，開発者は過去に開発されたソフトウェア
部品の中で，開発しようとしているソフトウェアに対し

2.2 節で述べたように，実際の部品の集合には多数のコ
ピーや類似部品が存在しているため，提案手法では部品群を部品の単位とし，部品群の相対的再利用性評価
値による順位づけを行うことで評価を行う．この手法を「Relative Reusability Ranking 法 (R3 法)」と呼ぶ．

3. 提案手法-218-217-216-

Software Symposium 2002

C1

0.2

0.4

間には方向性を持つ利用関係があり，部品群 Ci から Cjへの関係を R(Ci , Cj ) と表す．

C2
0.2

定義 2 ck ∈ Ci , cl ∈ Cj とするとき，ある ck , cl について ck から cl への利用関係があれば，Ci から Cj への利用関係があるとみなし，次式で表す．

0.2

0.4

C3

0.2

R(Ci , Cj )0.4

図 2. 再利用性評価の例

if (∃ck , cl |r(ck , cl ))then trueelse false(3)

3.3. 相対的再利用性評価値の定義

図 2 を例に説明する．C1 , C2 , C3 は部品群を表している．利用関係は利用する部品群から利用される部品群への矢印で表している．簡単のため，利用していない部品群への配分率は 0 としている．また，利用している部品には均等に配分する．C1 , C2 , C3 の評価値を v1 , v2 , v3 とし，評価値の総和が１となるように定義する．このとき，
図 2 の利用関係から各部品群の評価値は v1 = 0.4, v2 =0.2, v3 = 0.4 となる．よって C1 , C3 は C2 よりも相対的再利用性が高いと評価される．

ここでは，相対的再利用性評価値について説明する．部品群 Ci の持つ相対的再利用性評価値を vi と表し，Ci から Cj への利用関係の重みを wij と表す．また，部品 ckの相対的再利用性評価値を vck とする．
定義 3 部品群 Ci に属する部品 ck の相対的再利用性評
価値 vck は vi とする．つまり，同一部品群に含まれる類
似した部品は同一評価値を持つ．

∀ck ∈ Ci |vck = vi

3.2. 部品の分類
評 価 対 象 と な る 部 品 が n 個 あ る と し ，そ れ ぞ れ
c1 , c2 , ..., cn とする．部品間には方向性を持つ利用関係があり，部品 ci から cj への関係を r(ci , cj ) と表したとき，r(ci , cj )== if (ci は cj を利用している)
then trueelse false(4)

定義 4 部品群 Ci の相対的再利用性評価値は，部品群 Ciへの利用関係の重み wji の総和である．

vi =

m


wji

(5)

j=1

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

と定義する．
また，部品間の類似度を s(ci , cj ) と表す．類似度は 0 ≤s(ci , cj ) ≤ 1 に正規化されているとする．ここで，類似部品群を次のように定義する．

定義 5 部品群 Ci から Cj への利用関係の重み wij は，
Ci の相対的再利用性評価値を配分率 dij で配分した値である．

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

wij = vi dij(1) Ci に属するすべての部品について，類似度は t 以
上であるような部品が同一部品群に存在する．
∀ck ∈ Ci | ∃cl ∈ Ci | s(ck , cl ) ≥ t∀ck ∈ Ci , ∀cl ∈ Cj | s(ck , cl ) < t

定義 6 それぞれの部品群において，その部品群からの相対的再利用性評価値の配分率の和は 1 とする．
m


(1)

(2) 異なる集合間の類似度は t より低い．
すなわち，すべての相異なる i, j(1 ≤ i, j ≤ m) について次式が成り立つ．
(2)

dij = 1(7)

j=1

定義 7 利用している部品群への配分率は，利用していない部品群への配分率より高い．すなわち，R(Ci , Cj ) = true, R(Ci , Ck ) = false のとき，

dij > dikC を m 個の類似部品群に分割し，それぞれ C1 , C2, ..., Cmとする．以降，類似部品群を単に部品群と呼ぶ．部品群

(6)

とする．

-219-

(8)

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

vi =

m


vj dji(9)

j=1

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


=

v1

j=1
m


=

v2

vj dj1
図 3. 評価が全体に循環しない場合

vj dj2

3.5.1 利用していない部品に対する評価

j=1

..
.

m


=

vm

一般に，ソフトウェア開発においては，他の部品を一つも利用せずに開発した部品も存在する．

vj djm(10)

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

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

(t は転置を表す)

また，Ci から Cj への配分率を表す m × m 行列を D とする．
d11 d12 ... d1m d21 d22 ... d2m 

D= .
..
.. 
..

.
 ..
.
. 

dm1

dm2

...

dmm

ある部品群 Ci が他のどの部品も利用していない場合，
Ci はどの部品に対しても投票を行っていないことになる．したがってどの部品にも評価値を配分できないと考えて di0 , di1 , di2, ..., din をすべて 0 とすると，定義 6 を満たさないことになる．そこで，どの部品にも投票しない場合は「再利用性が非常に低い」という評価をすべての部品に対して投票したと解釈する．
補正 1 部品群 Ci がどの部品群も利用していない場合，すべての j について

dij =

1
m

(12)

とする．

このとき連立方程式 (10) はV = Dt V(11)と表される．
このとき，行列 Dt における固有値 λ = 1 に対応する固有ベクトルを V とすると，V は式 (11) を満たす．この固有ベクトル V を求めることで，相対的再利用性評価
値を決定することができる．

3.5. 補正
前節までで定義した相対的再利用性評価値を実際のソフ
トウェア部品にそのまま適用すると，いくつかの問題が生じるため若干の補正が必要となる．以下ではその問題
点と対策を説明する．

3.5.2 評価が全体に循環しない場合
図 3 を例に説明する．ここで，四角は部品群を，矢印は利用関係を表している．図 3 上部では，楕円内の部品群に入る矢印は存在するが，楕円から出ていく矢印は存在しない．従って，再利用性評価の投票はこの楕円内に蓄積され，全体へ評価が循環しないことになる．本提案手法では，部品の集合における票の偏りを分析することで相対的再利用性を評価しているため，部品の集合全体に票が循環しなければ正しい評価を行なうことができない．
そこで，部品群を利用しない場合には，非常に低い重みの票を投票すると考える．
補正 2 部品群のもつ評価値のうち p(0 < p < 1) は利用した部品群にのみ配分し，(1 − p) はすべての部品に配-220-

Software Symposium 2002
分する．もとの配分率を dij ，修正後の配分率を dij とし，以下のように配分率を修正する．

1dij = pdij + (1 − p)m.java Files (N

(13)

)

SMMT

（NC2の類似度）
クラスタ分析
ツール（M個のクラスタ）（M個のクラスタ）
クラスタのRank→ファイルのRank
クラスタのRank（M次元ベクトル）

4. 再利用性評価システム
提案した再利用性評価モデルに基づいて，Java ソー
スコードを対象に相対的再利用性評価システム「R3 System」を実装した．R3 法を Java に適用する際の，モデルと Java の概念との対応を以下に示す．
部品個

ファイル間の関係
抽出部（N×N行列）クラスタ間の関係
抽出部（M×M行列）PageRank
計算部

N個のファイルのRank

Java はオブジェクト指向言語であり，クラス単位での利用が行いやすい．また，原則として 1 つのソースファイルには 1 つのクラスを記述する．そこ
で，Java ソースコードファイルを部品の単位とする．

利用関係
部品間の利用関係をクラスの継承，インターフェースおよび抽象クラスの実装，メソッドの呼びだしとする．
類似度
部品間の類似度を評価するメトリクスとして文献 [18] で提案されている，「Sline 」を用いる．
Sline は 2 つのソースコードファイル間で一致す
る行の割合で，2 つのファイル間の類似度を表す．
「SMMT(Similarity Metrics Mesuring Tool)」[18] はSline をソースコードファイルから計測するシステ
ムである．

4.1. システムの構成

図 4. R3 システムの構成図

M 個の部品群の相
部品群順位→ファイル順位変換部
対的再利用性順位を，N 個の Java ソースコードファ
イルの順位に変換する．

4.2. 適用例
本提案手法では，3 節で説明したように再利用性評価値の順位によって各部品の相対的再利用性を評価している．
そこで，部品の順位が利用実績を反映していることを示すために，実際のソフトウェア部品に対して R3 法を適用する実験を行った．
実際に Java ソースコードに R3 システムを適用した場合の適用例を以下に示す．評価対象として，JDK-1.3.0 と我々の研究室内で開発された複数の Java アプリケーショ
ンの２つを選んだ．調整パラメータとして，定義 1 で述
べたクラスタ分析における分類の閾値を t = 0.80 ，補正
2 で述べた票の重みの比率を p = 0.85 とした．

R3 -System の構成図を図 4 に示す．ここでは，N 個のJava ソースコードファイルを相対的再利用性の評価対象とした場合について述べる．
ファイル間の関係抽出部
N 個の Java ソースコード
ファイルを解析し，利用関係を抽出する．Java ソース
コードの構文解析には，ANTLR[2] を利用している．

SMMT SMMT を用いて，Java ソースコードファイル間の類似度 Sline を算出する．

4.2.1 JDK-1.3.0 への適用
ここでは，評価対象として Sun Microsystems [17] から配布されている Java 2 Software Development Kit, Standard
Edition 1.3.0 (以下 JDK) のソースコード (1877 ファイル)を対象とした．JDK へ適用して得られた結果の一部を表1 に示す．

SMMT で得られた類似度をもとクラスタ分析ツールにクラスタ分析を行い，N 個の Java ソースコード
ファイルを M 個の部品群に分類する．クラスタ分
析においては，分類の基準となる閾値 t をパラメータとして与える (定義 1)．
部品群間の関係抽出部
クラスタ分析ツールの結果とファイル間の関係抽出部の結果（部品間の関係）から，部品群間の関係を求める．
相対的再利用性計算部
部品群間の関係から，部品群に対して R3 法で相対的再利用性評価値による順位づけを行う．なお，行列の固有ベクトル計算には，
行列演算パッケージ JAMA[11] を利用している．

JDK は Java の基本パッケージであり，Java でアプリケー
ションを開発するときには JDK が必要となる．相対的
再利用性の上位 10 クラスについて見てみると，Object,Class, Throwable など，Java の言語仕様 [8] で利用しなければならないクラスが大半を占めている．Java 言語
仕様によれば，java.lang.Object クラスはすべてのクラスのスーパークラスである．したがってすべてのクラスから利用されていることになり，相対的再利用性が 1 位となっている．また，java.lang.Class クラスは実行中の-221-

Software Symposium 2002
表 1. JDK-1.3.0 への適用結果
順位
1
2
3
4
5
6
7
8
9
10
..
.
1256

クラス名
java.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

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

評価値
0.161260.087120.055100.03103
0.013430.012140.011690.010270.009480.00936..
.
0.00011

順位
1
2
2
4
5

6
7
8
8
10
..
.
418

クラスおよびインターフェイスを表すクラスで，このクラスを直接継承するようなクラスはないが，実行時のオブジェクト型の情報を取得するために頻繁に呼び出される．java.lang.Throwable クラスはすべてのエラーと例外のスーパークラスであり，したがって例外やエラーを扱うクラスはすべてこのクラスを間接的に利用していることになる．このように，実際に直接的，間接的に利用される回数の多いクラスが上位を占めている．また，最下位は 1256 位で，該当するクラスは 622 あった．これらのクラスは，どのクラスにも利用されていない．

クラス名
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.IdentifierInfo..
.
cktool new.examples.Main

評価値
0.10727
0.06189
0.061890.05434

0.05246
0.03699
0.015640.013900.013900.01365..
.
0.00050

jp.gr.java conf.keisuken, 245 ファイル) のソースコー
ドも適用対象とした．
その他(14 ファイル)適用結果を表 2 に示す．

4.2.2 研究室内ソースコードへの適用
ここでは研究室内で過去に開発された Java アプリケー
ションのソースコードを適用対象とした (582 ファイル)．
適用対象について簡単に説明する．

C-K メトリクス計測ツール 1 Java ソースコードから
C-K メトリクス [6] を計測するツール．パッケー
ジ名は cktool．(29 ファイル) ANTLR[2] を使用してソースコードの構文解析を行っている．

また，2 位，8 位に同評価値の部品がそれぞれ存在している．これは，それぞれ二つのクラスが非常に類似していたため，同一部品群に存在していたからである．

C-K メトリクス計測ツール 2 上のツールを若干修正したもの．上と同じく ANTLR を用いている．パッ
ケージ名は cktool new．(29 ファイル)

4.3. 閾値 t の調整

本論文で作成した R3 -System．ソースコー
R3 -System
ドの構文解析には ANTLR を使用している．また，行列計算には JAMA[11] を使用している. そのほか
Caffe Cappuccino Class Library[14] というライブラ
リも使用している．パッケージ名は
jp.ac.osaka u.es.ics.iip lab.metrics．(68 ファイル)
使用パッケージのソース
ANTLR(パッケージ名 antlr,
188 ファイル), JAMA(パッケージ名 Jama, 9 ファイル), Caffe Cappuccino Class Library(パッケージ名研究室内で作成されたアプリケーションよりも，利用したパッケージの方が上位に来る傾向が見られる．また，
主に機能を提供するようなクラスよりも，データを格納するようなクラスの方が高く評価される傾向にある．全体的に複数のアプリケーションで共通に使用されている
ANTLR のクラスが高く評価されている傾向にある．これらの結果から，相対的再利用性評価値による順位づけ
は，実際の利用実績の傾向を反映していると考えられる．

ここでは類似度の閾値 t と相対的再利用性評価値との関係について検証する．ここでは，JDK に対して利用した部品への配分の比率を p = 0.85 と固定して t を変化させながら相対的再利用性評価値を計測する．t は 0.10 から
0.10 間隔で 1.00 まで変化させる．t の値が大きいほど類
似部品群内の部品同士の類似度が高くなり，t = 1.00 では，内容が完全に一致する部品（コピーした部品）のみで構成される類似部品群になる．逆に t を 0 に近くすると，あまり類似していない部品も同一の類似部品群にまとめられる．t = 0 のときは，すべての部品が 1 つの類-222-Software Symposium 2002
1.000000

t=0.10t=0.20t=0.30t=0.40t=0.50t=0.60t=0.70t=0.80t=0.90t=1.00

検索キー.java Files (N

)

SMMT

ファイル間の関係
抽出部

クラスタ分析
ツールクラスタ間の関係
抽出部

クラスタのRank→ファイルのRank

PageRank

検索システム0.100000個（一致したファイル）

価値評0.010000

Rankで
並べ替え

ObjectImageObserver
JOptionPane
ICC_ColorSpace
MetalSplitPaneDivider
NoSuchFieldException

0.001000

検索結果

計算部

N個のファイルのRank
0.000100

図 6. 検索システムの構成図

図 5. t と評価値の変化 (p = 0.85)

5. 部品検索システムへの応用

似部品群としてまとめられるため，相対的再利用性評価値を求めることができない．
上位 10 位と一部のクラスに関する評価値の順位を表 3に示す．表 3 は，t = 0.80 での評価値および順位で整列している．上位 10 位については，Object クラスなどには変化はないが，t = 0.70 と t = 0.80 を境に Throwableと Exception の順位が大幅に入れ替わっている．これは，
t = 0.70 以下で分類した場合には Exception クラスを含めて 62 個の例外クラスが 1 つの類似部品群にまとまることが原因である．そのため，Throwable や StringBufferなど t が 0.80 以上の時には上位にあったクラスが 65 位
以下に落ちている．

t の変化によって評価値がどのように変化するかをグラフにしたものが図 5 である．横軸は t の値，縦軸は評価値として変化の様子を示している．縦軸の目盛は常用対数で表示している．NoSuchFieldException は Exception のサブクラスである．グラフからも，t = 0.70 と t = 0.80を境に例外クラスの評価値が大きく変化していることが明らかである．例外クラス以外では，t = 0.10 から
t = 0.90 の範囲では大きな変化は見られない．

ここで提案した R3 法の応用例として，ソフトウェア部
品検索が考えられる．これは，インターネットを通じて
ソフトウェア部品を収集し，収集した部品に対してあらかじめ R3 法で部品を順位付けする．開発者は再利用したい部品を検索キーを用いて検索し，システム側は，検索した結果を相対的再利用性で順位付けして表示する．
これにより，開発者は再利用実績の高い部品を容易に入手し，再利用することができる．

5.1. 部品検索システム
図 6 は部品検索システムを表し，R3 システムである図4 から追加した部分の説明を以下に述べる．
検索システム検索キーが入力され，検索キーに一致する部分を持つソースコードファイルを返す．
検索結果の順位づけ部
相対的再利用性の順位をもとに，検索結果を順位づけして表示する．

5.2. 検索の例

表 4 は t の値ごとの Spearman の順位相関係数を示している．順位相関係数は 0.70 以上と全体的に高く，t の差が 0.10 の場合には，順位相関係数は１に近くなっている．上述した Exception についての問題はあるが，t が変化しても全体的な順位の傾向はあまり変動しないことが分かる．
以上の結果から，JDK に対する解析においては，閾値 t
は例外クラスに関しては影響を与えうるが，その他のクラスに対しては影響が薄い事がわかる．t = 0.70 以下で分類するかどうか，すなわち例外クラスをすべて同一の類似部品群として扱うかどうかは，対象とする部品のドメインや評価の目的によって適宜判断する必要がある．
また例外クラスを評価対象に入れるかどうかも本提案手法を適用する際には検討すべきであると考えられる．

ここでは検索の例として，4 節の適用例で挙げたファイ
ル群に，[12] において一般に公開されているソースコー
ドファイルを追加した 3131 ファイルに対する検索について説明する．追加したソースファイルは，テキストエ
ディタ JEDIT，ペイントソフト JHotDraw，プロジェク
トのスケジューリングツール JProjectTimer に関するソースファイルなどである．
ファイルからの入力時に利用される，FileInputStream をキーとして grep を用いて検索を行った．ただし，コメントにのみ現れる場合は除外している．検索の結果 47 のクラスが該当し，相対的再利用性の順位をもとに検索結果を順位づけしたところ，表 5 のようになった．FileInputStream-223-

Software Symposium 2002
表 3. t と順位の変化 (p = 0.85)
クラス名

java.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.
.
.
java.awt.image.ImageObserver.
.
.
javax.swing.JOptionPane.
.
.
java.awt.color.ICC ColorSpace.
.
.
javax.swing.plaf.metal.MetalSplitPaneDivider

t=0.10
1
2
66
3
3
68
69
72
73
74
.
.
.
316
.
.
.
832
.
.
.
1046
.
.
.
1403

t=0.20
1
2
66
3
3
68
69
71
72
73
.
.
.
191
.
.
.
671
.
.
.
961
.
.
.
1343

t=0.30
1
2
66
3
3
68
69
71
72
73
.
.
.
172
.
.
.
637
.
.
.
941
.
.
.
1326

t=0.40
1
2
66
3
3
68
69
71
72
73
.
.
.
172
.
.
.
578
.
.
.
931
.
.
.
1318

t=0.50
1
2
66
3
3
68
69
71
72
73
.
.
.
166
.
.
.
563
.
.
.
923
.
.
.
1315

t=0.60
1
2
66
3
3
68
69
71
72
73
.
.
.
166
.
.
.
562
.
.
.
917
.
.
.
1314

t=0.70
1
2
65
3
3
67
68
70
71
72
.
.
.
163
.
.
.
561
.
.
.
914
.
.
.
1306

t=0.80
1
2
3
4
5
6
7
8
9
10
.
.
.
103
.
.
.
499
.
.
.
850
.
.
.
1253

t=0.90
1
2
3
4
6
7
8
9
10
11
.
.
.
101
.
.
.
496
.
.
.
828
.
.
.
1229

t=1.00
1
2
3
4
6
7
8
9
10
11
.
.
.
94
.
.
.
497
.
.
.
833
.
.
.
1228

表 4. 順位の相関 (p = 0.85)
t=0.10t=0.20t=0.30t=0.40t=0.50t=0.60t=0.70t=0.80t=0.90t=1.00t=0.10t=0.20t=0.30t=0.40t=0.50t=0.60t=0.70t=0.80t=0.90t=1.00

1.000
0.880
0.849
0.837
0.830
0.828
0.823
0.730
0.713
0.710

0.880
1.000
0.968
0.958
0.951
0.949
0.943
0.845
0.824
0.821

0.849
0.968
1.000
0.991
0.984
0.982
0.976
0.877
0.855
0.852

0.837
0.958
0.991
1.000
0.993
0.991
0.985
0.886
0.863
0.861

0.830
0.951
0.984
0.993
1.000
0.998
0.995
0.895
0.872
0.870

0.828
0.949
0.982
0.991
0.998
1.000
0.996
0.897
0.874
0.871

0.823
0.943
0.976
0.985
0.995
0.996
1.000
0.901
0.878
0.875

0.730
0.845
0.877
0.886
0.895
0.897
0.901
1.000
0.976
0.973

0.713
0.824
0.855
0.863
0.872
0.874
0.878
0.976
1.000
0.997

0.710
0.821
0.852
0.861
0.870
0.871
0.875
0.973
0.997
1.000

を実現しているクラスが 2 位となり，その他のクラスは利用例である．上位にあがったクラスの利用方法を見てみると，設定ファイルからのプロパティの抽出とファイルのデータ列の抽出に関するものが大半で，残りは圧縮ファイルの内容一覧の抽出，構文解析であった．一方で，下位のクラスでは，上位のクラスのような利用例も存在するが，Java で用意されている例外機構を無効化する
ためのラッパークラスなど，特殊な利用例も数多く存在した．
全体的な傾向として，一般的な利用例は上位・中位・下位に満遍なく存在しているが，特殊な利用例は下位に集中していた．そのため，本手法を用いた検索は再利用に適していないプログラムを除外するのに有効な手法であると思われる．個々の利用目的に関して検索を行う場合には，検索キーの追加などを行う事で十分対応できると思われる．

java.lang.Package は Java パッケージの実装に関するクラスで，他のクラスから頻繁に利用されるためである．
相対的再利用性評価値による順位づけは，実際の利用実績の傾向を反映しているため，再利用を目的とした検索にも応用できると考えられる．しかし，Java の言語仕様
で利用しなければならないクラスがたまたま利用していた場合に，そのクラスが上位に入ってしまうという問題点がある．実際に提案手法を適用し検索システムを実現する際には，対象とする部品のドメインや評価の目的によって，利用関係の重みづけの変更や「言語仕様上利用しなければならないクラス」の解析からの除外を検討すべきであると考えられる．

6. まとめまた，1 位の java.lang.Package は利用例のクラスである．
利用例としては 3 位以下のクラスとあまり大差がないにもかかわらず，FileInputStream を実現しているクラスより評価値がはるかに大きく，順位が上である．これは，本論文では，ソフトウェア部品の相対的再利用性を定義し，その評価方法として R3 法を提案した．実際に R3法に基づいて相対的再利用性を評価するシステム R3 System を実装し，幾つかのソフトウェアシステムに適用-224-

Software Symposium 2002
表 5. FileInputStream の検索結果
順位
1
2
3
4

5
6
7
7
9
9

クラス名
java.lang.Package
java.io.FileInputStream.java
java.awt.color.ICC Profile
jp.gr.java conf.keisuken.
net.server.ServerProperties
java.awt.Cursor
java.awt.Toolkit
cktool new.examples.oofp
cktool.examples.oofp
jp.ac.osaka u.es.ics.iip lab.metrics．
component.java.ClassNameDAO
jp.ac.osaka u.es.ics.iip lab.metrics．
component.java.JavaFileDAO

評価値
0.007389
0.000775
0.000605

0.000600
0.000509
0.000282
0.000171
0.000171
0.000120
0.000120

した．いくつかの例に適用した結果、一般的な使い方をしているクラスが集中して上位のランクに現れた。このように、相対的再利用性は、ソフトウェア部品の検索のための順位付けに有用なものと思われる。
再利用によるソフトウェア開発において，多くのソフト
ウェア部品の中から開発者が本当に必要としているものを見つけ出すのは困難な作業であるが，再利用する部品を選択する基準として R3 法を用いることで開発者の負担を軽減できると考えられる．
今後の課題としては，さらに多くの部品への適用，Java
ソースファイルにおける継承，実装，メソッド呼びだしの各関係の重みづけの検討，部品検索システムの検討と実装などが挙げられる．
謝辞 本研究は，平成 13 年度科学技術振興事業団計算科学技術活用型特定研究開発推進事業 (ACT-JST) の支援を受けている．

参考文献[1] 青山, 中所, 向山: コンポーネントウェア, 共立出版,(1998).
[2] “ANTLR Website”, http://www.antlr.org/[3] 馬場: “Google の秘密 - PageRank 徹底解説”,
http://www.kusastro.kyoto-u.ac.jp/baba/wais/pagerank.htm[4] 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).

[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 suitefor object-oriented design”, IEEE Trans. on SoftwareEng., 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. 295-308 (2001).
[8] J. Gosling, B. Joy, G. Steele and G. Bracha: “TheJava Language Spwcification Second Edition”, Sun
Microsystems,
http://java.sun.com/docs/books/jls/
second edition/html/j.title.doc.html[9] S. Isoda: “Experience report on a software reuseproject: Its structure, activities, and statistical results”, Proc. of ICSE14, pp.320-326 (1992).
[10] I. Jacobson, M. Griss and P. Jonsson: Software Reuse,
Addison Wesley, (1997).
[11] “JAMA : A Java Matrix Package”,
http://math.nist.gov/javanumerics/jama/[12] “SourceForge”,
http://sourceforge.net/[13] B. Keepence and M. Mannion: “Using patterns tomodel variability in product families”, IEEE Software, Vol. 16, No. 4, pp. 102-108 (1999).
[14] 西本: “Java 言語について”,
http://cappuccino.ne.jp/keisuken/java/[15] G. Pinski and Francis Narin: “Citation influence forjournal 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).
[16] L. Page, S. Brin, R. Motwani, T. Winograd:“The PageRank Citation Ranking: Bringing Order to the Web”, http://www-db.stanford.edu/ backrub/pageranksub.ps[17] “The Source For Java(TM) Technology”, Sun Microsystems, http://java.sun.com/[18] 山本, 松下, 神谷, 井上: “ソフトウェアシステムの類似度とその計測ツール SMMT”, 電子情報通信学会論文誌 D-I(採録決定).
[19] 山本, 鷲崎, 深澤: “再利用特性に基づくコンポーネントメトリクスの提案と検証”, ソフトウェア工学の基礎ワークショップ (FOSE2001), (2001).

-225-