バイナリ 形式コンポーネントの収集・解析・検索シス

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