Search Engines

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