310 likes | 397 Vues
複数のリポジトリを統合できる バージョン管理システムの提案と試作. 田中 義己 井上研究室. 背景. ソフトウェア開発規模の拡大 コンポーネント・モジュール単位 再利用 分散環境 ソフトウェア品質評価 開発組織単位 開発者単位. 背景. ソフトウェア管理 バージョン管理システム の利用 開発履歴の蓄積・閲覧が可能 バグ発見が容易になる 過去の状態への移行が可能になる 変更の統合が簡単になる. バージョン管理. プロダクトに対する追加・削除・変更などの作業を履歴として蓄積する 蓄積したデータを開発者に提供する. 管理単位:リビジョン プロダクトの
E N D
複数のリポジトリを統合できるバージョン管理システムの提案と試作複数のリポジトリを統合できるバージョン管理システムの提案と試作 田中 義己 井上研究室 修士論文発表会
背景 • ソフトウェア開発規模の拡大 • コンポーネント・モジュール単位 • 再利用 • 分散環境 • ソフトウェア品質評価 • 開発組織単位 • 開発者単位 修士論文発表会
背景 • ソフトウェア管理 バージョン管理システムの利用 • 開発履歴の蓄積・閲覧が可能 • バグ発見が容易になる • 過去の状態への移行が可能になる • 変更の統合が簡単になる 修士論文発表会
バージョン管理 • プロダクトに対する追加・削除・変更などの作業を履歴として蓄積する • 蓄積したデータを開発者に提供する 管理単位:リビジョン プロダクトの 各段階での状態 ・実データ ・属性データ リポジトリ トランク 開発者 1.0 データ操作 開発者 データ操作 1.0.1 1.1 開発者 1.0.2 1.2 ブランチ リビジョンツリー 修士論文発表会
既存のシステムにおける問題点 • 開発者単位の履歴蓄積が困難 • 複数の開発者データが混在している • 点在するリポジトリの一元管理が困難 • 異なるリポジトリに存在するコンポーネントは,開発者も別々に管理する必要がある • リポジトリ間でのコンポーネント複製 • コンポーネントの再利用などで複製と行うと,複製時以降の変更が反映されない 修士論文発表会
問題点1 • 開発者単位の履歴蓄積が困難 • 複数の開発者のデータが 混在している • 1つのリビジョンデータとして 開発者に依存したデータと プロダクトデータが一緒に 蓄積されている 開発者 開発者 リポジトリ 開発者 修士論文発表会
問題点2 • 点在するリポジトリの一元管理が困難 • 異なるリポジトリに 存在するコンポーネ ントを,別々に管理 する必要がある リポジトリ リポジトリ 作業領域 作業領域 開発者 修士論文発表会
問題点3 • リポジトリ間でのコンポーネント複製 • データが冗長になる • 複製時以降の複製元 の更新が判らない ⇒反映できない 開発者A (複製元) 開発者B (利用者) 修士論文発表会
解決法1 開発者単位での 管理を可能にする 解決法2 複数の作業領域を 1つにする 解決法3 複製を行わずに 参照とする 新たなバージョン管理手法 解決法 問題点1 開発者単位の履歴蓄積が困難 問題点2 点在するリポジトリの 一元管理が困難 問題点3 コンポーネント複製 による問題 修士論文発表会
バージョン管理手法DiRM/VR 実データと開発者用データを分離して 管理する抽象リポジトリを導入する • 開発者単位の履歴蓄積が可能 • 複数存在するリポジトリの一元管理が可能 • コンポーネントの複製が不必要 修士論文発表会
実データ管理部 属性データ管理部 制御部 抽象リポジトリ 開発者 開発者 抽象リポジトリ • 4構成要素 • 実データ管理部 • 属性データ管理部 • インタフェース部 • 制御部 • 開発者と1対1対応 インタ フェース部 インタ フェース部 制御部 制御部 実データ 管理部 実データ 管理部 属性データ 管理部 開発者に実データ管理部 と属性データ管理部を統合 した1つのリポジトリを提供 属性データ 管理部 実データ 管理部 1つの抽象リポジトリ内に 複数の実データ管理部が 存在しても良い. 抽象リポジトリ 修士論文発表会
実データ管理部 • プロダクトデータの管理 • 1つの抽象リポジトリ内部に複数存在 • 複数の抽象リポジトリ間で共有 • 開発者の直接データ格納・変更を禁止 • プロダクトデータの信頼性が向上 ⇒制御部を介した間接的アクセス 修士論文発表会
属性データ管理部 • 開発者依存のデータを管理 • 実データへのリンクを保持 • 属性データ管理部の1リ ビジョンは,実データ管理 部の1リビジョンを指す 属性データ 管理部 実データ 管理部 実データ 管理部 この2つのリビジョンは 異なるコンポーネントの リビジョンを指している 修士論文発表会
制御部 • 実データ管理部へのアクセス • データ操作 • リビジョン作成(データ格納) • 従来方式 • 実データ管理部のリビジョン利用 • リビジョンツリー参照 • データ取得 • リビジョン間の差分情報取得 リビジョンツリー参照 修士論文発表会
リビジョン作成(データ格納) 指定された リビジョンツリー • リビジョンツリー参照 実データ管理部内のリビジョンツリー全体もしくはその一部を引用 • ツリー構成は参照元と全く同形 • 複製時以降の複製元に対する変更も容易に反映可能 属性データ 管理部 実データ 管理部 後で追加されたリビ ジョンも参照可能 修士論文発表会
システムの試作 • 新手法に基づいたバージョン管理システム DLCM • 言語 : C++ • コード量 : 8500行程度 + ライブラリ(STL) • データ閲覧システム DLCMView • 言語 : Perl • コード量 : 1600行程度 + ライブラリ(jcode.pl) 開発環境,CPU : PentinumⅢ 1GHz × 2 RAM : 1GBytes OS : FreeBSD 4.2-STABLE 修士論文発表会
コマンド バージョン管理システム DLCM 開発者 DLCM • 実データ管理部 • CVSリポジトリの利用 • 属性データ管理部 • 1コンポーネントを1ファイルで管理 • インタフェース部 • オペレーション解析 • 制御部 • 解析結果受け取り • 実データ管理部へのアクセス • 取り出したデータの閲覧 インタ フェース部 オペレー ション解析 制御部 解析結果 受け取り データ 編集 CVSのイン タフェース 属性データ 用のファイル CVSリポジトリ 実データ管理部 属性データ管理部 修士論文発表会
データ閲覧システム DLCMView 開発者 • コンポーネント一覧 • 属性データ管理部に存在するコンポーネントの一覧 • リビジョン一覧 • 各コンポーネントに存在するリビジョンの一覧 • リビジョンデータ閲覧 • 各リビジョンのデータ表示 • 差分データ閲覧 • 2リビジョン間の差分データ表示 Webブラウザ Webサーバ CGI DLCMView 属性データ 管理部 実データ 管理部 修士論文発表会
適応実験 • 開発者単位の履歴を取得する実験 • 4人の開発者が,コンポーネントに対して行った履歴の取得 • 点在するリポジトリを一元管理する実験 • マルチバイト文字に未対応のライブラリと対応済みのライブラリを利用 • コンポーネントの複製せず,参照とする実験 • FreeBSDとOpenBSDのコンポーネントを利用 点在するリポジトリを一元管理する実験 修士論文発表会
対応済みの ライブラリ jstrctrl.cpp 実データ 管理部 実験の方法 • 点在するリポジトリを一元管理する実験 • マルチバイト文字に未対応のライブラリから対応済みのライブラリへの移行 未対応の ライブラリ strctrl.cpp strctrl.cpp 実データ 管理部 属性データ 管理部 修士論文発表会
実験の結果 リビジョンが1.2から1.3に なるときに,実データが strctrl.cppからjstrctrl.cppへ と替わっている 1.4が存在するのは, 一部パスを変更する必要が あったためであり,実際の ソースコードには手を加えて いない マルチバイト文字の処理が 可能となった 修士論文発表会
まとめ プロダクトデータと開発者データを分離した バージョン管理システムの提案と試作 • 開発者単位の履歴蓄積が可能 • 複数存在するリポジトリの一元管理が可能 • コンポーネントの複製が不必要 ⇒適応実験により確認 修士論文発表会
今後の課題 • 実データ管理部内のリビジョンが繁雑 • リビジョン競合時は,単純に別のリビジョンとして退避し格納する為 ⇒ブランチの利用法を定義 • システムにおける実行時間が長い • 既存のシステムに比べ,ファイルアクセス回数が多い為 ⇒ファイルアクセスの最適化 修士論文発表会
終 修士論文発表会
バージョン管理システムの利点 • バグの発見 • パッチを簡単に作成する仕組みの提供 • 容易に以前のバージョンへ戻すことが可能 • 変更統合が簡単 • グループ作業の簡単化 修士論文発表会
リビジョン作成(データ格納) • 実データ管理部のリビジョン利用 • 既に存在する実データを リンクするリビジョンの作成 • 従来方式 • 実データ,属性データ双方のリビジョン作成 属性データ 管理部 属性データ 管理部 実データ 管理部 実データ 管理部 修士論文発表会
開発者 データ取得 • リビジョンの内容取得 • 指定された属性データ • 属性データからリンクされている実データ + 属性データ 管理部 実データ 管理部 指定された リビジョン 修士論文発表会
差分計算 リビジョン間の差分情報取得 • 実データ内部にある差分情報の利用は不可 • 互いに異なるコンポーネントのりビジョンである可能性の存在. 属性データ 管理部 実データ 管理部 実データ 管理部 指定された 2つのリビジョン 修士論文発表会
適応実験1 • 開発者を単位とした開発履歴取得 • 各開発者毎の履歴は 属性データ管理部に存在 • システムのログ出力や DLCM Viewerで容易に 閲覧・取得が可能 実データ 管理部 属性データ 管理部 属性データ 管理部 Main Sub 修士論文発表会
適応実験3 • コンポーネントに複製せずに参照する • FreeBSDのopensshコンポーネントをOpenBSDのsshコンポーネントへの参照とした. • 5つのファイルに対して変更を行うだけで,実際に実行形式ファイルを作成することができた. • 複製ではなく,参照としても問題は生じない • 冗長なデータを削減 修士論文発表会
問題点3 • リポジトリ間でのコンポーネント複製 • データが冗長になる • 複製時以降の更新が 分からない. ⇒反映できない 修士論文発表会