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

24
ババババババババババババババ ババ バババ バババババババババ ・・ バババババババババババババ ババババババババ ババ バ バ 1 バ SPARS ババババババババババババ

description

第 1 回 SPARS 研究集会ミーティング資料. バイナリ形式コンポーネントの 収集・解析・検索システムの開発. 奈良先端科学技術大学院大学 情報科学センター 飯田 元. 発表内容. ソフトウェア部品の形式と検索方法 バイナリ部品の検索と再利用 関連研究 現状. ソフトウェア部品の形式. ソースコード形式 ファイル,パッケージ,クラス,関数,スライス? 修正可能 ⇔ コンパイル必要 プラットフォームに非依存 ⇔ 言語に依存 詳細な解析が可能:構造解析,コメント抽出など バイナリ形式 アプリケーション,ライブラリ,コンポーネント,メソッド? - PowerPoint PPT Presentation

Transcript of バイナリ形式コンポーネントの 収集・解析・検索システムの開発

Page 1: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

バイナリ形式コンポーネントの収集・解析・検索システムの開発 奈良先端科学技術大学院大学

情報科学センター飯田 元

第 1回 SPARS 研究集会ミーティング資料

Page 2: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

発表内容1. ソフトウェア部品の形式と検索方法2. バイナリ部品の検索と再利用3. 関連研究4. 現状

Page 3: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

ソフトウェア部品の形式• ソースコード形式

– ファイル,パッケージ,クラス,関数,スライス?– 修正可能⇔コンパイル必要– プラットフォームに非依存⇔言語に依存– 詳細な解析が可能:構造解析,コメント抽出など

• バイナリ形式– アプリケーション,ライブラリ,コンポーネント,

メソッド?– 修正困難⇔コンパイル不要– プラットフォーム依存⇔言語に非依存– 詳細な解析が困難: IF の確認程度

Page 4: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

ソフトウェア部品の検索• 基本的に,カタログをもとにした検索を行うが,

部品本体を解析する必要がしばしば存在する– 本体とカタログ情報の対応が壊れている可能性があ

る– カタログを別途作成するにはコストがかかる

• 部品本体から自動的に収集できる情報をもとに検索できることが望ましい– ソース部品の場合には,コメントや構造解析から得

られる情報を利用できる– バイナリ部品の場合には,直接的な解析は困難なの

で部品アーキテクチャ固有 IF の情報を利用する

Page 5: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

本研究のターゲット:バイナリ部品の利用パターン

バイナリ部品(コンポーネント)の利用事例を収集・蓄積して,検索可能にし,再利用する– 接続関係– 動作環境– 利用者のプロフィール– 同時取得コンポーネントetc.

Page 6: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

バイナリ部品形式(アーキテクチャ)の例• Java Beans  (本研究の対象)

– Sun の提唱する Java 用の部品形式– Java に依存

• COM ( Component Object Model ), COM+ , DCOM ,Active-X– Microsoft の提唱する部品アーキテクチャ– インタフェース情報をレジストリに登録して用いる– ActiveX (ネットワーク指向の GUI 部品)も COM に基づいた

技術• CORBA オブジェクト

– OMG で制定された分散オブジェクトのインタフェース規格– IDL で IF 記述– サービス検索等の仕様もある.– 言語・プラットフォームに非依存

Page 7: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

関連研究(インタフェースに基くコンポーネント検索)• 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 の検索機構– 検索にあたり、有向置換性距離(ユーザ要求とリ

ポジトリ中のコンポーネント間の構造・振舞・粒度に関する詳細な適合度合い)を使用する

Page 8: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

コンポーネント利用情報の収集と共有• 複数のコンポーネント利用者から利用情報(事例)をネッ

トワークを通じて収集し共有する.• 他の利用者の利用情報を取得・閲覧し,再利用する.

コンポーネント利用者

・自分の利用情報の抽出 / 送信・他人の利用情報の閲覧 / 再利用

コンポーネントウェアハウス

カタログ仕様書

利用情報利用情報の収集と

検索

Page 9: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

コンポーネント利用情報の例

• 接続関係:コンポーネント同士の結合に関する情報

• 動作環境: 利用者が使用している OS のバージョン,利用地域等

• 利用者:そのコンポーネントを利用した者の名前, E-mail アドレス,所属部署等

• 同時取得コンポーネント:そのコンポーネント取得時 , 同時に取得されたコンポーネントのリスト

Page 10: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

アプリケーション

コンポーネント γ

JavaBeans における接続関係• あるコンポーネントが生成するイベントをある

コンポーネントの持つメソッドの呼出に対応付けることで,接続関係が作成される

• ビルダツールを利用した場合,ツールが生成するコード(アダプタクラス)の中で定義される

コンポーネント αイベント A ・メソッド X

・メソッド Y・メソッド Z

コンポーネント βアダプタクラス 001

アダプタクラス 002イベント B

Page 11: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

Java Beans 間の接続例

イベントソースオブジェクト ID : 365781部品名(クラス名) : OurButton生成イベント : actionPerformed

