関数の変更履歴と呼出し関係に基づいた 開発履歴理解支援システムの実現 大阪大学基礎工学部情報科学科 井上研究室 中山崇 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
© Copyright 2024 ExpyDoc