ソースコードの利用関係を用いた 再利用性評価手法の提案 横森 励士, 藤原 晃, 山本 哲男 松下 誠, 楠本 真二, 井上 克郎 大阪大学大学院基礎工学研究科 大阪大学の藤原です。 JSTミーティング
背景 ソフトウェア開発効率を向上するための手法として、再利用が注目されている 再利用とは既存のソフトウェア部品を同一システム内、他のシステム内で用いること 部品が再利用に適しているか判断するために、再利用性を定量的に示すことが必要 まずはじめに研究の背景について説明します。 ソフトウェア開発効率を向上するための手法は 多数提案されておりますが、 その中でも再利用が注目されています。 再利用とは既存のソフトウェア部品を同一システム内、 他のシステム内で用いることとされています。 実際のソフトウェア開発において再利用を行うためには、 その部品が再利用に適しているかを判断するために 再利用性を定量的に示すことが必要です。 JSTミーティング
従来の再利用性評価手法 従来の再利用性評価手法は、個々の部品の静的な特性を評価している コードメトリクスを足し合わせて再利用性を評価[1] インターフェース部分の情報から再利用性を評価[2] 静的な特性からは再利用性が低いと評価されていても、実際には頻繁に再利用されている部品も存在する 再利用性を定量的に評価する手法は多数提案されておりますが、 従来の再利用性評価手法は、 個々の部品の静的な特性を評価するものでした。 たとえばえつこーんらは 複数のコードメトリクスを足し合わせて再利用性を評価する手法を提案しております。 また、やまもとらは部品のインターフェース部分の情報から再利用性を評価する手法を 提案しております。 しかしながら、静的な特性、たとえばソースコードの複雑さなどからは 再利用性が低いと評価されていても、 実際には頻繁に再利用されているような部品も存在すると考えられます。 そこで、実際にどの程度再利用されたかという利用実績 に基づく再利用性を定量的に評価すること必要と考えられます。 利用実績に基づく再利用性を定量的に評価することが必要 [1] L. Etzkorn et al.: ``Automated reusability quality analysis of OO legacy software,'' Information and Software Technology, Vol. 43, Issue 5, pp. 295-308 (2001). [2]山本 他: ``再利用特性に基づくコンポーネントメトリクスの提案と検証," FOSE2001, (2001). JSTミーティング
実績に基づく評価 計量社会学で一般に用いられている手法 Influence Weight[3](学術論文の重要度を評価) 他の応用 多くの論文に引用される論文は重要である 重要な論文に引用される論文はまた重要である 他の応用 Page Rank[4] (Webページの重要度を評価) 多くのページからリンクされるページは重要である 重要なページからリンクされるページはまた重要である 実績に基づく評価は、 計量社会学の分野においては以前から一般に用いられている手法です。 たとえば、学術論文の引用解析の分野においては、1970年代に ぷりんすきー らが、Influence Weightを提案しています。 この手法では、多くの論文に引用されるるんぶんは重要である、 重要な論文に引用される論文はまた重要である という考えに基づいて論文の重要度を評価しています。 また他の応用としては、 Webページ検索の分野において PageらがPageランクを提案しております。 この手法では、多くのページからリンクされるページは重要である、 重要なページからリンクされるページはまた重要である という考えに基づいてWebページの重要度を評価しております。 このような考えに基づいて、 [3] G. Pinski et al.:``Citation Influence for Journal Aggregates of Scientific Publications: Theory, with Application to the Literature of Physics,“ Information Processing and Management, Vol. 12, Num 5, pp. 297-312, (1976). [4] L. Page et al.: ``The PageRank Citation Ranking: Bringing Order to the Web,'' http://www-db.stanford.edu/~backrub/pageranksub.ps JSTミーティング
本研究の目的 利用実績に基づくソフトウェア部品の再利用性評価手法を提案 提案手法による再利用性評価システムを実装 Javaソースコードに対して適用実験を行う 提案手法が利用実績を反映しているか →本研究では、 利用実績に基づくソフトウェア部品の再利用性評価手法を提案します。 そして提案手法に夜再利用性評価システムを実装し、 Javaソースコードを対象として適用実験を行い、 提案する手法が利用実績を反映しているかどうかを検証します。 次に、ソフトウェア開発における再利用をモデル化します。→ JSTミーティング
ソフトウェア部品 ソフトウェア開発者が再利用を行う単位をソフトウェア部品と呼ぶ 部品間には利用関係が存在する ソースコードファイル、ドキュメントを部品として抽出 部品間には利用関係が存在する c4 c5 ソフトウェア開発者が再利用を行う単位をソフトウェア部品 あるいは単に部品と呼びます。 たとえば、ソースコードファイルやドキュメントを部品として抽出します。 また部品間には、利用する、されるという利用関係が存在します。 図を用いて説明します。 四角は部品をあらわし、 矢印は利用関係を表します。 この図では、 c2はc1を利用し、c1はc4を利用しています。 c1 c1' c2 c2' c3 (a) 部品間の関係 JSTミーティング
類似部品群(1) 実際に部品を抽出した場合、コピーした部品やコピーして一部変更した部品が多く存在する 類似した部品をまとめて類似部品群とする c4 c5 c4 c1 c1' c2 c2' c5 c3 C1 C2 C3 C4 C5 実際に部品を抽出した場合、 コピーした部品やコピーして一部変更した部品が多く存在します。 そこで、類似した部品をまとめて類似部品群とします。 以後類似部品群を単に部品ぐんと呼びます。 図Aでは、c1とc1プライム、 c2とc2プライムは類似した部品です。 また、c3すりー、c4ふぉー、c5ふぁいぶは類似した部品がありません。 このとき、 → c1とc1プライム、c2とc2プライムをまとめて部品群 ラージc1、ラージc2としてまとめます。 c3すりーc4ふぉーc5ふぁいぶは1つの部品を要素とする部品群として扱います。 c1 c1' c2 c2' c3 (a) 部品間の関係 JSTミーティング
類似部品群(2) 所属する部品同士に利用関係があれば、部品群間にも利用関係がある c4 c5 C4 C5 c1 c1' C1 c2 c2' また、所属する部品どうしに利用関係が部品群にも 利用関係があるとします。 (下のほうの矢印さす) 図では、c1およびc1プライムを利用するという関係は → 部品群ラージc1を利用するという関係に、 c1およびc1プライムが利用するという関係は 部品群らーじc1を利用するという関係に それぞれまとめます。 次に、提案する再利用性評価手法について説明します。 (b) 部品群間の関係 c1 c1' C1 c2 c2' c3 C2 C3 (a) 部品間の関係 JSTミーティング
多数の部品間の利用関係から相対的に決まる 相対的再利用性 再利用を用いてソフトウェア開発が繰り返されると、利用関係は時間とともに変化していく 十分な時間が経過した状態で、部品の利用実績に基づいて再利用性を評価 再利用を用いたソフトウェア開発が繰り返されると 利用関係は時間とともに変化していきます。 本研究では、十分な時間が経過した状態で、部品の利用実績に基づいて 再利用性を評価します。 → この再利用性は、 多数の部品間の利用関係から相対的に決まるため、 従来手法の静的な再利用性と区別して 「相対的再利用性」と呼びます。 多数の部品間の利用関係から相対的に決まる 「相対的再利用性」 JSTミーティング
部品の分類 実際に部品を抽出した場合、コピーや類似した部品が多数含まれる 類似部品群を相対的再利用性評価の対象とする 多数含まれております。 そこで本研究では、類似部品群を 相対的再利用性評価の対象とします。 JSTミーティング
相対的再利用性評価値(1) 開発者は再利用性が高いと判断した部品群を利用する 部品群を利用する→「再利用性が高い」という支持投票をしたとみなす 多くの部品群から投票される部品群は再利用性評価が高い 再利用性評価が高い部品群から投票を受ける部品群は再利用性評価が高い 部品群同士で互いに投票しあうことで評価値が循環し相対的再利用性評価値が決まる 開発者は、再利用性が高いと判断した部品群を利用すると考えられます。 そこで、部品群を利用するという行為を 再利用性が高いという支持投票をしたとみなします。 このとき、多くの部品から投票される部品は再利用性評価が高い、 再利用性評価が高い部品から投票を受ける部品は再利用性評価が高い という2つの考えに基づいて、 部品群同士で互いに投票しあうことで評価値が循環し、 相対的再利用性評価値がきまります。 JSTミーティング
相対的再利用性評価値(2) 所属する部品群の評価値を部品の評価値とし、部品を順位付けする 本提案手法を「Relative Reusability Ranking」法(R3法)と呼ぶ そして部品が所属する部品群の評価値をその部品の評価値とし、 部品を順位付けします。 本提案手法をRelative Reusability Ranking略して あーるきゅーぶほうと呼ぶことにします。 JSTミーティング
相対的再利用性評価値(3) C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 v1 C2 v2 C3 v3 50% 100% C1 0.333 C2 C3 50% 100% C1 v1 C2 v2 C3 v3 C1 0.400 C2 0.200 C3 C1 C2 C3 0.167 0.333 C1 0.333 C2 0.167 C3 0.500 C1 C2 C3 0.167 0.500 C1 0.417 C2 0.167 C3 C1 0.500 C2 0.167 C3 0.334 C1 C2 C3 0.250 0.167 0.334 C1 C2 C3 0.167 0.250 0.417 C1 0.334 C2 0.250 C3 0.417 具体的に評価値が決まる様子を図をもちいて説明します。 (はじめの図) この図では、部品群C1はC2、C3を利用し、 C2はC3を、C3はC1をそれぞれ利用しています。 各部品群の評価値をv1、v2、v3とします。 (クリック1) 各部品は、自分の評価値を票の重みとして、 利用する部品に対して配分します。 C1はC2とC3を利用しているので、自分の評価値v1を C2とC3に半分ずつ配分します。 C2はC3だけを利用しているので、C3にすべての評価値を配分します。 同様にC3もC1のみを利用しているので、C1にすべての評価値を配分します。 (クリック2) 次に、評価値の合計が1になるように、 各部品の初期値を決めます。 部品数は3ですから、各部品に0.333を与えます。 ここから、評価値の投票を繰り返します。 (くりっく3) このように部品の重みが投票の重みになります。 各部品の評価値は、獲得した票の重みの合計とし、 (くりっく4) このようになります。 これを繰り返すと、 (くりっく連打) このように各評価値が 0.4、0.2、0.4 という状態に収束します。 この収束した値を部品群の相対的再利用性評価値とします。 この計算はグラフの隣接行列の固有ベクトルを求める計算に帰着されます。 JSTミーティング
相対的再利用性評価値(4) 相対的再利用性評価値を求める計算は行列の固有ベクトルを求める計算に帰着される C1 C2 C3 C1 C2 C3 v1 C2 v2 C3 v3 50% 100% V = Dt・V C1 0.400 C2 0.200 C3 この評価値を求める計算は、行列の固有値をもとめる計算に帰着されます。 先ほどの図において、 各部品群の評価値をこのようにベクトルVとします。 また、この重みつきの投票関係を行列Dで表します。 (さしながら、) たとえばC1からC2へ投票する重みを 1行2列の成分としています。 定常状態に収束すれば V=DtVという関係を満たします。 tは転置を表します。 この式から、評価値ベクトルVはDtにおける固有値らむだ=1の固有ベクトルです。 (クリック) 先ほどの収束状態においても、 このように式を満たしていることがわかります。 λ=1の固有ベクトル JSTミーティング
Javaへの適用 ソースコードファイルを部品とする 類似度にはSlineを用いる[5] 2つのソースコード間で一致する行の割合 SMMT(Similarity Metrics Mesuring Tool)を用いてSlineを計測する 継承、インターフェイスの実装、メソッド呼出を部品間の利用関係とする 提案手法をJavaに適用するため、次のように実装します。 Javaはオブジェクト指向言語ですのでクラス単位で再利用しやすく、 1つのクラスは1つのソースファイルにすることになっております。 そこでソースコードファイルを部品とします。 また類似度には 山本らが提案するSlineを用います。 Slineは2つのソースコード間で一致する行数の割合です。 また山本らの開発したSMMTというを用いてSlineを計測します。 またクラスの継承、インターフェイスの実装、メソッド呼出を 部品間の利用関係とします。 [5]山本, 松下, 神谷, 井上:``ソフトウェアシステムの類似度とその計測ツールSMMT'', 電子情報通信学会論文誌 D-I(採録決定). JSTミーティング
R3-Systemの構成 Java ファイル (N個) SMMT SMMT ファイル間の関係 抽出部 クラスタ分析 ツール クラスタ分析 部品群間の関係 抽出部 提案するアールキューブ法に基づいて部品の 再利用性評価を行うシステム、アールキューブシステムの構成図です。 Javaファイルを入力として、 まずファイル間の関係の抽出と 類似した部品の分類を行います。 次に部品群間の関係を抽出し、 部品群の相対的再利用性評価値を計算します。 最後に部品群の順位を 各ファイルの順位として出力します。 部品群の順位 →ファイルの順位 相対的再利用性 計算部 N個のファイルの順位 JSTミーティング
JDKへの適用 JDK(Java Development Kit) 1.3.0のソースコードへ適用(1877 files, 18.4MB) 言語仕様上、直接的、間接的に利用しなければならないクラスが上位を占めている この評価システムをJavaソースコードに対して適用するシステムを実装し、 2つの適用実験を行いました。 1つ目の適用実験として、 JDK(Java Development Kit) 1.3.0のソースコードへ適用しました。 JDKはJavaの基本パッケージであり、 Javaで開発を行う際には必ず使用します。 ファイル数は1877で大きさはおよそ18メガです。 適用結果の上位10位の部品を表に示します。 全体として、Javaの言語仕様上、直接的、間接的に利用しなければ ならないクラスが上位を占めてます。 たとえばObjectクラスはすべてのクラスから利用されることになっているため、 1位になっています。 JSTミーティング
研究室内ソースコードへの適用 研究室内で作成したツールと、使用したパッケージのソースコードへ適用(582 files, 6.1MB) 類似した部品は同一評価値を持っている 作成したツールより使用パッケージの方が評価が高い また、 2つめの適用実験として、井上研究室で過去にJavaで作成したツールと その中で用いているパッケージを適用しました。 ファイル数は582、大きさはおよそ6めがでした。 (クリック) 類似した部品をまとめて扱っているため、類似した部品は同じ評価値を持っています。 2位と8位のクラスは、それぞれほぼ内容が同じなので同じ部品群となっています。 (くりっく) 全体として研究室で作成したツール自身より、使用されている パッケージの方が高く評価される傾向がありました。 10位のクラスは研究室で作成されたもので、 1から9位までは使用したパッケージです。 これらの結果から、本手法による評価値が実際の利用実績を 反映していることが示されています。 JSTミーティング
提案手法の応用 R3法をソフトウェア部品検索へ応用 インターネットを通じてソフトウェア部品を収集 R3法で部品を順位付け 検索結果を相対的再利用性で順位付けして表示 R3-System インターネット 本提案手法の手法の応用として ソフトウェア部品検索への応用が考えられます。 (各部を指しながら) インターネットを通じて多数のソフトウェア部品を収集し、 提案するアールキューブ法により部品をあらかじめ順位付けしておきます。 そして、開発者が再利用したい部品を検索する際、 検索キーでの検索結果を相対的再利用性で順位付けして 表示します。 これにより、開発者は再利用実績の高い部品を容易に入手し、 再利用することができます。 順位付け 部品の収集 部品リポジトリ 部品検索 エンジン 検索キー 検索結果 JSTミーティング
まとめ まとめ 今後の課題 類似部品群間の利用関係から再利用性を評価する手法を提案した 提案する手法に基づいて再利用性評価を行うシステムを開発し、Javaソースコードを対象に適用した 適用結果から、提案する評価手法が利用実績を反映していることが示された 今後の課題 より多くの部品に対して適用する 利用関係の種類による重み付けの検討 最後にまとめます。 JSTミーティング
JSTミーティング
評価が循環しない場合 部品全体における票の重みの偏りを分析することで相対的再利用性を評価している 票が全体に循環しなければ正しく評価できない 利用してない部品に対しては非常に低い重みの票を投票したとみなす 本提案手法では、部品全体における票の重みの偏りを 分析することで 相対的再利用性を評価しております。 (クリック) したがって、票が全体に循環しなければ正しく評価できません。 図では、この部分で票がとどまってしまうため、 評価値が全体に循環しません。 そこで、利用していない部品には非常に低い重みの投票をしたとみなします。 図の破線の矢印は、非常に低い重みの投票を表します。 このように全体に矢印を補うことで、評価を循環させます。 次に、提案する手法を用いてJavaソースコードを評価するシステムについて説明します。 JSTミーティング