290 likes | 430 Views
開発者支援を目的とした WWW ソフトウェア検索エンジンの構築. 2003 年 3 月 18 日 ( 火曜日 ) 奈良先端科学技術大学院大学 情報科学研究科 ソフトウェア工学講座 松本 健一、 門田 暁人 、 亀井 俊之、 大杉 直樹 、 玉田 春昭. 過去に開発されたソフトウェアに関する知見のデータベースと, 検索エンジンが必要ではないか.. ソフトウェアに関する 知見データベース. クエリ. 検索エンジン. 検索者. 検索結果. 背景. 過去に様々なソフトウェアが開発されているが,その知識が有効に蓄積・利用されていない.
E N D
開発者支援を目的としたWWWソフトウェア検索エンジンの構築開発者支援を目的としたWWWソフトウェア検索エンジンの構築 2003年3月18日(火曜日) 奈良先端科学技術大学院大学 情報科学研究科 ソフトウェア工学講座 松本 健一、門田暁人、亀井 俊之、 大杉直樹、玉田春昭
過去に開発されたソフトウェアに関する知見のデータベースと,過去に開発されたソフトウェアに関する知見のデータベースと, 検索エンジンが必要ではないか. ソフトウェアに関する 知見データベース クエリ 検索エンジン 検索者 検索結果 背景 • 過去に様々なソフトウェアが開発されているが,その知識が有効に蓄積・利用されていない. • 似たようなソフトウェアが様々な場所で開発されている. • 同じような問題で,ソフトウェア開発が滞ることがある.
背景 • 一方,WWW には多くの情報が共有されている. • ソフトウェア開発の手助けとなるような情報もたくさんある. • ソースコードそのものやそのコメント • ソフトウェア開発途中に得られた知見のメモ • 掲示板の過去ログ WWWの公開データをソフトウェアに関する知見の データベースとして利用する. ソフトウェアに関する 知見データベース クエリ 検索エンジン 検索者 検索結果
目的 WWW を対象としたソフトウェア検索エンジンを構築する. • ソフトウェア資源をWWWから収集し,ユーザに提供する. • ソフトウェア資源とは,ソースコードやソフトウェアの実行ファイル,開発日記や Tips など,ソフトウェア開発に役立ちそうな公開ファイル全般を指す. • 本発表では,java のソースコードにターゲットを絞る.
ソフトウェア検索 • 利用者支援 • ソフトウェアを利用するために,ソフトウェアの名称やだいたいの働きをキーとして,検索する. • 開発者支援 • ソフトウェア開発の手助けとするために,行数や変数の数,使っているパッケージやメソッドなどをキーとしてソースコードなどを検索する.
ソフトウェア検索(利用者支援) • 登録型ソフトウェアライブラリ • 窓の杜,Vector,Download. COM など. • 管理者の選んだオンラインソフトなどを説明文とともにデータベースに納めておき,キーワードによる全文検索を行う. 窓の杜 Vector
ソフトウェア検索(利用者支援・開発者支援)ソフトウェア検索(利用者支援・開発者支援) • 登録型プロジェクトライブラリ,登録型ソースコードライブラリ • SourceForge や Layer-8 など. • 登録されているプロジェクトやソースコードに対して,キーワードで検索を行う. SourceForge Layer-8 Technology
ソフトウェア検索(検索エンジン) • これらのサービスはデータベースを人手で作っており,WWW 全体を対象に検索できない. • WWW検索エンジン+ブラウジング • クエリを入力し,その結果の周辺を人手でブラウジングし,情報を集める. ex) java のソーティングに関するソースコードを得たい場合,「java sort」とクエリを作って検索し,その周辺をブラウジングする. • 手間と時間がかかる.
ソフトウェア検索(開発者支援) • あるプログラムが作りたくて,参考になりそうなコードを読みたい. • あるクラス,パッケージの典型的な使い方が知りたい. • あるアルゴリズムについて,コメントが多く書いてあるコードを読みたい. • 特定の型の変数を引数と返り値に持つメソッドを知りたい. ソフトウェア資源を事前に収集して解析し,検索できるように しておかなければならない.
提案手法 集めた資源を解析し, データベースに納める. WWW 解析データ ユーザからのクエリに対し, 適切な資源を提供する. 解析 検索 収集 インタフェース 巡回ロボットを用いて,ソフトウェア資源を 収集する. 検索結果 ソフトウェア資源 収集データ ・資源へのポインタ (url) ・解析結果 クエリ ユーザ
収集(基本方針) • ソフトウェア資源がなさそうなところは極力巡回しない. • WWWすべてを網羅して巡回することは不可能. • 巡回の基本的な戦略 ソフトウェア資源が存在しそうなところを起点として巡回を始める. 巡回しながら簡単な見積もりを行い,巡回路を制御する.
起点URLと,巡回アルゴリズムによって 巡回ロボットは性格付けがなされる. ソフトウェア資源収集用に工夫する. 収集部(巡回ロボット) • 巡回ロボットの一般的なアルゴリズム. 巡回の中心となるポイント. 選んだ URL を新たな起点とする. 起点URL http://www.aist-nara.ac.jp/ http:// ・・・ http:// ・・・ http:// ・・・ http:// ・・・ http:// ・・・ どれを優先的に巡回するか. 巡回アルゴリズム 巡回ロボット 受け取った URLを解析し,(Aタグを抽出) 新たに URL を得る.
収集部(WWWの特徴) • ページはリンクによって連結されているが,連結されるページは共通のトピックスを扱っている傾向がある. • 料理のレシピを公開しているサイトは同じようにレシピを公開しているサイトにリンクする傾向にあり,またソフトウェア資源を公開しているサイトは同じようなサイトにリンクする傾向がある. • 巨視的に見ると,共通のトピックスを持ったコミュニティが形成されているといえる. ソフトウェア資源を扱っているコミュニティ内を巡回する.
Search Engines ? Query コミュニティ内でよくでる単語 コミュニティの近くの URL を得るために,検索エンジンを使う. 収集部(起点URL) • ソフトウェア資源を扱っているコミュニティを発見する. WWW コミュニティ
? 収集部(見積もり) • ある程度探索した時点での資源の発見具合によって,探索の深さを制御する. Search Engines 探索 ソフトウェア資源 収集データ × 検索結果 Query 見込みが無さそうなら中断, まだありそうなら深く探索する. n 回たどった時点で,資源が m 個見つかっていれば,さらに n 回たどる. その後,さらに n 回たどった時点で m 個見つかれば n 回延長する. (n, m : 定数)
収集部(巡回アルゴリズム) • WWW ページ構造の特徴を生かし,巡回路を決定する. 外部へのリンク 目的のリンクを優先的に探索できるように, 特徴を発見する. ・ URL (dl, productsなど) ・ リンクの文字列 (ダウンロード, softwareなど) ソフトウェア資源
収集部(巡回アルゴリズム) • ひとつのサイトにあまり固執することなく,次へ進む. • ソフトウェアとは関係のないサイトに陥ってしまうことを避ける. 外部へのリンク 同一ドメイン内では, n’回たどった時点で,資源が m’個 見つかっていれば,さらに n’回たどる. ( n’ < n, m’ < m )
解析部 • 収集したソフトウェア資源を解析し,インデクシングを行う. • 圧縮ファイルは解凍し,ソースコードや関連ドキュメントを取り出す. • 慣例的に説明に用いられるテキスト(readme.txt など)を資源の説明としてデータベースに納める. • 資源を発見したページに出現する特徴的な単語や,タイトルタグなどに含まれる文字列を資源の説明としてデータベースに納める.
解析部 • ソフトウェアメトリクスとシンボル情報を取得する. • ソフトウェアメトリクス • LOC • サイクロマティック数 • 演算子数 • ・・ • シンボル情報 • パッケージ名 • クラス名 • メソッド名 • メソッドの引数の型と数・返り値の型 • ・・
解析部 • クラスとメソッドにテーブルを分けて,データベースに納める. • classTable • date : DATETIME • className : CHAR • LOC : INT • numMethods : INT • ・・・ • methodTable • date : DATETIME • methodName : CHAR • class : CHAR • LOC : INT • ・・・
検索部 • ユーザからクエリを受け取り情報を提供する. • データベースから,SQL 文を用いてデータを取り出す. select * from classTable where className like ‘%bubbleSort%’ and LOC < 30 and .. • 簡単に SQL 文を作成できるインタフェースを用意する. • ブラウザ
システムの試作 • プロトタイプの実装を行った. • ソフトウェアメトリクスの測定には,†javancss 21.41 を用い,測定したパラメータは以下の通り. • パッケージ名,クラス名,メソッド名 • メソッド数 • 引数の数と型 • コード行数,コメント行数 • javadoc 形式でコメントが記述されているかどうか • 約24時間巡回ロボットを運用した. • クラス数約 2,000 個 • メソッド数約 35,000 個 †http://www.kclee.com/clemens/java/javancss/
システムの試作(想定検索1) • 「バブルソート」のアルゴリズムが知りたい! • メソッド名を対象に「bubblesort」で検索. • Google で「bubblesort java」で検索すると,一応コードは得られるが,わざわざhtml形式に書き直してくれている解説サイトなどで,量は少ない.
システムの試作(想定検索1) • SortAlgo.bubbleSort() public class SortAlgo { ・・・ int[] intArray;void bubbleSort() { CAT.info( "Entered the sort method."); for(int i = intArray.length -1; i >= 0 ; i--) { NDC.push("i=" + i); OUTER.debug("in outer loop."); for(int j = 0; j < i; j++) { NDC.push("j=" + j); INNER.debug( "in inner loop."); if(intArray[j] > intArray[j+1]) swap(j, j+1); NDC.pop(); } NDC.pop(); } } ・・・
システムの試作(想定検索2) • singleton パターンについて,コメントが多く書かれたソースを見たい! • クラス名を対象に,「singleton」を含み,javadoc が50%以上のものを検索.
システムの試作(想定検索3) • メソッド名に「Stream」を含み,引数として String を受け取るメソッドを検索.
まとめ • 開発者支援を目的として,WWWを対象にソフトウェア資源をその特徴を生かして検索できるシステム構築法を述べた. • プロトタイプを作成し,いくつかの想定検索を通して,現行のWWW検索エンジンでは不可能な検索の実現を確認した.
今後の課題 • 検索エンジンのクエリを自動的に改良できるようにする. • 資源が発見されたページの特徴的な単語を加える. • 巡回路の制御法の最適値を実験によって確かめる. • インタフェースを考える. • 検索結果の表示順を考える. • 利用頻度や,利用関係をもとにスコアリングを行う.