 とメトリクス環境

堆積型ファイルシステム



への適用

山本 哲男 松下 誠 井上 克郎

近年，ハードディスクの容量は飛躍的に大きくなり，

容量のハードディスクが数万円という低コストで入手でその値段は急速に低下してきている．ディスク容量が十き， やツール，アプリケーションソフトなどをイン分に大きければ，不要なファイルを消す必要がなく，変ストールしたとしても，何十  バイトという残り容量を化する全てのファイルのバージョンを保存出来ると考えユーザが使うことができる．

られる．本論文では，まず自動的にすべてのファイルの変更を保存する堆積型ファイルシステム 

一方，現在，我々がソフトウェア開発を行う際，用いを提ているファイル管理やバージョン管理の方法は，過去，で は常に最新のバージョンが透過的

ディスクの容量が限られていた時期に考えられ，開発に操作可能であり，記録されたバージョンを容易に取りされたものが主である．不要になったファイルはユーザ出すことが可能である．また，

を 用いたソフの手によって消去され，その領域は再利用される．バー

トウェアメトリクス環境である  





ジョン管理システムでは、ユーザが陽に   の操作はソフトを行うことによって始めて保存されるバージョンが作成

案する． 

 

 を提案する． 

ウェア開発に用いることにより，開発の途中あるいは終了後にさまざまなメトリクスデータを収集し分析することを可能にする．

される．
しかし，ディスク容量が十分に大きければ，不要なファイルを消す必要はないであろう．また，バージョン
管理においても，特定のファイルのみをバージョンとし

はじめに
近年，ハードディスクの容量は飛躍的に大きくなり，
その値段は急速に低下してきている．数十  バイトの              大阪大学大学院基礎工学研究科              大 阪 大 学 大 学 院 基 礎 工 学 研 究科 
         ! "  大阪大学大学院基礎工学研究科 # 奈良先端科学技術大学院大学情報科学研究科          #    "    $ "      て登録するのではなく，一時的に作成されたものを含めて，変化する全てのファイルのバージョンを保存することができるのではないだろうか．
本研究では，ソフトウェアの開発作業に用いることを前提とした，堆積型ファイルシステム 

と呼ぶ新

たなファイルシステムを提案する %&'(．これは，ソフトウェア開発者の作成するプロダクト ファイル の全てを自動的に採取し，それらを一つのバージョンとして保存
する。


で は ，ソ フ ト ウェア 開 発 者 は   や  と いったバージョンを管理するための作業を意識せず開発を進めることが出来る．また，
を導入する際には，導入前の開発環境を変更する必要がない．特に指定しない限り，保存される各バージョンの



 

コンピュータソフトウェア

中で，常に最新バージョンのみが操作対象となる．
ソフトウェア開発におけるプロダクト管理のため、種々出来た．
本論文では，堆積型ファイルシステム 

と，のバージョン管理システムが開発され，販売されている

が，これらは 

るソフトウェアメトリクス環境   を提案する．以のような全プロダクトの全てのの有効性，有用性を示すアプリケーションであ変更を自動的に保存するという目的では設計されていな

降，節では，堆積型ファイルシステム 

い．また，一部の商用  で用いられている自動バージョについて述べ，節では 

