関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム

Slides:



Advertisements
Similar presentations
Trac と Eclipse の 便利な機能. プロジェクト管理システム: Trac 0. はじめに バージョン管理システム: Subversion 統合開発環境: Eclipse ・ Wiki による情報 管理 ・進捗状況の管理 ・プログラムの作 成 ・リポジトリに データを集める.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
1 EASE プロジェクトにおける EPM ( Empirical Project Monitor) を用いたプロジェクト管理デモ 奈良先端科学技術大学院大学 産学官連携研究員 松村 知子 2005 年 9 月 30 日 JISA 経営者セミナー.
シーケンス図の生成のための実行履歴圧縮手法
Global Ring Technologies
ウェブの時空間解析技術 東京大学生産技術研究所 戦略情報融合国際研究センター 成果概要 ウェブアーカイブ ウェブ空間解析 ウェブ時系列解析
OpenOffice.org で版管理 西木 毅 第2回関西OpenOffice.org勉強会 大阪電気通信大学
ソフトウェア変更間の関連抽出の ための差分集合構築手法
アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
Webサイト運営 09fi118 橋倉伶奈 09fi131 本間昂 09fi137 三上早紀.
卒業論文 最終発表 WWW情報検索 ナビゲーションシステムの設計と実装
情報システム構築 -グループ分けとCVSの初期設定-
~スマートフォン利用~ 店舗管理システムのご提案 サイボウズ中国.
大阪教育大学大学院教育学研究科 総合基礎科学専攻 中窪 仁
バイナリ形式コンポーネントの 収集・解析・検索システムの開発
EBSCOhost 詳細検索 チュートリアル support.ebsco.com.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
開発履歴情報に基づいた ダイナミックコミュニティ選定支援手法
アスペクト指向プログラミングを用いたIDSオフロード
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソフトウェアリポジトリにおける コードクローン作成者・利用者関係分析手法とその適用
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
NASのアクセス履歴を記録・検索できる! マイナンバー制度対応のファイルサーバー(NAS)ログ管理ソフト
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オープンソース開発の履歴情報を用いたコミュニティ検索支援システム
既存ソフトウェアの変更履歴を利用したソースコード修正支援手法の提案
実行時情報に基づく OSカーネルのコンフィグ最小化
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
エピソード記憶に訴えるBookmarkless Bookmarkの実現
Cプログラムの理解を 支援するナビゲーション機能
Parallel Setsによるライブラリの 組み合わせと利用状況の可視化
バイトコードを単位とするJavaスライスシステムの試作
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
既存ソフトウェアの変更履歴を利用したソースコード修正支援システム
JAVAバイトコードにおける データ依存解析手法の提案と実装
複数のリポジトリを統合できる バージョン管理システムの提案と試作
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
Presentation transcript:

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

版管理システムCVS プロダクトの開発履歴を保存・提供するシステム 蓄積された開発履歴には将来の開発に活用できる情報が多く含まれる 以前の開発についてのより深い理解 他のソフトウェア開発への応用 リポジトリ:プロダクトの 開発履歴を格納するDB リビジョン:プロダクトの ある時点における状態 コミット リポジトリ チェックアウト 開発者 ブランチ:バグ修正などのために元の リビジョン列から分岐したリビジョン列 2004年5月14日

開発履歴閲覧システム 版管理システムに蓄積された開発履歴を視覚的に閲覧することが出来るシステム データの表示にWebブラウザを用いることで、GUIの為の新たなシステムの導入が不必要なものがある   (例)CVSWeb, ViewCVS, Bonsai 開発履歴情報 Web ブラウザ 開発者 版管理システム CVS 開発履歴 閲覧システム 開発履歴情報の要求 Web ブラウザ 開発者 開発履歴情報の   取得・解析 2004年5月14日

