スライド 1

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