バイナリ形式コンポーネントの 収集・解析・検索システムの開発 第1回SPARS研究集会ミーティング資料 バイナリ形式コンポーネントの 収集・解析・検索システムの開発 奈良先端科学技術大学院大学 情報科学センター 飯田 元
発表内容 ソフトウェア部品の形式と検索方法 バイナリ部品の検索と再利用 関連研究 現状
ソフトウェア部品の形式 ソースコード形式 バイナリ形式 ファイル,パッケージ,クラス,関数,スライス? 修正可能⇔コンパイル必要 プラットフォームに非依存⇔言語に依存 詳細な解析が可能:構造解析,コメント抽出など バイナリ形式 アプリケーション,ライブラリ,コンポーネント,メソッド? 修正困難⇔コンパイル不要 プラットフォーム依存⇔言語に非依存 詳細な解析が困難:IFの確認程度
ソフトウェア部品の検索 基本的に,カタログをもとにした検索を行うが,部品本体を解析する必要がしばしば存在する 本体とカタログ情報の対応が壊れている可能性がある カタログを別途作成するにはコストがかかる 部品本体から自動的に収集できる情報をもとに検索できることが望ましい ソース部品の場合には,コメントや構造解析から得られる情報を利用できる バイナリ部品の場合には,直接的な解析は困難なので部品アーキテクチャ固有IFの情報を利用する
本研究のターゲット:バイナリ部品の利用パターン バイナリ部品(コンポーネント)の利用事例を収集・蓄積して,検索可能にし,再利用する 接続関係 動作環境 利用者のプロフィール 同時取得コンポーネント etc.
バイナリ部品形式(アーキテクチャ)の例 Java Beans (本研究の対象) Sunの提唱するJava用の部品形式 Javaに依存 COM(Component Object Model), COM+,DCOM,Active-X Microsoftの提唱する部品アーキテクチャ インタフェース情報をレジストリに登録して用いる ActiveX(ネットワーク指向のGUI部品)もCOMに基づいた技術 CORBAオブジェクト OMGで制定された分散オブジェクトのインタフェース規格 IDLでIF記述 サービス検索等の仕様もある. 言語・プラットフォームに非依存
関連研究(インタフェースに基くコンポーネント検索) Agora (http://www.sei.cmu.edu/cbs/agora.html) イントロスペクションを用いたコンポーネント検索エンジン(Java, CORBA, Active-X対応) RetrievalJ(http://www.fuka.info.waseda.ac.jp/~washi/retrievalj/j_index.html) JavaBeansの検索機構 検索にあたり、有向置換性距離(ユーザ要求とリポジトリ中のコンポーネント間の構造・振舞・粒度に関する詳細な適合度合い)を使用する
コンポーネント利用情報の収集と共有 複数のコンポーネント利用者から利用情報(事例)をネットワークを通じて収集し共有する. 他の利用者の利用情報を取得・閲覧し,再利用する. コンポーネント 利用者 コンポーネント ウェアハウス カタログ 仕様書 利用情報 ・自分の利用情報の抽出/送信 ・他人の利用情報の閲覧/再利用 利用情報の収集と検索
コンポーネント利用情報の例 接続関係:コンポーネント同士の結合に関する情報 動作環境: 利用者が使用しているOSのバージョン,利用地域等 利用者:そのコンポーネントを利用した者の名前,E-mailアドレス,所属部署等 同時取得コンポーネント:そのコンポーネント取得時, 同時に取得されたコンポーネントのリスト
JavaBeansにおける接続関係 あるコンポーネントが生成するイベントをあるコンポーネントの持つメソッドの呼出に対応付けることで,接続関係が作成される ビルダツールを利用した場合,ツールが生成するコード(アダプタクラス)の中で定義される アプリケーション コンポーネントα コンポーネントβ イベントA アダプタクラス001 ・メソッド X ・メソッド Y ・メソッド Z コンポーネントγ アダプタクラス002 イベントB
Java Beans間の接続例 イベントソース オブジェクトID : 365781 部品名(クラス名) : OurButton 生成イベント: actionPerformed ターゲット オブジェクトID : 5922857 部品名(クラス名) : Juggler 対応メソッド: startJuggling
接続情報の活用方法 具体的な開発事例を利用者に提示できる 既知のコンポーネントを手がかりに,未知のコンポーネントの発見を可能にする 検索システムに明示的に指示して 発見されたコンポーネント R:実際のコンポー ネントの存在空間 C1 C3 L3 予測に よる検索 L2 思い出し による検索 L1 記憶に よる検索 C2 L4 利用者にとって未知のコンポーネントの 存在空間 接続関係をたどって発見されたコンポーネント
その他の利用情報 動作環境 利用者プロファイル 同時取得コンポーネント 仕様書で推奨されている動作環境以外での動作実績を知ることができる? 情報交換に有用? 同時取得コンポーネント 機能的に互いに関連を持つ可能性が高い?
利用情報活用のシナリオ例: ブラウザの作成 Web Browser また,HTML Parserの同時取得コンポーネントを閲覧することによって,Button Component, URL Log Manager Component が発見される. Button Component (戻る) URL Log Manager Component (URLの履歴を保存) (進む) HTML Parser Component (HTMLの解釈と描画) 利用者の動作環境と「HTMLパーサ」をKeyとしてコンポーネントを検索し,取得する. 各々の接続情報を閲覧し,コンポーネントを結合していく. 接続関係を閲覧して,過去に接続されたコンポーネントを調査すると,Text Field Componentが発見された. Text Field Component (URLの入力と編集) 完成後, URL Log Manager Componentの動作に異常が発見されたので,このコンポーネントの利用者に連絡しノウハウを収集する.
検索システムの試作 コンポーネント(Bean)と利用情報を登録し,検索できる専用のサーバ(Servlet) アプリケーション開発履歴から接続情報等を収集,サーバに登録する改造版BDK
利用情報の収集・登録 接続関係・動作環境は,改造BDK利用時に抽出する 収集された利用情報は,検索システム中のコンポーネントウェアハウスに送信・登録される 利用者,同時取得コンポーネントは,検索システム利用時に収集する. 開発環境 検索システム BDK 送信 機能 コンポーネント ウェアハウス 抽出機能 カタログ 送信 仕様書 利用情報 接続関係 動作環境
コンポーネントの検索 検索システム 開発者 利用者 (アプリケーション 開発者) ・コンポーネント ・仕様書 検索文 利用情報を含む検索結果 (コンポーネント 開発者) ・コンポーネント ・仕様書 コンポーネント ウェアハウス 登録 コンポーネント 結果の提示 検索文 仕様を対象 利用情報を対象 検索 利用者 (アプリケーション 開発者) カタログ 仕様書 利用情報 コンポーネント をダウンロード 利用情報を含む検索結果 登録 ソフトウェア に組込み利用 利用情報の 収集と送出 利用情報
コンポーネント検索:①クエリ画面 利用者が送信した検索文をもとにコンポーネントウェアハウス内を検索する 検索文として仕様書及び蓄積された利用情報を対象とすることが可能
コンポーネント検索:②検索結果 各リンクをたどり,利用情報を閲覧可能
接続利用情報の提示例
利用者情報,同時取得部品の提示例
考察 利点 問題点 接続情報を用いると,既知のコンポーネントを手がかりに,未知のコンポーネントを発見することができる より具体的な開発事例の収集ができる 問題点 現状では利用情報の収集を改造BDKの利用に頼っている →バイナリを直接解析できる必要がある 誤った利用情報が収集される可能性もあるため,利用情報はリリースされたソフトウェアから収集する必要がある. 不具合や誤りが見つかれば,登録情報も訂正する必要がある. →不具合の収集・ユーザ登録が重要となる.
今後の方針と予定 改造BDKに頼らず,Javaアプリケーションから直接,接続利用情報を収集する機能の実装 原理的にはイントロスペクション等の機能により可能 jarファイル,classファイル等を収集するクロウラが必要 収集された接続利用情報の有効な利用方法の検討 ランキング デザインパターンの抽出 アプリケーション開発時の支援 コンポーネントの品質に関する情報の収集・提供 エラー情報の収集方法の検討 OOメトリクスに基く検索方法の検討
リフレクションとイントロスペクション リフレクション イントロスペクション 実行時に任意のクラスのフィールド、コンストラクタ、メソッドに関する情報を取得する機能 Class, Field, Constructor, Method等のクラスによって実現される イントロスペクション Beanのプロパティ、イベント、メソッドに関する情報を取得する機能(リフレクションを用いて実現) Introspector, SimpleBeanInfo, BeanDescriptor, EventSetDescriptor等のクラスによって実現される