開発履歴閲覧システムの利用目的 開発作業内容の理解 開発履歴理解における作業量の縮小 過去の開発作業を新たな開発に再利用するために、開発履歴を理解する必要がある 新規開発参加者は、現在どのように開発が行われているかを確認する必要がある 開発履歴理解における作業量の縮小 版管理システム単体では取得に多大な労力がかかる情報を手軽に取得したい 履歴情報を理解しやすい様式で表示させたい 2004年5月14日

研究の目的 既存の履歴閲覧システムにはいくつか問題点が存在する これらの問題点は開発者の作業効率の低下を招いている リビジョン検索が行えない 適切な関数定義を得ることが出来ない 複数のファイルの開発履歴をまとめて把握できない これらの問題点は開発者の作業効率の低下を招いている これらの問題点を解決することで、開発者の負担を減らし、生産性を挙げたい 開発者に必要な情報をわかりやすく提供する開発履歴 理解支援システムCREBASS (Cvs REpository Browse And Search System)を試作 2004年5月14日

既存の開発履歴閲覧システムの問題点 リビジョン検索機能を持たない 開発された時期を考慮した関数の参照元と定義を得ることが困難 開発履歴の再利用を困難にする 開発された時期を考慮した関数の参照元と定義を得ることが困難 過去のソースコード理解の障壁となる 開発履歴の追跡を単一ファイルでしか行えない 関連するファイルの開発履歴をまとめて追跡することが出来ない 2004年5月14日

既存の開発履歴閲覧システムの問題点1 リビジョン検索機能を持たない CVS リポジトリ 過去のリビジョンの 開発事例を新たな 開発に再利用したい 開発履歴情報から目的の リビジョンを探し出す 開発履歴情報群 膨大な履歴情報から手作業で目的の リビジョンを探し出すのは不可能 リビジョン検索機能がないと開発 履歴情報の利用が困難になる 2004年5月14日

既存の開発履歴閲覧システムの問題点2 ? 開発された時期を考慮した関数の参照元と定義を得ることが困難 CVSを用いた開発では過去のソースコードを 理解・編集することが多い   (例)過去の安定バージョンからのバグ修正・過去のソースコードの再利用 ソースコード 開発者 ? 使用されている関数がどのような 定義になっているか知りたい 過去のソースコード理解の 大きな障壁となっている どのリビジョンの関数定義を参照 すればよいかがわからない 関数の定義元ファイル リビジョン番号 1.29 1.30 1.31 2004年5月14日

既存の開発履歴閲覧システムの問題点3 開発履歴の追跡を単一ファイルでしか行えない システムの一機能を複数のファイルで 実装することが多い その機能の開発履歴を追跡するにはそれらの ファイルの開発履歴をまとめて追跡する必要がある しかし既存の履歴閲覧システムでは 単一ファイルの履歴しか追跡できない 関連する複数のファイルの開発 履歴を追跡することが出来ない 既存の履歴 閲覧システム 2004年5月14日

既存システムの問題点への対策 既存の開発履歴閲覧システムでは開発者に必要な履歴情報を提供できていなかった これまで挙げた情報をわかりやすく提供する機能を実装することで開発者の負担を減らす リビジョン検索機能がない リビジョン検索機能・ヒストリ検索機能 関数の定義が得られない リビジョン関係を考慮した関数クロスリファレンス機能 複数のファイルをまとめて把握できない リビジョン・ヒストリ検索、プロジェクトの変遷のグラフ化機能 2004年5月14日

CREBASSの機能 リビジョン検索機能 リビジョン関係を考慮した関数クロスリファレンス機能 ヒストリイベント検索機能 必要な開発履歴情報を検索する リビジョン関係を考慮した関数クロスリファレンス機能 過去のリビジョンのソースコード理解を助ける ヒストリイベント検索機能 更新作業だけでなく、そのほかの作業の流れも把握する プロジェクトの変遷のグラフ化機能 各ファイル・ディレクトリ下のファイル群の変遷を視覚的に確認する 2004年5月14日

