2 - Software Engineering Laboratory

Download Report

Transcript 2 - Software Engineering Laboratory

関数の変更履歴と呼び出し関係に
基づいた開発履歴理解支援システム
中山 崇,松下 誠,井上 克郎
大阪大学大学院情報科学研究科
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
版管理システムCVS
プロダクトの開発履歴を保存・提供するシステム
蓄積された開発履歴には将来の開発に活用できる
情報が多く含まれる
以前の開発についてのより深い理解
他のソフトウェア開発への応用
リポジトリ:プロダクトの
開発履歴を格納するDB
リビジョン:プロダクトの
ある時点における状態
コミット
チェックアウト
リポジトリ
開発者
2004年5月14日
ブランチ:バグ修正などのために元の
リビジョン列から分岐したリビジョン列
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
2
開発履歴閲覧システム
版管理システムに蓄積された開発履歴を視覚的に
閲覧することが出来るシステム
データの表示にWebブラウザを用いることで、GUIの為の新たなシス
テムの導入が不必要なものがある
(例)CVSWeb, ViewCVS, Bonsai
開発履歴情報
開発者
開発者
Web
ブラウザ
Web
ブラウザ
開発履歴
閲覧システム
開発履歴情報の要求
版管理システム
CVS
開発履歴情報の
取得・解析
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
3
開発履歴閲覧システムの利用目的
開発作業内容の理解
過去の開発作業を新たな開発に再利用するために、開
発履歴を理解する必要がある
新規開発参加者は、現在どのように開発が行われてい
るかを確認する必要がある
開発履歴理解における作業量の縮小
版管理システム単体では取得に多大な労力がかかる情
報を手軽に取得したい
履歴情報を理解しやすい様式で表示させたい
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
4
研究の目的
既存の履歴閲覧システムにはいくつか問題点が存在する
リビジョン検索が行えない
適切な関数定義を得ることが出来ない
複数のファイルの開発履歴をまとめて把握できない
これらの問題点は開発者の作業効率の低下を招いている
これらの問題点を解決することで、開発者の負担を減らし、
生産性を挙げたい
開発者に必要な情報をわかりやすく提供する開発履歴
理解支援システムCREBASS (Cvs REpository Browse
And Search System)を試作
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
5
既存の開発履歴閲覧システムの問題点
リビジョン検索機能を持たない
開発履歴の再利用を困難にする
開発された時期を考慮した関数の参照元と定義を
得ることが困難
過去のソースコード理解の障壁となる
開発履歴の追跡を単一ファイルでしか行えない
関連するファイルの開発履歴をまとめて追跡することが出
来ない
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
6
既存の開発履歴閲覧システムの問題点1
リビジョン検索機能を持たない
過去のリビジョンの
開発事例を新たな
開発に再利用したい
CVS
リポジトリ
開発履歴情報から目的の
リビジョンを探し出す
膨大な履歴情報から手作業で目的の
リビジョンを探し出すのは不可能
2004年5月14日
開
発
履
歴
情
報
群
リビジョン検索機能がないと開発
履歴情報の利用が困難になる
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
7
既存の開発履歴閲覧システムの問題点2
開発された時期を考慮した関数の参照元と定義を
得ることが困難
CVSを用いた開発では過去のソースコードを
理解・編集することが多い
(例)過去の安定バージョンからのバグ修正・過去のソースコードの再利用
ソースコード
開発者
?
使用されている関数がどのような
定義になっているか知りたい
過去のソースコード理解の
大きな障壁となっている
どのリビジョンの関数定義を参照
すればよいかがわからない
関数の定義元ファイル
2004年5月14日
1.29
1.30
1.31
リビジョン番号
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
8
既存の開発履歴閲覧システムの問題点3
開発履歴の追跡を単一ファイルでしか行えない
システムの
一機能
システムの一機能を複数のファイルで
実装することが多い
その機能の開発履歴を追跡するにはそれらの
ファイルの開発履歴をまとめて追跡する必要がある
しかし既存の履歴閲覧システムでは
単一ファイルの履歴しか追跡できない
既存の履歴
閲覧システム
関連する複数のファイルの開発
履歴を追跡することが出来ない
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
9
既存システムの問題点への対策
既存の開発履歴閲覧システムでは開発者に必要な履歴
情報を提供できていなかった
これまで挙げた情報をわかりやすく提供する機能を実装する
ことで開発者の負担を減らす
リビジョン検索機能がない
リビジョン検索機能・ヒストリ検索機能
関数の定義が得られない
リビジョン関係を考慮した関数クロスリファレンス機能
複数のファイルをまとめて把握できない
リビジョン・ヒストリ検索、プロジェクトの変遷のグラフ化機能
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
10
CREBASSの機能
リビジョン検索機能
必要な開発履歴情報を検索する
リビジョン関係を考慮した関数クロスリファレンス機能
過去のリビジョンのソースコード理解を助ける
ヒストリイベント検索機能
更新作業だけでなく、そのほかの作業の流れも把握する
プロジェクトの変遷のグラフ化機能
各ファイル・ディレクトリ下のファイル群の変遷を視覚的に
確認する
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
11
CREBASSの概要
チェックアウト・コミット
開発者
開発履歴情報の要求
Web
ブラウザ
デ
ー
タ
ベ
ー
ス
部
開発履歴情報
開発履歴情報
の取得・解析
ユーザインター
フェース部
関数定義・
参照情報DB
CVS
リポジトリ
リビジョン
情報DB
ヒストリ
情報DB
DB
作成部
開
発
履
歴
情
報
の
解
析
プロジェクト
情報DB
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
12
リビジョン検索機能
チェックアウト・コミット
開発者
開発履歴情報の要求
Web
ブラウザ
デ
ー
タ
ベ
ー
ス
部
開発履歴情報
開発履歴情報
の取得・解析
ユーザインター
フェース部
関数定義・
参照情報DB
CVS
リポジトリ
リビジョン
情報DB
ヒストリ
情報DB
DB
作成部
開
発
履
歴
情
報
の
解
析
プロジェクト
情報DB
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
13
リビジョン検索機能
更新作業者
キーワード
更新日時
対象ディレクトリ
対象ブランチ
検索結果の
ソートの仕方
ファイルパス
リビジョン番号
更新日時
あのファイルのコミット
あのユーザが
があった頃の開発
あの機能に対して
ブランチ上での更新
行ったここ1週間の
状況が知りたい
更新作業を
検索したい
更新作業者
ログメッセージ
所属ブランチ名
2004年5月14日
キーワード
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
14
リビジョン関係を考慮した関数クロスリファレンス機能
チェックアウト・コミット
開発者
開発履歴情報の要求
Web
ブラウザ
デ
ー
タ
ベ
ー
ス
部
開発履歴情報
開発履歴情報
の取得・解析
ユーザインター
フェース部
関数定義・
参照情報DB
CVS
リポジトリ
リビジョン
情報DB
ヒストリ
情報DB
DB
作成部
開
発
履
歴
情
報
の
解
析
プロジェクト
情報DB
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
15
リビジョン関係を考慮した関数クロスリファレンス機能
関数の参照箇所から、同時期に存在した定義へと
ジャンプする機能
対象はC言語
定義元を探す際には以下の点を考慮する
出来る限り参照元と同じブランチ上で定義元を探す
参照元のリビジョンの更新時刻を基準として参照先のリビ
ジョンを決定する
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
16
リビジョン関係を考慮した関数クロスリファレンス機能
定義ファイル名の問い合わせ
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
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
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
17
ヒストリイベント検索・表示機能
チェックアウト・コミット
開発者
開発履歴情報の要求
Web
ブラウザ
デ
ー
タ
ベ
ー
ス
部
開発履歴情報
開発履歴情報
の取得・解析
ユーザインター
フェース部
関数定義・
参照情報DB
CVS
リポジトリ
リビジョン
情報DB
ヒストリ
情報DB
DB
作成部
開
発
履
歴
情
報
の
解
析
プロジェクト
情報DB
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
18
ヒストリイベントの検索・表示機能
ヒストリイベント:ファイルのコミットや
タグ付けなどの、リポジトリに対して
起こったユーザによるアクション
検索するイベントの指定
イベントを起こしたユーザの指定
検索する期間の指定
検索するディレクトリの指定
で検
表索
示結
さ果
れは
る時
系
列
同時に起こったと
考えられるイベント
はまとめて表示する
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
19
プロジェクトの変遷のグラフ化機能
チェックアウト・コミット
開発者
開発履歴情報の要求
Web
ブラウザ
デ
ー
タ
ベ
ー
ス
部
開発履歴情報
開発履歴情報
の取得・解析
ユーザインター
フェース部
関数定義・
参照情報DB
CVS
リポジトリ
リビジョン
情報DB
ヒストリ
情報DB
DB
作成部
開
発
履
歴
情
報
の
解
析
プロジェクト
情報DB
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
20
プロジェクトの変遷のグラフ化機能
あるファイル、もしくはディレ
クトリ下の全てのファイルに
ついて以下の項目の変遷
を表したグラフを作成する
総行数
編集量
累計commiter数
複数の対象を1つのグラフに
表示することで、互いに比
較を行うことが出来る
編集量の変遷を表したグラフ
対象に対してコミットを行ったユーザ
総行数の変遷を表したグラフ
の累計数の変遷を表したグラフ
(上は書き足された行数、下は削除された行数)
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
21
適用事例
OpenSSLの開発から得られたデータを用いる
CVSリポジトリ:OpenSSL開発で蓄積された開発履歴
ファイル総数:3556
リビジョン総数:43684
実験の対象としてOpenSSLの開発における、2003
年3月17日にリリースされた、セキュリティの修正事例
をもとに検証を行う
RSA blindingがオンになっていないとき、RSAキーに対し
てタイミング攻撃を受けやすい
この脆弱性をどのようにして修正したかを知りたい
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
22
適用事例
RSA blindingをデフォルトでオンにした
2003年3月15日から同20日までにコミットされ、
かつキーワードRSAを持つリビジョンを検索する
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
23
適用事例
タイミング攻撃を回避するためにRSA
blindingをデフォルトでオンにした
このコミットがRSA blindingの
脆弱性を修正するためのもの
だということがわかった
このファイルの修正内容を確認するために
直前のリビジョンからの差分を閲覧する
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
24
適用事例
しかしこれらの関数の情報
についてはわからなかった
関数クロスリファレンサを
用いて定義を調べる
新たに定義された関数とマクロを用いてRSA blinding
のデフォルトでの機能使用を可能にしている
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
25
適用事例
クリックしてリンク先を表示
CRYPTO_w_lockはCRYPTO_lockの
マクロであることがわかった
さらにクリックしてCRYPTO_lockの定義を調べる
CRYPTO_lockの定義が得られた
修正箇所周辺の実装の詳細
を取得することが出来た
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
26
適用事例の考察
リビジョン検索機能とクロスリファレンス機能を用いて
開発者に必要な履歴情報の検索と理解が出来た
同じことを既存のシステムでやろうとするとどうなるか
CVSWebの場合
リビジョン検索機能が無いため、必要な履歴情報を探し出すの
が非常に困難
ViewCVS・Bonsaiの場合
リビジョン検索はあるが、ログメッセージに関する検索が出来ない
ため、知りたいトピックに関する更新情報を探し出すのは困難
該当するリビジョンが参照する関数の定義を得る方法が無いた
め、該当リビジョンのソースコードを理解するのが困難
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
27
まとめと今後の課題
版管理システムのリビジョン情報を解析して、開発履歴情
報の閲覧・検索を行い、ユーザの開発履歴理解を支援する
システムCREBASSを作成した
実際のソフトウェア開発で蓄積された履歴情報を用いて適
用実験を行い、目的の開発履歴情報の閲覧・検索が行え
ることを確認した
リビジョン検索の際に用いるキーワードの抽出の精度向上
関数の参照先を特定する精度の向上
より大規模なリポジトリでの適用実験
2004年5月14日
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University
28