利用実績に基づくソフトウェア部品検索システムSPARS-J 横森 励士 山本 哲男 松下 誠 楠本 真二 井上 克郎 大阪大学 2003年3月17日 WOCS2003
研究の背景(1/2) 再利用を活用するためには,部品やライブラリの知識を持っている事が必要 ソフトウェア開発効率を向上するための手法として,再利用が注目されている 再利用 既存のソフトウェア部品を同一システム内や他のシステム内で用いること ソフトウェア部品 ソフトウェア開発者が再利用を行う単位 部品例:ソースコード,ドキュメント,・・・ 再利用を用いることで,生産性と品質を改善し,結果としてコスト削減にもつながる 再利用を活用するためには,部品やライブラリの知識を持っている事が必要 ソフトウェア開発効率を向上するための手法として,再利用が注目されている 再利用 既存のソフトウェア部品を同一システム内や他のシステム内で用いること ソフトウェア部品 ソフトウェア開発者が再利用を行う単位 部品例:ソースコード,ドキュメント,・・・ 再利用を用いることで,生産性と品質を改善し,結果としてコスト削減にもつながる まずはじめに研究の背景について説明します。 近年のソフトウェアの大規模化・複雑化に伴い、高品質なソフトウェアを一定期間内に効率よく開発することが重要となってきています。 ソフトウェア開発効率を向上するための手法は多数提案されておりますが、その一手法として再利用が注目されています。 再利用とは既存のソフトウェア部品を同一システム内、他のシステム内で用いることをいい、再利用を用いることにより、生産性と品質が改善され、結果としてコストの削減にもつながると言われています。 この再利用を、実際のソフトウェア開発において行うためには、 どの部品が再利用に適していて、どの部品が適していないかを判断するために 再利用性を定量的に示すことが必要です。 WOCS2003
研究の背景(2/2) インターネットの普及により大量のソースコードが比較的容易に入手可能となった SourceForge を代表としたソフトウェア開発コミュニティ ソースを公開することで,開発を促進 プログラム解説書のサンプルコード Web上で公開する事で,購入予定者に情報を提供 これらのソースコードは,開発者にとって再利用可能な部品に関する有益な知識源となりうる これらの部品を収集して検索システムを構築すれば知識の共有に役立ち,再利用を促進できる WOCS2003
SPARS 利用実績に基づくソフトウェア部品検索システムSPARS(Software Product Archiving, analyzing and Retrieving System) 公開されている部品を収集し,解析を行い,解析情報を元に検索システムを構築する 利用実績から部品の評価値(Component Rank)を求め,検索結果の表示順位に利用する 利用実績の高い汎用的な部品を容易に検索可能 現在,Java を対象として,SPARS-J を構築中 WOCS2003
Component Rank法 利用関係から部品の利用実績(Component Rank)を評価する手法 開発者は重要であると判断した部品を再利用すると仮定し,部品の参照行為をモデル化 他分野における実績評価手法 Influence Weight (学術論文誌の重要度評価) PageRank (GoogleにおけるWebページの評価) 計算手順 部品間の利用関係をグラフとして表現 利用関係に重みをつけ,各部品の利用実績を計算 再利用性を定量的に評価する手法は多数提案されておりますが、 従来の再利用性評価手法は、個々の部品の静的な特性を評価するものでした。 例えば、えつこーんらは 複数のコードメトリクスを足し合わせて再利用性を評価する手法を提案しております。 また、やまもとらは部品のインターフェース部分の情報から再利用性を評価する手法を 提案しております。 しかしながら、静的な特性、たとえばソースコードの複雑さなどからは 再利用性が低いと評価されていても、 実際には頻繁に再利用されているような部品も存在すると考えられます。 WOCS2003
部品グラフの構築 部品間の利用関係をグラフ表現 部品グラフ(Component Graph) 実際は部品グラフを部品群グラフ化する c4 頂点:ソフトウェア部品 有向辺:利用関係 利用する側からされる側に有効辺を引く 利用関係の例 ソースコード:メソッド呼び出し,継承 実際は部品グラフを部品群グラフ化する コピーされたと判断できる部品は一緒の部品群とみなす それぞれの部品へ向いていた辺がひとつの部品群への辺になるため,コピーされた回数が多いほど評価が高くなる コピーによって実現される事が多いソースコードの特性を考慮 c4 c5 c1 c2 c3 部品グラフ例 まず、これまでソフトウェア部品という言葉を使ってきましたが、ソフトウェア開発者が再利用を行う単位をソフトウェア部品あるいは単に部品と呼びます。 部品例として、ソースコードファイルやドキュメントがあげられます。 またおのおのの部品間には、利用する、されるという利用関係が存在します。 右下の図を用いて説明します。 四角は部品をあらわし、 矢印は利用関係を表します。 この図では、 c2はc1を利用し、c1はc4を利用しています。 また、この図では、 C2’とC3がC1’を利用して、C1’はC5とC3を利用しています WOCS2003
利用実績の計算 利用実績を基に部品の評価値を求める 部品評価値計算方法 計算手順 C1 C2 C3 C1 C2 C3 C1 C2 C3 C1 部品群グラフの利用 計算手順 各頂点に適当な重みを与える 頂点の重みの総和は1 各有向辺の重みを求める 頂点の重みを,その頂点から出ていく辺で分配する 各頂点の重みを再計算 頂点に入ってくる辺の重みの総和を,その頂点の重みとして再定義する 頂点の重みが収束するまで,2.3.を繰り返し計算する 収束した頂点の重みを,その頂点に対応する部品の評価値として出力 C1 0.500 C2 0.1665 C3 0.3335 C1 C2 C3 0.1665 0.167 0.500 C1 0.400 C2 0.200 C3 C1 0.333 C2 0.167 C3 0.500 C1 0.334 C2 0.333 C3 C1 0.334 C2 0.333 C3 v1×50% v2×100% v3×100% C1 C2 C3 0.167 0.333 われわれの研究グループが提案する、利用実績に基づく再利用性評価手法(Component Rank法)では、先に説明しました利用関係に着目し、その関係を抽出してグラフを作成します。 そして、各関係に重み付けし評価を行います。そのときの評価の方法として、非利用数が多い部品は重要である、また、重要な部品から利用されている部品も重要であるという方針で計算を行います。 WOCS2003
CR法による評価の例 JDK1.3(約1800ファイル)を対象としてCR法を適用 言語仕様上、直接的、間接的に利用しなければならないクラスが上位を占めている WOCS2003
SPARS-Jの実現 SPARS-J Javaソースコードを対象とした部品検索システム 収集された部品に対して,解析を行い検索機能を提供する 現在は収集は手動で行っている 約10万クラスに対してシステムを構築できることを確認 システムの構成 リポジトリ構築部 検索に必要な情報を解析し,リポジトリに保存する リポジトリ群 検索に必要なデータを保存する 部品検索部 検索機能を実現する WOCS2003
システムの構成 Analyzer Raw Source Ranker Java Repository Parser ソースファイル群 Cluster Word Repository Query Parser Searcher Component Repository Browser Formatter WOCS2003
各部品の説明 (リポジトリ構築部(1/4)) Parser Javaファイルの構文解析を行う 入力: Raw Source Repository中のソースコード 出力: 以下の情報 Component Repositoryに保存 構文解析情報 利用クラス名などを保存し,利用関係解析に利用 部品特徴情報(メトリクス) グループ化などにおいて利用 各トークンの出現頻度情報 サイクロマチック数などの制御構造情報 Word Repositoryに保存 出現単語情報 出現した単語を部品IDとともに保存し,検索に利用 WOCS2003
各部品の説明(リポジトリ構築部(2/4)) Analyzer 利用関係の抽出を行う 入力: Parserによって求められた構文解析情報 出力: 利用関係情報 どの部品がどの部品を利用しているかを判定 Javaソースコード中の利用関係 クラスの継承関係 インターフェースの実装関係 抽象クラスの実装関係 メソドの呼び出し関係 フィールドの参照関係 WOCS2003
各部品の説明(リポジトリ構築部(3/4)) Cluster 部品のグループ化を行う 入力: Parserによって求められた部品特徴情報(メトリクス) 出力:部品のグループ化情報 部品のグループ化 当初は,ソースコードの文字列比較(diff)によって判定していた 現在は,構文解析時に得られるメトリクスを用いて比較 文書的特長(構成トークンの違い) 構造的特徴(サイクロマチック数などの比較) WOCS2003
各部品の説明(リポジトリ構築部(4/4)) Ranker Component Rankの計算 入力: Analyzerによって求められた利用関係情報 出力: 各部品のComponent Rank グラフの隣接行列の固有ベクトルを求める計算に帰着される 疎行列における計算手法を利用した計算の効率化 WOCS2003
各部品の説明(リポジトリ(1/3)) Raw Source Repository 部品のソースコードを管理 リポジトリの内容: 主な利用方法 各ファイルの位置情報 主な利用方法 ソースコードの取得 パッケージ名とクラス名をキーとして,ファイルパスを取り出す 構文解析,検索結果の表示などに利用 WOCS2003
各部品の説明(リポジトリ(2/3)) Word Repository 各部品で出現した単語を保存 リポジトリの内容: 主な利用方法 部品と出現単語の対応表 Parser において各部品の解析時に出現した単語を保存 主な利用方法 出現単語をキーとして,その単語が出現する部品を取得する 検索の際に利用する WOCS2003
各部品の説明(リポジトリ(3/3)) Component Repository 解析情報を保存 リポジトリの内容: 主な利用方法 部品番号(Raw Source Repository) 構文解析情報(Parser) メトリクス(Parser) (被)利用関係情報(Analyzer) 所属部品群番号(Cluster) Component Rank (Ranker) 主な利用方法 リポジトリ構築部において,解析結果の参照したり保存する Component Rankによって検索結果の順位付けを行う WOCS2003
部品の検索と表示 キーワード検索 検索結果 Standard Search Advanced Search Component Rank 順に表示 コンポーネント情報 ソースコード メトリクス 利用関係・被利用関係 クラスタ WOCS2003
各部品の説明(部品検索部) Query Parser クエリーをキーワードの集合に分解 Searcher キーワードごとに出現する部品を取得し,マージ Formatter Component Rank の順番で並び替え,html出力を生成 検索結果一覧を表示し,部品の詳細情報へのリンクを生成 WOCS2003
検索の例 今回作成したデータベース 17812個のクラスから構成 構築には約4時間を必要とした 主な内訳 JDK SourceForgeで公開されているものを中心とした,45個のソフトウェア 研究室内で作成したツール 構築には約4時間を必要とした 主にかかっているのは,キーワード抽出に関する部分 データベース(ディスク)へのアクセスコストが大きい WOCS2003
JEdit のプラグインとして作成されたものがあり, 検索の結果 quicksort で検索 検索条件 コメント中のみの部品は除外 30の部品がヒット 実際には17種類の部品 2位と3位に部品の定義 1位は3位の部品の利用例 4位以下は全て利用例 部品の定義情報を簡単に見つけることができる 研究室内で作成したツール内で JEdit のプラグインとして作成されたものがあり, 同じ部品が別々の場所に存在した WOCS2003
まとめと今後の課題 まとめ 今後の課題 部品検索システムSPARS-Jを紹介した SPARS-J の性能向上 検索システムの評価 Component Rank を用いて利用実績による順位付けを行うことで,汎用性の高い部品を容易に取得可能 知識の共有による再利用の促進が期待できる 今後の課題 SPARS-J の性能向上 検索機能の向上 提供する部品情報の吟味 検索システムの評価 WOCS2003