ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用...

22
ソソソソソソソソ ソソソソソソ ソソソ ・・ - ソソソソソソソソソソソソソソ - ソソ ソ ( ソソソソソソ ) ソソ ソソ ( ソソソソソ )

Upload: clint

Post on 13-Feb-2016

46 views

Category:

Documents


0 download

DESCRIPTION

ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -. 山本 晋一郎 ( 愛知県立大学 ) 阿草 清滋 ( 名古屋大学 ). 発表の流れ. ☆ 背景 ソースプログラム・ブラウザ SPIE ソフトウェア・アーカイブ・サイト 関数呼出依存グラフを用いたライブラリの用例検索 今後の課題. 背景 (1). Corpus ( 文書・法典などの ) 集成、収集 ; 大全、全集 : the entire corpus of Old English poetry 古英詩の完全な集大成 コーパス , 資料体 : 言語学的分析のために収集された一群のデータ - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

ソースプログラム・アーカイブ・サイト

- 関数依存グラフと検索への応用 -山本 晋一郎 ( 愛知県立大学 )

阿草 清滋 ( 名古屋大学 )

Page 2: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

発表の流れ

• ☆ 背景• ソースプログラム・ブラウザ SPIE• ソフトウェア・アーカイブ・サイト• 関数呼出依存グラフを用いたライブラ

リの用例検索• 今後の課題

Page 3: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

背景 (1)

• Corpus– ( 文書 法典などの・ ) 集成、収集 ; 大全、全集 :

the entire corpus of Old English poetry古英詩の完全な集大成

– コーパス , 資料体 :言語学的分析のために収集された一群のデータ

• 言語資源Corpus + 作成・利用支援環境

Page 4: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

背景 (2)

• 計算機可読な言語資源の重要性– 日本語入力 FEP 、音声認識、機械翻訳、意味

抽出、語学教育などへの応用– Corpus linguistics (Brown Corpus 以来 )

• 米国 LCD, 欧州 ELRA

Page 5: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

Corpus Programming?

• 蓄積された Program Corpus に基づいたソフトウェア ( プログラム ) 開発支援は可能か ?– 開発

• Programming Navigation三浦 他 : プログラミングナビゲーションのための関数呼び出し依存グラフ (2000)

• 検索

– 品質チェック• 事例に基づいたコーディング・チェッカー

河合 他 : 既存プログラムからの規範パターン獲得とそれに基づくコーディン (1997)

– 教育

Page 6: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

要素技術は ?

• Corpus 作成支援SPIE: 自動的なタグ付けXML タグセット

• Concordancer自然言語は KWIC, プログラム断片は ?

• アプリケーションProgramming Navigation用例検索クラスタリング (100 万件ヒットシンドローム )

Page 7: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

発表の流れ

• 背景• ☆ ソースプログラム・ブラウザ SPIE• ソフトウェア・アーカイブ・サイト• 関数呼出依存グラフを用いたライブラ

リの用例検索• 今後の課題

Page 8: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

SPIE (Source Program Information Explorer)

• WWW ブラウザ上で実現したソースプログラムブラウザ (Browser on Browser)

• 参照と検索機能– カテゴリ ( ファイル,関数 , 大域変数 , 局所変数 , 引

数 , 型 , 構造体メンバ , 列挙子 , マクロ , 定数 , タグ , ソフトウェア関連文書 ) を区別した参照・検索

– 定義と参照 ( 左辺値と右辺値 ) を区別した参照・検索

• 前処理によってスキップされる行を色分け (#ifdef … #endif)

Page 9: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -
Page 10: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -
Page 11: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

関連研究 (1)

• 独立したブラウザ– Source Navigator ( 旧 Cygnus, 現 RedHat)

• C, C++, Java, Tcl, Fortran, CORBA IDL • クラス、関数、変数のクロスリファレンス• 統合開発環境 ( 構成管理・ビルダ・デバッガ )• API は貧弱

– SoftBench (HP)• ファイル,関数,大域変数,列挙子,型,構造体に対する参

照機能• 識別子の出現を参照,宣言,定義,使用,変更の 5 種類に分

Page 12: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

関連研究 (2)

• Browser on Browser アプローチ– GLOBAL (Shigio Yamaguchi)

• C, C++, Yacc, Java• ファイル、関数、マクロに対する参照機能• エディタのタグ機能と連携• 広く普及している (FreeBSD の開発プロジェクトなど )

– LXR (Linux Cross-Reference by [email protected])• マクロ、型、タグ、列挙子、関数、変数に対する参照機能• スコープのチェックを行っていないため不正確

Page 13: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

参照・検索機能の比較

SPIE SoftBench GLOBAL LXRファイル ○ ○ ○ ○

関数 ○ ○ ○ △大域変数 ○ ○ × △

型 ○ ○ × △タグ ○ × × △

列挙子 ○ ○ × △メンバ変数 ○ ○ × ×

マクロ ○ × × △定数 ○ × × ×

Page 14: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

発表の流れ

• 背景• ソースプログラム・ブラウザ SPIE• ☆ ソフトウェア・アーカイブ・サイト• 関数呼出依存グラフを用いたライブラ

リの用例検索• 今後の課題

Page 15: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

ソフトウェア・ アーカイブ・ サイト

• Open-source software 群の解析結果を蓄積• 利用者は HTML Browser を用いてアクセス• Program Corpus から典型的な使用例を参照する

*.c

*.java

*.xml

ソフトウェ

ア構成

DB

モジュー

SDB

SDB

SDBソフトウェ

ア解析モジュー

*.html

*.html

*.html

Open-source World Sapid Archive Site

解析器

ソフトウェ

ア検索モジュー

Internet

Page 16: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

Sappy の現状

• 自動 FTPFTP (or HTTP) サイトの登録対象ソフトウェアと対象外ファイルの登録

• 自動解析SDB 作成と SPIE による解析正常終了と異常終了の判別

• 対象GNU, FreeBSD

Page 17: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -
Page 18: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

発表の流れ

• 背景• ソースプログラム・ブラウザ SPIE• ソフトウェア・アーカイブ・サイト• ☆ 関数呼出依存グラフを用いたライブ

ラリの用例検索• 今後の課題

Page 19: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

発表の流れ

• 背景• ソースプログラム・ブラウザ SPIE• ソフトウェア・アーカイブ・サイト• 関数呼出依存グラフを用いたライブラ

リの用例検索• ☆ 今後の課題

Page 20: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

多様で柔軟な検索 (ソフトウェア検索空間)

バージョン

エレメント

プロダクト

仕様書マニュアルモジュール仕様書関数仕様書ソースプログラム

ファイルコメント,メモ宣言

アプリケーションミドルウェア

ライブラリOSハードウェア

Page 21: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

多様で柔軟な検索の例 (1)

• エレメントをトラバース– マニュアルとソースプログラムの整合性検査– 関数の使用場所で関数定義のコメントを参照– ある関数に関係するすべてのコメントは ?

• バージョンをトラバース– ある関数はどの版で導入されたのか ?– ある関数を変更した全ての版は ?– ある作業者が変更した全ての関数は ?– CVS との連携

Page 22: ソースプログラム・アーカイブ・サイト - 関数依存グラフと検索への応用 -

多様で柔軟な検索の例 (2)

• プロダクトをトラバース– ライブラリの使用場所でライブラリの定義を参照– アプリケーションとライブラリを跨った検索– #ifdef に切り分けが行われている関数は ?移植性に関するノウハウ

– あるライブラリの典型的な使用方法は ?