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

ソースプログラム・アーカイブ・サイト
-関数依存グラフと検索への応用山本 晋一郎 (愛知県立大学)
阿草 清滋 (名古屋大学)
発表の流れ
•
•
•
•
☆背景
ソースプログラム・ブラウザSPIE
ソフトウェア・アーカイブ・サイト
関数呼出依存グラフを用いたライブラリの
用例検索
• 今後の課題
背景(1)
• Corpus
– (文書・法典などの)集成、収集; 大全、全集:
the entire corpus of Old English poetry
古英詩の完全な集大成
– コーパス,資料体:
言語学的分析のために収集された一群の
データ
• 言語資源
Corpus + 作成・利用支援環境
背景(2)
• 計算機可読な言語資源の重要性
– 日本語入力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)
• 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 [email protected])
• マクロ、型、タグ、列挙子、関数、変数に対する参照機能
• スコープのチェックを行っていないため不正確
参照・検索機能の比較
ファイル
関数
大域変数
型
タグ
列挙子
メンバ変数
マクロ
定数
SPIE
SoftBench
GLOBAL
LXR
○
○
○
○
○
○
○
○
○
○
○
○
○
×
○
○
×
×
○
○
×
×
×
×
×
×
×
○
△
△
△
△
△
×
△
×
発表の流れ
•
•
•
•
背景
ソースプログラム・ブラウザSPIE
☆ソフトウェア・アーカイブ・サイト
関数呼出依存グラフを用いたライブラリの
用例検索
• 今後の課題
ソフトウェア・ アーカイブ・ サイト
Open-source World
*.c
*.java
Sapid Archive Site
ソ
フ
ト
ウ
ェ
ア
構
成
DB
*.xml
モ
ジ
ュ
ー
ル
SDB
解
析
器
SDB
SDB
ソ
フ
ト
ウ
ェ
ア
解
析
モ
ジ
ュ
ー
ル
*.html
*.html
*.html
• Open-source software 群の解析結果を蓄積
• 利用者は HTML Browser を用いてアクセス
• Program Corpusから典型的な使用例を参照する
ソ
フ
ト
ウ
ェ
ア
検
索
モ
ジ
ュ
ー
ル
Internet
Sappyの現状
• 自動FTP
FTP (or HTTP)サイトの登録
対象ソフトウェアと対象外ファイルの登録
• 自動解析
SDB作成とSPIEによる解析
正常終了と異常終了の判別
• 対象
GNU, FreeBSD
発表の流れ
•
•
•
•
背景
ソースプログラム・ブラウザSPIE
ソフトウェア・アーカイブ・サイト
☆関数呼出依存グラフを用いたライブラリ
の用例検索
• 今後の課題
発表の流れ
•
•
•
•
背景
ソースプログラム・ブラウザSPIE
ソフトウェア・アーカイブ・サイト
関数呼出依存グラフを用いたライブラリの
用例検索
• ☆今後の課題
多様で柔軟な検索 (ソフトウェア検索空間)
エレメント
仕様書
マニュアル
モジュール仕様書
関数仕様書
ソースプログラム
ファイル
コメント,メモ
宣言
式
アプリケーション
ミドルウェア
OS ライブラリ
ハードウェア
プロダクト
バージョン
多様で柔軟な検索の例 (1)
• エレメントをトラバース
– マニュアルとソースプログラムの整合性検査
– 関数の使用場所で関数定義のコメントを参照
– ある関数に関係するすべてのコメントは ?
• バージョンをトラバース
–
–
–
–
ある関数はどの版で導入されたのか ?
ある関数を変更した全ての版は ?
ある作業者が変更した全ての関数は ?
CVSとの連携
多様で柔軟な検索の例 (2)
• プロダクトをトラバース
– ライブラリの使用場所でライブラリの定義を参照
– アプリケーションとライブラリを跨った検索
– #ifdef に切り分けが行われている関数は ?
移植性に関するノウハウ
– あるライブラリの典型的な使用方法は ?