ターゲットオブジェクト ID : 5922857部品名(クラス名) : Juggler対応メソッド : startJuggling

Page 12: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

接続情報の活用方法• 具体的な開発事例を利用者に提示できる• 既知のコンポーネントを手がかりに,未知のコン

ポーネントの発見を可能にする

L3予測による検索L2思い出しによる検索

L1記憶による検索

R: 実際のコンポーネントの存在空間L4利用者にとって未知のコンポーネントの存在空間

C1 C2 C3

検索システムに明示的に指示して発見されたコンポーネント

接続関係をたどって発見されたコンポーネント

Page 13: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

その他の利用情報• 動作環境

– 仕様書で推奨されている動作環境以外での動作実績を知ることができる?

• 利用者プロファイル– 情報交換に有用?

• 同時取得コンポーネント– 機能的に互いに関連を持つ可能性が高い?

Page 14: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

各々の接続情報を閲覧し,コンポーネントを結合していく.

利用情報活用のシナリオ例:ブラウザの作成

HTML ParserComponent

(HTML の解釈と描画 )

利用者の動作環境と「 HTML パーサ」を Key としてコンポーネントを検索し,取得する.

完成後, URL Log Manager Component の動作に異常が発見されたので,このコンポーネントの利用者に連絡しノウハウを収集する.

Web Browser

また, HTML Parser の同時取得コンポーネントを閲覧することによって, Button Component, URL Log Manager Component が発見される.

Button Component

( 戻る )

URL Log Manager Component(URL の履歴を保存 )

Button Component

( 進む )

Text Field Component(URL の入力と編集 )

接続関係を閲覧して,過去に接続されたコンポーネントを調査すると, Text Field Component が発見された.

Page 15: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

検索システムの試作• コンポーネント( Bean )と利用情報を登録

し,検索できる専用のサーバ( Servlet )• アプリケーション開発履歴から接続情報等を

収集,サーバに登録する改造版 BDK

Page 16: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

抽出機能BDK

利用情報の収集・登録• 接続関係・動作環境は,改造 BDK 利用時に抽出する• 収集された利用情報は,検索システム中のコンポー

ネントウェアハウスに送信・登録される• 利用者,同時取得コンポーネントは,検索システム

利用時に収集する.

仕様書

コンポーネントウェアハウスカタログ

開発環境送信機能検索システム

動作環境接続関係 利用情報送信

Page 17: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

開発者(コンポーネント開発者)

利用情報を含む検索結果コンポーネントをダウンロード

登録

結果の提示

検索文•仕様を対象•利用情報を対象 検索

・コンポーネント・仕様書 コンポーネントウェアハウスコンポーネントカタログ仕様書利用情報

登録利用情報

利用者(アプリケーション開発者)

ソフトウェアに組込み利用

検索システム検索システム

利用情報の収集と送

コンポーネントの検索

Page 18: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

コンポーネント検索:①クエリ画面• 利用者が送信した検索文をもとにコンポーネントウェアハ

ウス内を検索する• 検索文として仕様書及び蓄積された利用情報を対象とするこ

とが可能

Page 19: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

コンポーネント検索:②検索結果

各リンクをたどり,利用情報を閲覧可能

Page 20: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

接続利用情報の提示例

Page 21: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

利用者情報,同時取得部品の提示例

Page 22: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

考察• 利点

– 接続情報を用いると,既知のコンポーネントを手がかりに,未知のコンポーネントを発見することができる

– より具体的な開発事例の収集ができる

• 問題点– 現状では利用情報の収集を改造 BDK の利用に頼っている→バイナリを直接解析できる必要がある

– 誤った利用情報が収集される可能性もあるため,利用情報はリリースされたソフトウェアから収集する必要がある.

– 不具合や誤りが見つかれば,登録情報も訂正する必要がある.

→ 不具合の収集・ユーザ登録が重要となる.

Page 23: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

今後の方針と予定• 改造 BDK に頼らず, Java アプリケーションから直

接,接続利用情報を収集する機能の実装– 原理的にはイントロスペクション等の機能により可能– jar ファイル, class ファイル等を収集するクロウラが必

• 収集された接続利用情報の有効な利用方法の検討– ランキング– デザインパターンの抽出– アプリケーション開発時の支援

• コンポーネントの品質に関する情報の収集・提供– エラー情報の収集方法の検討– OO メトリクスに基く検索方法の検討

Page 24: バイナリ形式コンポーネントの 収集・解析・検索システムの開発

リフレクションとイントロスペクション• リフレクション

– 実行時に任意のクラスのフィールド、コンストラクタ、メソッドに関する情報を取得する機能

– Class, Field, Constructor, Method 等のクラスによって実現される

• イントロスペクション– Bean のプロパティ、イベント、メソッドに関す

る情報を取得する機能(リフレクションを用いて実現)

– Introspector, SimpleBeanInfo, BeanDescriptor, EventSetDescriptor 等のクラスによって実現される