利用実績に基づくソフトウェア部品検索システムSPARS-J

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
ソースコードの編集内容を入力とした ソフトウェア部品の自動検索
情報爆発A01支援班 マイサーチエンジン開発環境支援グループ 中村聡史, 大島裕明, 田中克己, 喜連川優
検索エンジンに関して The Anatomy of a Large-Scale Hypertextual Web Search Engine
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ソースコードの利用関係を用いた 再利用性評価手法の提案
コンポーネントランクを用いた ソフトウェアのクラス設計に関する 分析手法の提案
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソフトウェア部品間の利用関係を用いた 再利用性評価手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
Javaソフトウェア部品 解析・検索システムSPARS-Jの構築
類似するコーディングパターンの 利用状況調査ツールの提案
メソッド間の依存関係を利用した プログラム理解支援手法の提案と実現
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
プログラム依存グラフを利用した 情報漏洩解析手法の提案と実現
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
類似度を用いたプログラムの再利用性尺度の提案と実現
ソフトウェア部品検索システムを 対象とするソフトウェアライセンス 特定手法
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
動的情報を利用したソフトウェア 部品評価手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
実行時情報に基づく OSカーネルのコンフィグ最小化
環境リスクマネジメントに関する 検索システム
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
プリムのアルゴリズム 重み付きグラフG=(V,E)の任意の点集合 U⊂Vに対して一方の端点がUの中にあり、他方の端点がV-Uの中にあるような枝の中で最小の重みを持つものをlとすれば、枝lを含むような最小木が存在する。
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
Javaを対象としたソフトウェア部品 検索システムSPARS-Jの実験的評価
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
バイトコードを単位とするJavaスライスシステムの試作
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
類似度メトリクスを用いた Javaソースコード間類似度測定ツールの試作
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
Webページタイプによるクラスタ リングを用いた検索支援システム
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
ソースコードの利用関係を用いた 再利用性評価手法の提案
動的情報を利用したソフトウェア 部品重要度評価手法の提案と評価
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
プログラム理解のための 付加注釈 DocumentTag の提案
Presentation transcript:

利用実績に基づくソフトウェア部品検索システム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