関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現 大阪大学基礎工学部情報科学科 井上研究室 中山崇
開発履歴閲覧システム CVSなどの版管理システムに蓄積された開発履歴を視覚的に閲覧することが出来るシステム 版管理システム:プロジェクトの開発履歴を蓄積、管理するシステム データの表示にWebブラウザを用いることで、GUIの為の新たなシステムの導入が不必要なものもある (例)CVSWeb, ViewCVS, Bonsai 開発履歴情報 Web ブラウザ 開発者 版管理システム CVS 開発履歴 閲覧システム 開発履歴情報の要求 Web ブラウザ 開発者 開発履歴情報の 取得・解析 2004/2/26 特別研究報告
開発履歴閲覧システムの機能 ディレクトリ構造の表示 各ファイルの更新履歴の閲覧 任意のリビジョン間の差分の表示 ディレクトリ内に含まれるファイル・サブディレクトリの表示 各ファイルの更新履歴の閲覧 更新日時、更新作業者、ログメッセージなどの関連情報と共に表示 任意のリビジョン間の差分の表示 追加・削除・変更された行がわかりやすいように色別にして表示 各リビジョンにおけるファイルの内容の表示 2004/2/26 特別研究報告
既存の履歴閲覧システムの問題点 リビジョン検索機能を持たないものがある プロジェクトに精通していないユーザは、知りたい修正箇所を特定するのは困難 あるリビジョンから時間的に対応する他のファイルのリビジョンの取得が困難 あるリビジョンが参照している関数がその時点でどのような実装になっているかの確認が困難 開発履歴の追跡をファイル単位でしか行えない 複数のファイルのリビジョンヒストリをまとめて追跡したい 2004/2/26 特別研究報告
研究の目的 修正箇所の特定とその周辺の実装の、その時点での詳細な情報を確認したい 開発履歴の追跡をファイル単位だけではなく、ディレクトリ単位にまで範囲を広げて行いたい これらの情報をわかりやすく提供する開発履歴 理解支援システムCREBASS (Cvs REpository Browse And Search System)を試作 2004/2/26 特別研究報告
CREBASSの機能 CVSWebのような、CVSリポジトリ内の開発履歴を表示する機能を持つ 以下のような独自な機能を持つ リビジョン関係を考慮した関数クロスリファレンス機能 更新日時、更新者、キーワードによるリビジョン検索 リポジトリに起こったイベントを検索、表示する機能 ファイル、およびディレクトリ単位での、行数・編集量・累計commiter数をグラフで表示する機能 修正箇所の確認とその周辺の実装の詳細の確認 ディレクトリ単位まで範囲を広げたリビジョンヒストリの追跡 2004/2/26 特別研究報告
リビジョン関係を考慮した関数クロスリファレンス機能 関数の参照箇所から、そのリビジョンへと更新された時点における定義場所へ移動する機能 対応言語はC言語のみ 参照先のリビジョンを探す際には以下の点を考慮する 参照元のリビジョンの更新時刻を基準として参照先のリビジョンを決定する 出来る限り参照元と同じブランチ上で定義元を探す 2004/2/26 特別研究報告
リビジョン関係を考慮した関数クロスリファレンス機能 定義ファイル名の問い合わせ DH_free (cert->dh_tmp); s3_lib.c 1.57.2.8 OpenSSL_0_9_7-stable 2002/10/15 20:29:28 void DH_free (DH *r){ int i; if (r==NULL) return; dh_lib.c 1.28.2.2 OpenSSL_0_9_7-stable 2002/03/16 23:19:23 関数定義・ 参照情報DB リビジョンヒストリの問い合わせ 2002/10/15 定義元ファイルは crypto/dh/dh_lib.c 同じブランチ上の リビジョンから探す 日時を見て該当する リビジョンを探す crypto/dh/dh_lib.c この関数のこの時点 での定義が見たい dh_lib.cにおいて対応 するリビジョンはどれ? MAIN 2001/9/25 2002/3/9 2002/3/16 2003/1/30 1.29 1.30 1.31 OpenSSL_0_9_7-stable 1.28 1.28.2.1 1.28.2.2 1.28.2.3 2004/2/26 特別研究報告
リビジョン検索機能 更新作業者 更新日時 キーワード 対象ディレクトリ 対象ブランチ 検索結果の ソートの仕方 ファイルパス 所属ブランチ名 リビジョン番号 更新日時 所属ブランチ名 ログメッセージ キーワード 更新作業者 2004/2/26 特別研究報告
ヒストリイベントの検索・表示機能 検索するイベントの指定 イベントを起こしたユーザの指定 検索する期間の指定 検索するディレクトリの指定 検索結果は時系列 で表示される 同時に起こったと 考えられるイベント はまとめて表示する 2004/2/26 特別研究報告
プロジェクトの変遷のグラフ化機能 あるファイル、もしくはディレクトリ下の全てのファイルについて以下の項目の変遷を表したグラフを作成する 総行数 編集量 累計commiter数 複数の対象を1つのグラフに表示することで、互いに比較を行うことが出来る 2004/2/26 特別研究報告
CREBASSの概要 ユーザインター フェース部 DB 作成部 開発者 CVS リポジトリ チェックアウト・コミット 開発履歴情報の要求 の取得・解析 ユーザインター フェース部 CVS リポジトリ Web ブラウザ 開発履歴情報 関数定義 情報の検索 リビジョン 情報の検索 ヒストリ情報 の検索 プロジェクト データの折れ線 グラフの生成 開発履歴情報の解析 関数定義・ 参照情報DB リビジョン 情報DB DB 作成部 ヒストリ 情報DB プロジェクト 情報DB 2004/2/26 特別研究報告
適用実験 OpenSSLの開発から得られたデータを用いる CVSリポジトリ:OpenSSL開発で蓄積された開発履歴 ファイル総数:3556 リビジョン総数:43684 実験の対象としてOpenSSLの開発における、2003年3月17日にリリースされた、セキュリティの修正事例をもとに検証を行う RSA blindingがオンになっていないとき、RSAキーに対してタイミング攻撃を受けやすい この脆弱性をどのようにして修正したかを知りたい 2004/2/26 特別研究報告
RSA blindingをデフォルトでオンにした 適用実験 RSA blindingをデフォルトでオンにした 2003年3月15日から同20日までにコミットされ、 かつキーワードRSAを持つリビジョンを検索する 2004/2/26 特別研究報告
適用実験 しかしこれらの関数の情報 についてはわからなかった 関数クロスリファレンサを 用いて定義を調べる 新たに定義された関数とマクロを用いてRSA blinding のデフォルトでの機能使用を可能にしている 2004/2/26 特別研究報告
適用実験 クリックしてリンク先を表示 CRYPTO_w_lockはCRYPTO_lockの マクロであることがわかった 2004/2/26 特別研究報告
考察 リビジョン検索を用いて目的の修正箇所を特定することが出来た 修正箇所の直前のリビジョンからの差分を表示することで修正内容の確認を行うことが出来た しかし修正箇所で用いられている関数の詳細を直接得ることは出来なかった そこでリビジョン関係を考慮した関数クロスリファレンサを用いることで、修正箇所周辺の実装の詳細を理解することが出来た 2004/2/26 特別研究報告
まとめと今後の課題 版管理システムのリビジョン情報を解析して、開発履歴情報の閲覧・検索を行い、ユーザの開発履歴理解を支援するシステムCREBASSを作成した 実際のソフトウェア開発で蓄積された履歴情報を用いて適用実験を行い、目的の開発履歴情報の閲覧・検索が行えることを確認した リビジョン検索の際に用いるキーワードの抽出の精度向上 関数の参照先を特定する精度の向上 より大規模なリポジトリでの適用実験 2004/2/26 特別研究報告
2004/2/26 特別研究報告
補足:版管理システムの用語について 開発者 リポジトリ:プロダクトの 開発履歴を格納するDB リビジョン:プロダクトの ある時点における状態 1.1 1.2 1.3 リビジョン番号:各リビジョン を識別するための数え上げ 可能な識別子 コミット:データを リポジトリに格納し 新たなリビジョンを 作成すること チェックアウト: リポジトリから 特定のリビジョ ンのコンポーネ ントを取得する こと ブランチ:バグ 修正などのため に、元のリビジョ ン列から分岐した リビジョン列 1.2.2.1 1.2.2.2 ログメッセージ: リビジョンをコミット する際に添える コメント 1.4 ファイル リビジョンツリー:リビジョン列 が木構造を成すことから 開発者 2004/2/26 特別研究報告