ソースプログラム・アーカイブ・サイト -関数依存グラフと検索への応用- 山本 晋一郎 (愛知県立大学) 阿草 清滋 (名古屋大学)
発表の流れ ☆背景 ソースプログラム・ブラウザSPIE ソフトウェア・アーカイブ・サイト 関数呼出依存グラフを用いたライブラリの用例検索 今後の課題
背景(1) Corpus (文書・法典などの)集成、収集; 大全、全集: the entire corpus of Old English poetry 古英詩の完全な集大成 コーパス,資料体: 言語学的分析のために収集された一群のデータ 言語資源 Corpus + 作成・利用支援環境
背景(2) 計算機可読な言語資源の重要性 米国LCD, 欧州ELRA 日本語入力FEP、音声認識、機械翻訳、意味抽出、語学教育などへの応用 Corpus linguistics (Brown Corpus以来) 米国LCD, 欧州ELRA
Corpus Programming? 蓄積されたProgram Corpusに基づいたソフトウェア(プログラム)開発支援は可能か? 開発 Programming Navigation 三浦 他: プログラミングナビゲーションのための関数呼び出し依存グラフ(2000) 検索 品質チェック 事例に基づいたコーディング・チェッカー 河合 他: 既存プログラムからの規範パターン獲得とそれに基づくコーディン(1997) 教育
要素技術は? Corpus作成支援 SPIE: 自動的なタグ付け XMLタグセット Concordancer 自然言語はKWIC, プログラム断片は? アプリケーション Programming Navigation 用例検索 クラスタリング(100万件ヒットシンドローム)
発表の流れ 背景 ☆ソースプログラム・ブラウザSPIE ソフトウェア・アーカイブ・サイト 関数呼出依存グラフを用いたライブラリの用例検索 今後の課題
SPIE (Source Program Information Explorer) WWW ブラウザ上で実現したソースプログラムブラウザ (Browser on Browser) 参照と検索機能 カテゴリ(ファイル,関数, 大域変数, 局所変数, 引数, 型, 構造体メンバ, 列挙子, マクロ, 定数, タグ, ソフトウェア関連文書) を区別した参照・検索 定義と参照(左辺値と右辺値)を区別した参照・検索 前処理によってスキップされる行を色分け (#ifdef … #endif)
関連研究 (1) 独立したブラウザ Source Navigator (旧Cygnus, 現RedHat) SoftBench (HP) C, C++, Java, Tcl, Fortran, CORBA IDL クラス、関数、変数のクロスリファレンス 統合開発環境(構成管理・ビルダ・デバッガ) APIは貧弱 SoftBench (HP) ファイル,関数,大域変数,列挙子,型,構造体に対する参照機能 識別子の出現を参照,宣言,定義,使用,変更の5種類に分類
関連研究 (2) Browser on Browserアプローチ GLOBAL (Shigio Yamaguchi) C, C++, Yacc, Java ファイル、関数、マクロに対する参照機能 エディタのタグ機能と連携 広く普及している(FreeBSDの開発プロジェクトなど) LXR (Linux Cross-Reference by lxr@linux.no) マクロ、型、タグ、列挙子、関数、変数に対する参照機能 スコープのチェックを行っていないため不正確
参照・検索機能の比較
発表の流れ 背景 ソースプログラム・ブラウザSPIE ☆ソフトウェア・アーカイブ・サイト 関数呼出依存グラフを用いたライブラリの用例検索 今後の課題
ソフトウェア・ アーカイブ・ サイト Open-source World Sapid Archive Site *.c SDB 解 析 器 ソフトウェア解析モジュール ソフトウェア検索モジュール SDB *.html Internet *.java SDB *.html *.xml SDB *.html Open-source software 群の解析結果を蓄積 利用者は HTML Browser を用いてアクセス Program Corpusから典型的な使用例を参照する
Sappyの現状 自動FTP FTP (or HTTP)サイトの登録 対象ソフトウェアと対象外ファイルの登録 自動解析 SDB作成とSPIEによる解析 正常終了と異常終了の判別 対象 GNU, FreeBSD
発表の流れ 背景 ソースプログラム・ブラウザSPIE ソフトウェア・アーカイブ・サイト ☆関数呼出依存グラフを用いたライブラリの用例検索 今後の課題
発表の流れ 背景 ソースプログラム・ブラウザSPIE ソフトウェア・アーカイブ・サイト 関数呼出依存グラフを用いたライブラリの用例検索 ☆今後の課題
多様で柔軟な検索 (ソフトウェア検索空間) エレメント 仕様書 マニュアル モジュール仕様書 関数仕様書 ソースプログラム ファイル コメント,メモ 宣言 式 バージョン アプリケーション ミドルウェア ライブラリ OS ハードウェア プロダクト
多様で柔軟な検索の例 (1) エレメントをトラバース バージョンをトラバース マニュアルとソースプログラムの整合性検査 関数の使用場所で関数定義のコメントを参照 ある関数に関係するすべてのコメントは ? バージョンをトラバース ある関数はどの版で導入されたのか ? ある関数を変更した全ての版は ? ある作業者が変更した全ての関数は ? CVSとの連携
多様で柔軟な検索の例 (2) プロダクトをトラバース ライブラリの使用場所でライブラリの定義を参照 アプリケーションとライブラリを跨った検索 #ifdef に切り分けが行われている関数は ? 移植性に関するノウハウ あるライブラリの典型的な使用方法は ?