関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム 中山 崇,松下 誠,井上 克郎 大阪大学大学院情報科学研究科 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
© Copyright 2025 ExpyDoc