ン番号付与ファイルシステム %)( は，

節では 

と似た機の評価について述べる．

を用いたソフトウェアメトリクス環境

能を提供するが，ディスクの容量の制限から保存できる バージョン数や廃棄期限が決められるのが通常である．

結果を 節で述べる．節で，

このような堆積型ファイルシステムを用いることによって，ソフトウェアを開発に関して，いろいろ新たな考えやそれに基づくシステム開発・支援環境を考える
ことができる．本研究では，
して、メトリクス環境   

の応用の一例と の提案とその実現を行った  

%&'(．

の概要

に付いて述べ，  を学生実験に適用したと   についてそれぞれ考察を行い，最後に 節でまとめと今後の課題について述べる．

  の概要
本節では，堆積型ファイルシステム 
述べる．

について

はファイルの更新を監視し，更新され現在まで、数多くのメトリクス環境が提案され，実装たファイルを新バージョンとして記録するシステムであされている %*( %+( %&,( %&-(．しかし，これらは事前に収る．バージョンを記録する際に既存のツールを使うこと集するメトリクスを決め，そのためのツールを用意する

で，それらのツールに対応した他のツールを適用するこ必要がある．一般に，メトリクスを計測するためには，とも可能になる．また，ファイルシステムとして実装す

プロジェクトを開始する前にデータを収集する計画を立ることで既存の開発環境を一切変更することなく導入がてる．例えば， パラダイム %.( では目標に対して可能になる．

質問を決めることが必要である．それらを決めた後に収集するメトリクスを選ぶ．このようなトップダウン的な



手法は，プロジェクトを開始する前にプロジェクトが詳

近年，ディスクの大容量化や !" の性能は急速に向細に決まっていれば成功する．そして，プロジェクトの上している．開発管理，プロダクトの品質の向上など，開始時からデータの収集を行う事が出来る．

ソフトウェア開発におけるさまざまな観点を考えた場合，

設計方針

しかし，この手法では、プロジェクト管理の方針の変

ソフトウェア開発環境上で行われた開発者全員の作業は更に対応することは困難である．プロジェクトの進行中記録するべきであると我々は考えている．また，記録しや終了後に，計画したもの以外の新たなメトリクスデー

た作業履歴は容易に取得可能でなければならない．

タを収集することはできない．失われたプロダクトや終このような開発環境では，作成されるすべてのファイ了したプロセスからのデータの収集は現在のソフトウェ

ルのすべてのバージョンが記録される．また，開発者は

ア開発環境では実行不可能である．

バージョンの保存について何も行う必要がない．ファイ

一方，

はすべてのファイルのバージョンを細ルが必要無ければ消去することも通常の操作で行うこと

粒度で保存するため，   では，プロジェクトの開が出来き，消去されたファイルもタイムスタンプやユー

始後でさえもメトリクスを収集する方針を変更すること

ザによって指定されたタグによって後から取得できる．

が出来る．
本研究では，  を実際の学生のコンパイラ作成

これらの考えを元に 

の設計方針を以下に示す．

¯ 容易な操作演習に適用した．収集するメトリクスは演習の終了後にユーザは 

決定し，その後メトリクスの収集を行った．そして，こ

れらのトリクスの解釈から学生の演習活動の特徴が理解

開発者の特別な操作を必要としない．

の操作を事前に学ぶ必要がない．

は通常のファイル操作を自動的に監視し， #$% &

User

Kernel

User
Process

User

'% &

()



VCFS

User’s surface view
foo

VCD

VFS

Version Management
Sub-System

UNIX File System
(UFS)

RCS

Read/Write

proj

/

Control Commands
DISK

User

SRCS

Actual file structure
foo,a-retrive versions-tagging

versiondb

Latest File のアーキテクチャ

図

foo,v

¯ オープンな構造

foo is foo,aNewer

はデータリポジトリやバージョンの管理に

Version Repository

独自の構造を持たない．そのため，容易に多くのシステムに移植が可能である．
以上の設計方針に基づいて "'*+ のファイルシステ

図と実ファイルシステムの関係

ム上にバージョン管理機能を組み込んだシステムを設計した．この手法では，通常のファイルに対する読み出し

るまで，他のプロセスからはそのファイルに対して読み , システムコール ，書き込み - システムコー

出しのみが行なえる．

ル 動作を直接バージョン管理作業に対応付ける．また，# / では #/ によりスタッカブルファイルシステ

既存のファイルシステムを用いたスタッカブルファイル

ムとして実装されている．そのため，# / によって管%,( として実装して理されているファイルは "'*+ の通常のファイルシステ

システム .$/$

0  

おり，既存の環境に容易に導入可能である．

ムに直接保存されず，#/ を通して保存される．
各ファイルは最新バージョンのファイルと過去のバー





ジョンを記録したファイルからなる 図 ．通常，# /

のアーキテクチャ

図 は我々が提案する 

のアーキテクチャを表では最新バージョンのファイルのみ操作可能である．過去

している．このシステムの基本部分は # / #  のバージョンは直接参照することが不可能である．例と $ /$ 0   である．

は # /，#/

 #$ /$ 0  ，# 1 #   $ 1 

して，# / で 

以下に存在するすべてのファ

イルやディレクトリを からも読み書き出来るよ というファイルを作成した場合，

 ，バージョン管理サブシステム，管理用コマンド群

うに接続し，から構成される．今回の実装においては，バージョン管理# / はサブシステムとして 2  2  

イルとして  

%&/( と 2  3$ 2   $ 0   $ 0   が利用可能である．2  は，我々が作成した，ファイルを 自身 の最新バージョンのファ を作成し，過去のバージョン記録ファイルとして  
する．

 は 

 というファイル

圧縮せず単純にバージョンを記録していくサブシステム

を指すことになる．また， である．

の下では参照出来ない．ユーザはバージョンが記録されるのは，新規にファイルを作成 を作成
 は の下のファイルのみを操作することになる．

した場合や既存のファイルを変更した場合である．これ# / は 常 に 最 新 バ ー ジョン の ファイ ル を ファイ

らの場合，ファイルを新規バージョンとして記録する．

ルシステム上に用意しているため 上記の例では

また，ファイルを読み出す場合は最新のバージョンを読

み出すことになる．さらに，# / はファイルのロック

ルを単に読み出すだけであるので高速に動作する．ファ，ファイルの読み出しはそのファイを行い，ファイルのバージョンとしての記録作業が終わ

イルを読み出し専用で開いた場合は，'"44 ファイルシ



 

コンピュータソフトウェア

ステム %&*( 何も変更せずに通常のファイルシステムに読み書きを行うファイルシステム と同じ動作をする．そ合，読み出しや書き込みといった操作は従来と同じであるが，ファイルに対して閉じる動作 $

システムコール を行った際，そのファイルに対して   動作を行う．この   の動作は # 1 が行う．
# 1 はカーネル内の #/ とバージョン管理サブシス

Time(Sec.)

れに対し，書き込みフラグを付けてファイルを開いた場

9
8
7
6
5
4
3
2
1

VCFS
NULLFSUFS

1

テムとの中継を行うデーモンプログラムである．# 1

2

3

4

5

6

7

図

ファイルの読みだし性能

Number of Reading

8

9

10

はカーネルから依頼されるファイルのバージョン管理を引き受け，バージョン管理サブシステムを起動する．
バージョン管理サブシステムは，実際にバージョンを記録する部分である．バージョン管理サブシステムは複数のバージョン管理ツールの集合体である．今回は 2 

ファイルの大きさが 5 の異なるファイルを，単一%&/( と 2  を用いたが，他のツールを使用することもプロセスで繰り返し連続して読み出す時の処理時間を出来る．

計測した．ここで，ファイルの内容は処理時間に影響をファイルの読み書きテスト

管理用コマンド群は，通常のファイル操作では行えな与えない．読み出し実験は回数を変化させて各回数毎にい操作をするためのコマンド群である．コマンドの例と処理時間を測定した．複数回読み出しを行う時は，同一して，任意のバージョンのファイルの取り出し，ブラン

ファイルを指定された回数読み出すのではなく，異なる

チ作成，バージョン間の差分の閲覧などがある．

ファイルを読み出す．そのため，ファイルの個数を読みの 実装は 51 "'*+ %'( %&0( 系のオペレー

ティングシステムである /

%/(

時間とは連続した読み出しを行うプロセスの実行時間で言語で記述し，全ある．つまり，プロセスの生成から消滅までの時間とな

51 %&2 4を対象にして行った．実装はすべて



体で &&& 行程度である．

る．測定した結果を図 に示す．縦軸は実行時間を示し，横軸は読み出した回数を示す．

 の評価

いずれの回数においても # / と '"44/ はほとん

本節では，システムの性能とファイルシステムに必要な容量の点から 

出す回数分だけあらかじめ用意しておく．ここで，処理ど違いが見られない．このことからファイルの読み出しの評価を行う．システムを導入

に関して，バージョン管理機能に要する時間はわずかでしても，システムの動作が遅く開発に支障を来たしてしあることが分かる．# / や '"44/ は，"/ と比べまう場合には実際の開発環境へに導入することは難しい．

ると約 &9余計に時間を要している．これはスタッカブ

そこで，ファイルの読み書きに関してファイルシステム

ルファイルシステムとして実装されていることによるとの性能評価を行った．

考えられる．

本評価では，ファイルシステムとして通常用いられる同様のテストを，書き込みに関しても行った．ファイ"'*+ ファイルシステム "/ とスタッカブルファイル

ルの大きさを 5 とし，異なるファイル名で単一プロシステムの一つである '"44/ と # / の比較を行っ

セスで繰り返し連続して書き込む時の処理時間の計測をた．以下で述べるテストは，バージョン管理サブシステ行った．測定結果を図 に示す． :# /;< は # 1 とムとしてバージョン間の差分を計算して圧縮して保存

2  の間で同期をとり完全にバージョンの記録が完了すするのみ 2  を用い，!

るまでの時間を計測したものである．:# /< の場合はの計算機で行った．

 678)52 

2  の終了を待たない．
"/ と比べ，'"44/ は約 &9余計に時間を要する．

 #$% &

()



アプリケーションのコンパイル時間 秒 

表

30
Time(Sec.)

'% &

VCFS+
VCFS
NULLFS
UFS

20

,3



# /

%(

%

'"44/

%

%&

"/

&%(

)%

10

0
1

2

図

3

4

5

6

7

Number of Writing

8

9

表

10

ファイルの書き込み性能

これは読み出しにおける "/ と '"44/ との違いとディスク使用容量  バイト
"/

# /

,





))

,







,





&

同じである．# / と "/ を比べると，書き込みの際には新たなバージョンを保存する時間を要するため，約&9# / のほうが遅い．# /;は，"/，'"44/



容量テスト

筆者の所属する学科で行われる ! $ サブセットコ

，# / と比べると数倍の時間を要する．これはバー

ンパイラ作成演習の作業を 

ジョンの記録を行うための 2  の処理時間を含んでいるたデータを表 に示す．:全行数< は最終バージョンのためである．しかし，実際はバックグランドでバージョ

言語のソースファイルの全行数を表す．:総ファイル数<

ン管理サブシステムが動作し，バージョンの記録を行う．

は最終バージョン

このため，ファイルを書き込む利用者に対する応答時間

す．:総バージョン数< はは，# /;ではなく # / の時間になる．# / の時

ジェクトファイルなどすべてのファイルのすべてのバー

間は，利用者に対してファイルの保存に関する動作の支

ジョンの総数を示す．括弧内の値は障をきたすことはないと考える．

イルのみのバージョンの総数を示す．例えば， ,に適用した．適用し言語のソースファイルの総数を示
言語のソースファイル，オブ

言語のソースファ

最後に，実際のアプリケーションのコンパイルに要す は全行数が & 行で，& 個のソースファイルを作成

る処理時間を測定した．測定対象となるアプリケーショ

し，総バージョン数は ( 個にであることを示す．そのンは /

うち， 言語のソースファイルのバージョン数は  個

51 に付属の :< と :,3< のプログラムとした．アプリケーションのソースファイルは各ファイであった．

ルシステム上に用意しておき，: < の開始から終了"/ '"44/ は "/ と同じとなる と # / 上でまでの時間を処理時間とした．測定結果を表 に示す．コ

最終的なファイルの総容量を表 に示す．この値はソーンパイルが行う作業は，異なるソースファイルのコンパ

スファイルだけでなく，コンパイルした結果のオブジェ

イルの繰り返しである．コンパイル時に行われる作業は，

クトファイルも含んでいる．

ソースファイルの読み出しとそのソースファイルから生"/ 上の容量が通常のファイルシステムで保存した時成されたオブジェクトファイルの書き込みであり，ファの大きさであり，この大きさと比べると # / は =) 倍

イルシステムに対して読み書きを行う． # / は "/

の容量を必要とする．しかしながら，最も大きい場合でと比べると &9程度の時間を要する．これは，実用上問も % バイトであり，バージョン管理サブシステムと題ない程度の時間である．

して差分圧縮を行わない 2  を用いた実験でも，最も大きい場合で & 倍程度の % バイトとなった．



 

コンピュータソフトウェア
表 & .
 *
 

)**)
,0-'
./,*

総ファイル数,/.0&+1/** 1*&&2.,) 1&,'2*/' 1.,'2

2

総バージョン数 ソースファイルのみ

多くのメトリクスデータを収集するための一般的なの概要

本章では，
ス環境  

全行数

プロジェクトの内容

環境を持つ．

の 応用の一例として、メトリク  

 

% さまざまな粒度のメトリクスデータを容易に収集出



来る．

について述べる．これまでのメトリクス環境は，事前にソフトウェア開発活動には，開発者や管理者といっ収集するメトリクスを決め，そのためのツールを用意すた多くの側面からの活動がある．さまざまな側面にる必要がある．一方，  は，全てのファイルのバー

応じて，異なる粒度のデータが必要なる場合がある．

ジョンを漏れなく保存するファイルシステム 

をさらに，あるメトリクスにおいてさまざまな粒度を用いて実現されているため，プロジェクトの開始後でさ考えることで，メトリクスの抽象化をより多くの角えもメトリクスを収集する方針を変更し，過去のプロダ

度から行うことが出来る．

クトの情報を収集することが可能である．

% 収集したメトリクスデータの構造は独自なものでは

ない．



近年，オープンソースの考え方 %-( が広がりつつあ

メトリクス環境の必要条件

本節では，定量的計測を行うメトリクス環境として必る．ソフトウェアアーキテクチャ，設計，実装など要な事項について考える．メトリクス環境とは，一般のを隠すことなく，世の中へ公開する動きがある．こソフトウェア開発の定量的プロセスやプロダクトの計測のような状況では，収集するメトリクスデータに一のための環境である．メトリクス環境では，開発者の活般的に用いられる構造を採用することはとても重要

動から定性的ではなく定量的なメトリクスを収集する．

である．メトリクス環境の質を高めることにもなる．

また，データを保存し分析するための機能を提供する．
メトリクス環境によって収集されたデータは，ソフト  アーキテクチャの設計

ウェアプロセス評価の際にも使用出来る．我々は，メト

図 に    

 



リクス環境には以下の  つが必要だと考える．

 のアーキテクチャを示す%  

% 開発者に余計な負担をかけない．

したメトリクスデータを容易に収集出来るメトリクスは 

を利用

開発者は，:特別なツールを使うように< や :あらか

環境である．

じめ決められた方法で開発してくれ< といった，デー

用いて，さまざまなメトリクスデータを提供する．さらタを収集するために特別な操作を強要されるのを好に，任意のファイルごとの詳細な更新履歴を，> . ブラ

まない．そのため，これらの余分な作業について考ウザを用いて参照出来るツールも提供する．

える必要がある．さらに，開発者にこれらの作業をに開発環境を構築することにより，開発環境中のファイ課すことは収集するデータの品質に問題を引き起こ

ルに対する全ての操作は 

すかもしれない．

開発者はデータの分析ツールなどで，記録された履歴を

% さまざまな種類のメトリクスデータを容易に収集出が収集したファイルの更新履歴を上によって記録される．

から取得することが出来る．これらの情報を得来る．

るにあたって，開発環境自身を変更する必要はなく，単あるメトリクスデータを収集するたびに単一のプロに 

グラムを利用するのではなく，汎用性のあるツール

る．開発者はメトリクスを   で取得可能かどうかからなるツール群を構築する．これらのツール群はを気にすること無く，開発作業を続けることが出来る．

上でこれまでと同様の開発を行うだけであ #$% &

'% &

()



Developer
Analysys data feed back

Development
activities

MAME

Development -Metrics Tools
Environment -Version Viewer
Read/Write Files

Get Version Files

MoraineOS図  アーキテクチャ
図にはさまざまな種類のメトリクスツールが含バージョンビューア

まれている．現在の実装には，メトリクスツールが出力境を変更する必要がなく，  を導入する以前

する情報はバージョンの数，ファイルの更新時間，ファの開発形態でそのまま開発が続けられる．つまり，イルの更新者，ファイルの行数，ファイルが言語で記開発者に対してメトリクスを収集するための特別な述されている場合は関数の個数，ディレクトリ内のファ作業を指示する必要はなく，余計な負担をかけない．

イル一覧がある．また，これらの情報を組み合わせた出%  

は，開発環境上のファイルに対する更新履力も可能である．これらのデータはテキスト形式で出力歴を収集する．我々はソフトウェア開発作業の多くされ，! $ などの言語を用いて容易に加工が出来る．

はファイルに対する操作だと考える．  はファ

図 はバージョンビューアの画面イメージである．バー

イルの内容の変更や，ファイルの作成，削除といっ

ジョンビューアは > . ブラウザを用いている．画面のたファイルに対するすべての操作を記録する．ファ一番左の列はバージョン番号を表す．バージョンは最初

イルの更新時間や更新者，ファイルの行数といったのバージョンである % から始まり，最新のバージョン

データが容易に取得可能であり，これらのデータをまですべてを表示する．各バージョンは，バージョン番

加工することによってメトリクスデータを容易に収号，更新した日付，更新した開発者，前バージョンからの追加もしくは削除された行数，行数を棒グラフ化した集出来る．
%  

は，開発者が保存したファイルの更新履歴

もの，もしタグがあればそのタグから構成される．このをすべて保存している．そのため，ファイルに関すツールを用いることでバージョンの変更履歴が視覚的にる細粒度のデータが取得出来る．また，開発時に表現できる．

行った操作を別途に記録し，共に用いることで，より高い抽象度のデータを得ることも可能であろう．

  の機能 

%  

で取得可能なデータはファイルに関する情は，%節に示したメトリクス環境に必要な機報をテキスト形式である．出力されたデータをその能を満たしている．以下に   におけるそれぞれのまま使用することも出来，複数のデータを独自に加機能について説明する．

工するこも可能である．

%  

では，メトリクスのデータの収集に 

を用い，従来の開発環境を 

の上にそのまま構築している．このため，開発者は開発者自身の環

)

) 

コンピュータソフトウェア

20

4000

3000

LOC

Number of File

15

10

2000

5
1000

0
0

図

  

50

100

Number of Version
ファイル数の推移 1500 を用いた実験

50

100

Number of Version
図

行数の推移  

50

100

150

100

開発作業後に開発中に作成されたファイルに関するメ
トリクスデータが，  で実際に取得可能であるこ



実験の概要

節で示した ! $ サブセットコンパイラ作成演習を に適用した．データ収集は演習後に行った．今

回は，学生の開発動向を知るために， つのメトリクス

80

Number of Functions

とを示す．

60

40

20

を選んだ．それぞれ，ファイルの総数 同時に存在する数，ソースファイルの全行数， 言語のソースファイル

0中の関数の総数である．
図 ，図 )，図 (は ,0  の各メトリクス値を表している．これらのグラフの横軸は

図

言語のソースファイ

Number of Version
関数の数の推移 150 

ル  個のバージョン の累積したバージョン数を表している．横軸にはバージョン数ではなくファイルの更新



時間を用いることも可能であるが，学生の演習の場合は

図 と図 )から，開発は特に問題なく順調に進んだと

実時間よりもバージョン数での推移の方が良いと考える．

考えられる．両方のグラフ共に，ほとんど単調増加を示

なぜならば，学生の場合は連続した開発は行わず，実時している．バージョン数が & から & の間では，すべて間には関係ない時間で開発するためである．

のグラフにおいてほとんど変化は見られない．これは，メトリクスデータの解釈バージョン数は増えているがファイルの行数はほぼ一定であることを示している．これらのバージョンに対して作業を行っている間，学生はファイル内の細かな変更を( #$% &'% &行っていると考えられる．

()

(

記録する．しかし，開発者はシステムの利用方法を知る

図 (は初期の段階 バージョン数が約 & で大きな増加必要があり，  8  コマンドを利用しなけを示している．そして，しばらくその状態が続いている．

ればならない．また，特定の環境を想定しているため，学生は初期の段階で必要な関数を作成し，後にその関数汎用性に欠ける．一方，

内を記述していることが分かる．また，最後の段階 バー

は完全に自動化されており，ファイルシステムとして実ジョン数が約 && で多くの関数を追加している．

装することで特定の環境に依存しない．しかしながら，

このように，学生が行った開発の動向は，   の





はバージョンを取得する機能に中心がおかれて

おり， $  

出力から容易に得ることが出来る．

ではバージョンの記録

や !#  などのツールに比べファイル

間の関係の管理や複数人での開発を支援するなどの機能考察が現在の実装には備わっていない．また，一部の  で 

用いられている自動バージョン番号付与ファイルシステ

は，現在の大容量なハードディスクがある環

ム %)( は，ディスクの容量による制約から，保存できる

境下では有用である．作成したすべてのファイルのすべバージョン数や廃棄期限が決められるのが通常である．

てのバージョンを開発者に負担をかけることなく自動的

一方，

に記録するため，開発者はバージョン管理の機構やコマたすべてのバージョンを保存している．また，これらのンドなどを学ぶ必要がない．

ファイルシステムは  と不可分な形でて実現されておを導入しても，開発者の環境を一切変更することなく保存されたファイル

り，可汎性も問題がある．
の履歴をすべて保存出来きる．

はファイルの全ての保存保存作業で生じの性能は，実際のソフトウェア開発で十分実をバージョン管理システムとして見た場合，用的と言える．バージョンを記録する際の性能の低下は効率的に任意のバージョンを記録し，取得できるというあまり存在しない．ファイルの差分を計算することに機能を持っている．また，任意のバージョンに明示的なよって，システムの負荷は上昇するが，この計算はバッタグを用いることで指定のバージョンの特定を容易に行

クグラウンドで実行されるため，実際には計算を終える

うことも出来る．

前にファイルの操作は終了する．これにより，ユーザに現在の 

の実装では，タイムスタンプや指定したタグを用いることで過去のバージョンの取得を行# や 2  と同等の機能である．しかし，

う．これは


対する負荷はほとんど存在しない．
は新しいソフトウェア開発環境モデルの基礎となるであろう．現在のソフトウェア開発環境はファイ# や 2  でルなどに対して多くの管理操作が必要である．また，シ記録したバージョンより細かい．そのため，過去のバー

ステムにすべての必要なファイルを保存しなけれならな

ジョンを検索し取得するための，より洗練された機構がい．

必要である．

を完全に消去することも出来る．消去されたファイルもで記録したバージョンの粒度はは 利用者が保存したファイルを自動的にかを用いることで，必要なくなったファイルに保存されているため，将来またそのファイルつ蓄積してすべてのバージョンを記録する．バージョンが必要になった場合に，ファイルを復元することが容易

管理システムとして関連したツールとして $  に行える．

%&(，!#  %&&(，# $  ? %&.( などがある．
これらのツールは，  8  モ デルを採用



 

しており，分散開発や同時並行開発やビルド管理といっ は 

を用いて実現されており，ソフト

た機能を実現している．さらに，グラフィカルユーザイ

ウェアメトリクス環境として新しいアーキテクチャであンターフェースを用いて操作が行うことができ，特定のる．  は 節で示したメトリクス環境にとって必開発環境と統合された場合にのみ使用出来る．これらの要な機能を全て持っている．このため，開発者に特別なツールはさまざまな粒度でオブジェクトのバージョンを強制を強いることなく，メトリクスデータを収集するた

&

& 

コンピュータソフトウェア

めの負荷もほとんどない．メトリクスデータを集める際，蓄積されたバージョンは後で容易に取り出すことが出来難である．

る．  を導入して開発を行った場合，開発作業後

でもファイルの行数などのファイルに関するメトリクス

本論文では，ソフトウェア開発環境の基盤として用いデータを，細かい粒度で取得可能となる．
 の本質は過去のバージョンや消去されたファまとめることが出来る，すべてのファイルの全バージョンを自動的に記録する堆積型ファイルシステム 

を提イルに対するメトリクスデータを取得出来る所にある．

案した．

そのため，プロジェクトの途中や終了後でさえもメトリ

し，オープンシステムな構造を持っている．そして，さクスの収集方針を設定したり変更したりすることが出来

まざまなソフトウェア開発プロジェクトに適用可能である．一般的なメトリクス環境ではあらかじめ決められた

る．また，

収集方針があるが，  では開発前にあらかじめ収した．

集方針を決める必要がない．この特性はすべてのファイはバージョン管理を容易な操作で提供を性能とディスク容量の点から評価

また，我々は 

の有用性を示すために，容易に

ルのすべてのバージョンを記録するシステムによって成メトリクスデータを収集可能な環境である   を提り立っている．また，節や 節で示した実験データに案した．  は 

よって，  は十分実用的であることが示されてい担をかけることなくメトリクスデータの収集を行う．まる．ディスクの容量は通常のファイル使用容量よりも必た，  をある開発事例に適用し，  から得要であるが，近年のディスクの大容量化により問題にはられたメトリクスデータを用いて学生の活動の分析をならない．

行った．  を用いることでメトリクスデータの収ファイルの更新をバージョンとして記録しているため，ファイルの更新履歴のみが取得出来る．そのため，なぜを用いており，開発者に負集及び解析は容易なものとなった．
今後の課題として，

や   を大規模なソファイルを更新したかを知るにはファイルの更新履歴か

フトウェア開発プロジェクトに適用することが挙げらら分析するしかない．たとえば，オブジェクトファイルれる．また，システムの信頼性を高めるために，我々はが更新された場合，コンパイルを行ったであろうといっ

カーネルと 

た分析を行う．このような分析から開発者の作業過程のいる．

のインタフェースの実装を見直して推測が可能であろうと考えている．
メトリクス環境として使われている環境として  @A*@  

,

@$

%&,( がある． @A*@ は通常の開発でメトリクスデータを収集するために使われる．開発者は必要なデータを収集するためにモジュールを導入し作成する．つまり，  @A*@ を利用する際には事前に取得するメトリクスを定める必要があ
る． ,$%+( も既存のツールと組み合わせた環境である．しかし，これもメトリクスの方針は開発前に定める必要がある．@ %*( はメトリクス環境を構築する

ためのプロジェクトである．@  はメトリクスデー
タを収集するのに  パラダイム %.( を導入している．
そのため，収集するメトリクスを決定するのにトップダ
ウン的な手法が用いられている． B  %&-( もまたメ
トリクス環境を構築している．しかし，独自のツール群を用いているため，実際の開発環境に適用することは困

参 考 文 献% & (  3 "4 5 5 6      7  3 " ., 6
7 8  $   0&'-0 &)),
% . ( 9 : ; 5    ;< = >4 ?    6       1 @ @1 22 : &@ 8 A  &)), 77 /.+B/*.
% * ( 9 : ;  ;< = >4   
6C 4 3 "7  B   3              : &,$ -1&)++2 77 '/+B''*
% , ( =   @  67  4     > 7  3 < D          : &.$ &1&)),2
77 /+B+)
% / ( =<< @ !4 ;D  $  9 >;   *0;D  E74##333 <#   #*0;# F% - ( D   4  5    9G
E74##333H #I' #3# 

 #$% &'% &<G# <G7F% ' ( D J   !      ?  @4           !"# $    8  &)+)
% + ( D 3   5   4 6  
 "   "  3 > 7      %         & '( &))+ 77 -0*B-0+
% ) ( 5  !4 ) &     >6  &))0
%&0( !  9 !     ?  @4           !"# $    8  &))-%&&(   "4   6:5 :    A5K 9  E74##333 #7#7 #F%&.(  "4 :    E74##
# #F%&*( 6   @   ! 4  
 ,,9 >D  %    ! "# *''+
 @
     $ 3   D 

()



 &-B.0 &))/ 77 ./B**%&,( ;    9 4 " 
!" ,           : */$ .1&))*2 77 &0+B&&0%&/(   8 4 ;5 B   :  5   -%    . 
: &/$ '1&)+/2 77 -*'B-/,
%&-(  !  ! $C !       !4  .4     5   157    7 3  2           : ./$ ,1&)))2 77 ,',B,).%&'(      "  !4 :      " 77        %     / $&          &        1; < > 1 22  > 

5  $ <  .000 77 +0B+' 6<   5"   3   $   ./ $- $ <  .000