版管理とソフトウェアの再利
用
における支援に関する研究
大阪大学 大学院基礎工学研究科 情報数理系専攻 ソフトウェア科学分野山本哲男
背景
ハードウェアの価格の低下とその機能の向上 にともない、ソフトウェアシステムは年々大 規模化・複雑化している ソフトウェアの構築や保守にかかるコストが 増大し、多くの労力が必要 保守支援手法 版(バージョン)管理、プログラム理解支援、・・・ 構築支援手法 再利用、設計方法論、・・・問題点
既存のバージョン管理手法 プロダクトの作成,変更作業の逐次的な記 録や追跡を支援するシステム ユーザの負担が大きい 保存する間隔が粗い問題点 続き
既存の再利用手法 粒度の細かい再利用(ライブラリ等) より大規模なシステムレベルでの再利用が 求められている A 社 B 社 C 社 D 社 C 社目的
新しい版管理手法・版管理システムの 提案 ユーザの保存したファイルを特別な操作を 必要とせず自動的に記録するシステム 大規模システムレベルでの再利用のた めのシステム類似度の提案 ソフトウェアシステム間の類似度を用いた 派生関係を計測するシステム論文の構成
第1章 まえがき 第2章 堆積型ファイルシステム Moraine の提案と実装 [3,4] 第3章 メトリクス環境 MAME の提案と 実装 [1,5] 第4章 類似度計測ツール SMMT の提案 と実装 [2] 第5章 むすび堆積型ファイルシステム
Moraine と
メトリクス計測システム
MAME[2,3 章 ]
1995 年の HDD 容量 --- 0.54Gbytes Linux (Slackware2.2[Basic Applications+X window]) 0.15Gbytes 空き容量 0.39GbytesHDD 容量の変遷
2001 年の HDD 容量 --- 80Gbytes Linux (RedHat7[Basic Applications+X window]) 1Gbytes 空き容量 79Gbytes 0.39Gbytes 200 倍 0.15Gbytes 6 倍空き容量の使用
一般ユーザ JPEG, MPEG, MP3, HTML, ... ソフトウェア工学に携わる者 ? バージョン管理手法は限られたHDD容 量の基で考案、開発されている ユーザが手動で保存ソフトウェアプロダクトの保
存
昔の HDD は高価で現実的に不可能 現在の HDD 容量はソフトウェアの履歴 を保存するのに十分な容量を持っている 履歴の総サイズ 1.2Gbytes FreeBSD 2.0 1994 2001 FreeBSD 4.4 100Mbytes 27 リリース 320MbytesMoraine と MAME の開発
二つのシステムを構築した 自動的にプロダクトを保存する ⇒堆積型ファイルシステム Moraine 定量的なメトリクス計測基盤 ⇒ メトリクス計測システム MAMEMoraine の設計方針
自動的に保存 すべてのファイルを細粒度で自動的に保存する 容易な操作 開発者は Moraine について特別な知識を必要としな い。通常の読み出し、書き込み操作をシステムがつ かまえることで以前と同じ環境で作業が行える オープンな構造 Moraine で保存するファイルは既存のツールを利用 して行うMoraine の特徴
Moraine は常に最新のバージョンのみ を開発者に見せる Newer リポジトリ 操作 開発者 最新バージョン 開発者の視点 Newer 実際のファイル構造 NewerMoraine のアーキテクチャ
HDD User Process VFS VCD RCS UFS バージョン管理サブシステム -retrieve versions -show a delta 管理コマンド群Vertical File System Version Control Daemon
Unix File system
VFS を実際のファイルシステムの上 に論理的なファイルシステムとして 存在するように実現
VFS
Vertical File System
HDD User Process VFS VCD RCS UFS -retrieve versions -show a delta 管理コマンド群
Vertical File System Version Control Daemon
バージョン管理サブシステムはバー ジョン間の差分計算といった実際に バージョンを記録する作業を行う部分
VCD
Version Control Daemon
バージョン管理サブシステム VCS 管理コマンド群は通常の操作では行え ない操作を行うコマンド群
Moraine のアーキテクチャ
VCD はバージョン管理サブシステム を結ぶ役割を果たすプロセス実験
Moraine が実用的かどうかについて実験 を行った
システムの性能と保存データサイズ UFS (UNIX file system) と比較
計測環境
実験(読み出し)
ファイルの読み出しにかかるプロセスの実行 時間 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 MB 1 ファイルの連続読み出し回数 時 間(S ec .) MoraineUFS実験(書き込み)
ファイルの書き込みにかかるプロセスの実行 時間 0 5 10 15 20 25 30 35 1 2 3 4 5 6 7 8 9 10 1MBファイルの連続書き込み回数 時 間(S ec .) MoraineUFS実験(サイズ)
学生のプログラム演習に適用
Student1 Student2 Student3
LOC 9339 4067 2543 ファイル数 45 20 18 最終ファイルサ イズ (KB) 225 117 73 総バージョン数 533 249 357 ソースコードの 総バージョン数 311 147 247
実験(サイズ) 続き
225 1388 117 546 73 604 0 200 400 600 800 1000 1200 1400 KBStudent1 Student2 Student3
UFS
メトリクス計測システム
MAME
ファイルの開発者,バージョン数,日 時などを指定し,プロダクトに関する メトリクスを計測する 時間軸やバージョンの数の推移によっ て、メトリクスがどう推移しているか 分かるMAME の設計方針
開発者の環境を変更する必要はない 様々なデータを自動的に収集する 粒度自在 開発中、開発後にかかわらずメトリク スが取得可能MAME のアークテクチャ
開発ツール メトリクス計算 ファイルの読み書き 開発活動 メトリクスデータ VCD HDD VCD VFS UFS RCS Commands Moraine 保存ファイルの取得 開発者 MAME 開発環境実験
MAME を学生のプログラム演習に適用 メトリクスは演習終了後に取得した 任意のファイルが更新された時の下記 メトリクスの推移を取得 ファイル数 ファイルの全行数 C 言語でかかれたソースコードの関数の数実験結果
横軸はソースコードの累積バージョン数 LOC 0 1000 2000 3000 4000 5000 0 50 100 バージョン数 lin es ファイル数 0 5 10 15 20 25 0 50 100 バージョン数 数 147 147 バージョン数 20-50 で開発は停滞実験結果 続き
C言語の関数の数 0 20 40 60 80 100 120 0 50 100 バージョン数 数 開発者は関数のスケルトンを作った後、 中身を書いている 147関連研究
ClearCase, PVCS, Visual Source Safe
開発者はシステムを理解する必要がある
バージョンの記録は手動で行う
まとめ
自動的にファイルを保存するファイルシステム Moraine の提案と実装を行った プロダクトに関するメトリクスを収集するシステム MAME の提案と実装を行った 開発者に余分な負担をかけない 実用的な速度で動作可能 いつでも取りたいときに取得可能 今後の課題 大規模ソフトウェアによる評価実験 メトリクス問い合わせ言語の構築類似度計測システム SMMT
[4
章 ]
ドキュメントなどが存在すれば、複数の 類似システム間の相違点を知ることは可 能であろうが,定量的な値を得ることは 容易ではない システムが小規模な場合、そのシステムの 個々の構成要素を人間が調べ値を出すことも 可能 構造が複雑で大規模なシステムでは、何らか の機械的な処理により、自動的に求めること が必須目的
二つのソフトウェアシステムの類似度 メトリクス自動的に計測するシステム SMMT(Similarity Metrics Measuring
Tool) の提案と実装
類似度の形式的な定義を与え、それを求め
るための現実的な方法を示す
実際に類似度を種々の UNIX 系 OS のいく
ソフトウェアプロダクトに対
する類似度の一般的定義 (1/2)
ファイルやソフトウェアシステムを抽 象的に表したものをプロダクトと呼ぶ プロダクトは要素の集合とし、 P={p1, …,pm} とあらわす P をファイルとすると、 pi は各行になる P をシステムとすると、 pi はファイルにな る二つのプロダクト P={p1,…,pm},Q={q1, …,qm} に対し、等価な要素の対応 R⊆ P ×Q が得られるとする P と Q の R に対する類似度 S(0 S 1)≦ ≦ を以下のように定義する
ソフトウェアプロダクトに対
する類似度の一般的定義 (2/2)
Q P R}| ) ,q |(p |{q R}| ) ,q |(p |{p S(P,Q) i i j j i j P Q具体的なメトリクス
等価な行を用いた類似度 Sline プロダクト P をソフトウェアシステムし、 要素をシステムを構成するファイルの行と する 対応 R は各行の対応とする ファイル名やファイルの大きさに影響さ れないS
lineの要素の対応
Sline を計算するための R を求める方法 CCFinder と diff を組み合わせ対応 R を求める CCFinder — コードクローン検出ツール ソースコードを入力としてコードクローンを出力する diff — ファイルの差分抽出ツール 二つのファイル間の行単位の差分を求める CCFinder でクローンが見つかったファイルの ペアに対して diff を実行するCCFinder と diff を用いる理
由
diff だけを用いると、すべてのファイル の組み合わせに対して実行する必要があ る CCFinder でクローンを持つファイルの組 を見つけ、その組に対してのみ diff を実 行するSMMT の処理概要
前処理 Step1 CCFinder の実行 Step2 diff の実行 Step3 対応の 抽出 Step4 類似度の 計算 Step5 P Q 類似度 前処理後の P 前処理後の Q CCFinder の実行結果 diff の実行結果 抽出結果 SMMT実験
UNIX 系 OS を用いて類似度を計算した 4.4BSDLite, 4.4BSDLite2 FreeBSD2.0, 2.0.5, 2.1, 2.2, 3.0, 4.0 NetBSD1.0, 1.1, 1.2, 1.3, 1.4, 1.5 OpenBSD2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8 23 個の OS のすべての組み合わせで Sline を求 めた カーネル部分の C 言語のソースのみ同一種類の OS 間での類似度
異なる種類の OS 間での類似
度
FreeBSD3.0 と NetBSD1.3 で 4.4BSDLite2 が取り込ま れている 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 NetBSD 1.0 NetBSD 1.1 NetBSD 1.2 NetBSD 1.3
クラスタ分析
Sline を距離と考え、クラスタ分析を行っ