CREBASSの概要 ユーザインター フェース部 データベース部 DB 作成部 開発者 CVS リポジトリ チェックアウト・コミット 開発履歴情報の要求 開発履歴情報 の取得・解析 ユーザインター フェース部 CVS リポジトリ Web ブラウザ 開発履歴情報 開発履歴情報の解析 データベース部 関数定義・ 参照情報DB 関数定義・ 参照情報DB ヒストリ 情報DB プロジェクト リビジョン リビジョン 情報DB DB 作成部 ヒストリ 情報DB プロジェクト 情報DB 2004年5月14日

リビジョン検索機能 ユーザインター フェース部 データベース部 DB 作成部 開発者 CVS リポジトリ チェックアウト・コミット 開発履歴情報の要求 開発履歴情報 の取得・解析 ユーザインター フェース部 CVS リポジトリ Web ブラウザ 開発履歴情報 開発履歴情報の解析 データベース部 関数定義・ 参照情報DB 関数定義・ 参照情報DB ヒストリ 情報DB プロジェクト リビジョン リビジョン 情報DB DB 作成部 ヒストリ 情報DB プロジェクト 情報DB 2004年5月14日

リビジョン検索機能 あのユーザが あの機能に対して 行ったここ1週間の 更新作業を 検索したい あのファイルのコミット があった頃の開発 更新作業者 キーワード 更新日時 対象ディレクトリ 対象ブランチ あのユーザが あの機能に対して 行ったここ1週間の 更新作業を 検索したい あのファイルのコミット があった頃の開発 ブランチ上での更新 状況が知りたい 検索結果の ソートの仕方 ファイルパス リビジョン番号 更新日時 所属ブランチ名 ログメッセージ キーワード 更新作業者 2004年5月14日

リビジョン関係を考慮した関数クロスリファレンス機能 チェックアウト・コミット 開発者 開発履歴情報の要求 開発履歴情報 の取得・解析 ユーザインター フェース部 CVS リポジトリ Web ブラウザ 開発履歴情報 開発履歴情報の解析 データベース部 関数定義・ 参照情報DB 関数定義・ 参照情報DB ヒストリ 情報DB プロジェクト リビジョン リビジョン 情報DB DB 作成部 ヒストリ 情報DB プロジェクト 情報DB 2004年5月14日

リビジョン関係を考慮した関数クロスリファレンス機能 関数の参照箇所から、同時期に存在した定義へとジャンプする機能 対象はC言語 定義元を探す際には以下の点を考慮する 出来る限り参照元と同じブランチ上で定義元を探す 参照元のリビジョンの更新時刻を基準として参照先のリビジョンを決定する 2004年5月14日

リビジョン関係を考慮した関数クロスリファレンス機能 定義ファイル名の問い合わせ 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年5月14日

ヒストリイベント検索・表示機能 ユーザインター フェース部 データベース部 DB 作成部 開発者 CVS リポジトリ チェックアウト・コミット 開発者 開発履歴情報の要求 開発履歴情報 の取得・解析 ユーザインター フェース部 CVS リポジトリ Web ブラウザ 開発履歴情報 開発履歴情報の解析 データベース部 関数定義・ 参照情報DB 関数定義・ 参照情報DB ヒストリ 情報DB プロジェクト リビジョン リビジョン 情報DB DB 作成部 ヒストリ 情報DB プロジェクト 情報DB 2004年5月14日

ヒストリイベントの検索・表示機能 ヒストリイベント:ファイルのコミットや タグ付けなどの、リポジトリに対して 起こったユーザによるアクション 検索するイベントの指定 イベントを起こしたユーザの指定 検索する期間の指定 検索するディレクトリの指定 検索結果は時系列 で表示される 同時に起こったと 考えられるイベント はまとめて表示する 2004年5月14日

プロジェクトの変遷のグラフ化機能 ユーザインター フェース部 データベース部 DB 作成部 開発者 CVS リポジトリ チェックアウト・コミット 開発者 開発履歴情報の要求 開発履歴情報 の取得・解析 ユーザインター フェース部 CVS リポジトリ Web ブラウザ 開発履歴情報 開発履歴情報の解析 データベース部 関数定義・ 参照情報DB 関数定義・ 参照情報DB ヒストリ 情報DB プロジェクト リビジョン リビジョン 情報DB DB 作成部 ヒストリ 情報DB プロジェクト 情報DB 2004年5月14日

プロジェクトの変遷のグラフ化機能 あるファイル、もしくはディレクトリ下の全てのファイルについて以下の項目の変遷を表したグラフを作成する 総行数 編集量 累計commiter数 複数の対象を1つのグラフに表示することで、互いに比較を行うことが出来る 編集量の変遷を表したグラフ (上は書き足された行数、下は削除された行数) 対象に対してコミットを行ったユーザ の累計数の変遷を表したグラフ 総行数の変遷を表したグラフ 2004年5月14日

適用事例 OpenSSLの開発から得られたデータを用いる CVSリポジトリ:OpenSSL開発で蓄積された開発履歴 ファイル総数:3556 リビジョン総数:43684 実験の対象としてOpenSSLの開発における、2003年3月17日にリリースされた、セキュリティの修正事例をもとに検証を行う RSA blindingがオンになっていないとき、RSAキーに対してタイミング攻撃を受けやすい この脆弱性をどのようにして修正したかを知りたい 2004年5月14日

RSA blindingをデフォルトでオンにした 適用事例 RSA blindingをデフォルトでオンにした 2003年3月15日から同20日までにコミットされ、 かつキーワードRSAを持つリビジョンを検索する 2004年5月14日

blindingをデフォルトでオンにした 適用事例 タイミング攻撃を回避するためにRSA blindingをデフォルトでオンにした このコミットがRSA blindingの 脆弱性を修正するためのもの だということがわかった このファイルの修正内容を確認するために 直前のリビジョンからの差分を閲覧する 2004年5月14日

適用事例 しかしこれらの関数の情報 についてはわからなかった 関数クロスリファレンサを 用いて定義を調べる 新たに定義された関数とマクロを用いてRSA blinding のデフォルトでの機能使用を可能にしている 2004年5月14日

適用事例 修正箇所周辺の実装の詳細 を取得することが出来た クリックしてリンク先を表示 CRYPTO_w_lockはCRYPTO_lockの マクロであることがわかった CRYPTO_lockの定義が得られた さらにクリックしてCRYPTO_lockの定義を調べる 修正箇所周辺の実装の詳細 を取得することが出来た 2004年5月14日

適用事例の考察 リビジョン検索機能とクロスリファレンス機能を用いて開発者に必要な履歴情報の検索と理解が出来た 同じことを既存のシステムでやろうとするとどうなるか CVSWebの場合 リビジョン検索機能が無いため、必要な履歴情報を探し出すのが非常に困難 ViewCVS・Bonsaiの場合 リビジョン検索はあるが、ログメッセージに関する検索が出来ないため、知りたいトピックに関する更新情報を探し出すのは困難 該当するリビジョンが参照する関数の定義を得る方法が無いため、該当リビジョンのソースコードを理解するのが困難 2004年5月14日

まとめと今後の課題 版管理システムのリビジョン情報を解析して、開発履歴情報の閲覧・検索を行い、ユーザの開発履歴理解を支援するシステムCREBASSを作成した 実際のソフトウェア開発で蓄積された履歴情報を用いて適用実験を行い、目的の開発履歴情報の閲覧・検索が行えることを確認した リビジョン検索の際に用いるキーワードの抽出の精度向上 関数の参照先を特定する精度の向上 より大規模なリポジトリでの適用実験 2004年5月14日