Team Foundation Server (TFS) は、アジャイル開発における自動化の要請に応えるための総合的なソフトウェア開発支援システムです。アジャイル開発では短い時間で「動くソフトウェア」を完成させる必要があり、そのためにソースコードの変更歴管理、ビルド、再テストなどの作業を自動化させることが行われています。また顧客からの要求(ストーリー)の変更管理や、開発者のタスクの進捗管理をツールによって支援することも増えています。TFSでは、ソースコードやテスト結果の情報と、ストーリーやタスクの情報、その他アジャイル開発で必要とされる情報を1つの統合化されたリポジトリで管理することによって、必要なデータを1か所からすぐに取り出せるという、他の開発支援ツールにはない特徴を備えています。TFSはアジャイル開発を促進する最新のチーム コラボレーション サーバーです。必要な情報が1か所に集まっているので、チーム メンバー間でのスムーズな連携が実現されます。ビルドやテストで問題が発生した時は、前回のビルドから変更のあったソースコードを即座に表示させることができます。作業項目の追跡やレポートの機能が充実しているので、リアルタイムにプロジェクトの状況を把握し、多角的な視点からプロジェクトの予測を行い、プロジェクトの重要な場面において、迅速かつ適切な判断を下すことができます。
TFSは、Visual Studioの対応領域を開発フェーズだけでなく、プロジェクトの計画フェーズから、テスト、リリースフェーズにまで広げた製品です。さまざまなプラグインが用意されているので、Visual Studioだけからではなく、Microsoft Project や Excel、Webブラウザ、Eclipseなどからも使用することができます。開発者は、Visual StudioやEclipseなど実際の開発で使用している環境から、管理者や顧客側の人間は、Microsoft Project や Excel、Webブラウザなどから、テスト担当者はTest Managerからと言ったように、それぞれが自分の使いなれたツールからTFSの機能を利用することができます。
TFSはバージョン管理システムであるMicrosoft Visual SourceSafe (VSS)の後継として発展しています。ソースコードだけでなく、要件やテスト ケース、バグレポートなど発プロセスの各工程で分散して管理されていたリソースを一元化して、包括的に管理することで、あらゆる情報を追跡し、進捗や統計情報など最も適したビューを提供することを可能にしています。
TFSは、以下のような機能を持ちます。
作業項目の追跡
TFSは、作業項目としてアジャイル開発におけるさまざまな作業を管理します。作業項目には、ユーザー ストーリー、タスク、テスト ケース、バグ、懸案事項、変更依頼などがあります。作業項目同士やソースコードの変更情報(変更セット)などとのリンクが設定でき、プロジェクトのあらゆる情報を追跡することができます。プロジェクト開始前の計画段階から作業項目をTFSに登録し、その作業項目が最終的にリリースされるまで管理することができます。また、リリース後に判明したバグも管理することができます。期限、担当者、進捗率、優先度といった基本情報から、作業の履歴、設計書などの成果物、ソースコード、テスト結果などの添付やリンクなど、作業に関係する要素を関連付けて管理することができます。作業項目の種類や、各作業項目における管理項目は、アジャイル プロジェクト用のテンプレートが事前に用意されているので、そのまま使用することができます。もちろん独自に定義することも可能です。プロジェクト管理者は Excel や Microsoft Project といった既に使い慣れているツールを利用して、作業項目の登録や更新を行うことができます。
レポート
作業項目のデータからプロジェクトの進捗や統計情報をグラフ化します。作業項目から直接生成されるので、資料用に新たにグラフを作成する必要がなく、リアルタイムにプロジェクトの状況を把握することができます。バージョン管理や自動ビルド、プロジェクト管理などで蓄積されたデータが分析され、チーム メンバー全員が閲覧することができます。リアルタイムのパフォーマンスと品質評価のレポートによって、開発プロジェクトの情報と状況が可視化されます。すべての情報はWebページとしてみられるだけでなく、PDF や Excel ファイルに変換して活用することもできます。
バージョン管理
ソースコードとその変更の履歴をリポジトリというデータベースで管理します。チーム内でのソースコードの共有はもちろん、変更内容に作業項目を関連付けて、変更に至った経緯なども合わせて記録します。パージョン管理のリポジトリの中には、アプリケーションのソース コードだけではなく、ドキュメントなど、プロジェクトにおけるあらゆる成果物を格納することができます。
TFSのバージョン管理では、問題のあるコードはチェックインさせないというポリシーによって、ソースコードの品質は高く保つことができるようになっています。「ビルドが成功する」「作業項目と関連付けられている」「Visual Studioのコード分析やテスト機能を満たすこと」をチェックイン ポリシーとして指定することができます。なお、チェックイン ポリシーを満たさないファイルは、シェルブとしてTFS上に保存しておくことができます。シェルブとして保存したファイルを他のチーム メンバーが取得して編集することもできます。
VSSでのチェックインはそれぞれのファイル単位で記録されていて、どのファイルがいつ誰によってチェックインされたかを管理していました。一方、TFSでは、同時にチェックインされたファイル群は1つの固まりとして管理されています。そして、いつ誰がどのファイル群をチェックインしたかが明確になるようにしています。このチェックインされたファイル群(固まり)のことを「変更セット」と呼んでいます。
ビルド管理
TFSはアジャイル開発のプラクティスである継続的インテグレーションのサーバーとしての機能を持ちます。自動化されたビルドを毎日定期的に、あるいはソースコードの変更を契機にして実行させることができます。ビルドと同時にテストを実施することで、バグの早期発見にもつながります。また、このタイミングでソースコードの解析を行い、品質が維持されているかのチェックを行うこともできます。TFSには、Build Extensionという機能がありますので、Visual Studio以外のプロジェクトでもビルドを行うことができます。
回帰テストが自動的に実行されるように設定することで、手戻りリスクを軽減することができます。ビルド結果のログはつねに残され、前回のビルドからのソース コードの変更差分もみることができます。標準で用意されているアジャイル プロジェクト用のテンプレートでは、ビルドが失敗すると自動的に「バグ」という作業項目が追加されます。したがって、バグ管理システムを別途用意して、結果を登録するということを人間が行う必要はありません。
TFSでのビルドのトリガーは他の継続的インテグレーション サーバーと比べても豊富です。手動(チーム メンバーが明示的に実行を指示する。そのほかのトリガーを使っている場合は補足的な利用になるケースが多い)、継続的インテグレーション(ソース コードがチェックインされると自動的にビルドを行う。チーム メンバーはチェックインを行う以外に操作を行う必要はない)、ビルドのロール(基本的には継続的インテグレーションと同様だが、一定間隔ごとにビルドを行う。チーム メンバーはチェックインを行う以外に操作を行う必要はない。ビルド時間が長かったり、サーバー負荷が高すぎたりする場合に利用することが多い)、ゲート チェックイン(チェックインされると自動的にビルドを行うが、継続的インテグレーションはチェックイン後、こちらはチェックイン前にビルドを行う。チーム メンバーはチェックインを行う以外に操作を行う必要はない。継続的インテグレーションよりもチェックインに対する制約を厳しくしたい場合に利用する)、スケジュール(指定された時間になると自動的にビルドを行う。チーム メンバーの操作は必要ない。毎日朝3時など定期的なビルドを行いたい場合に利用する)という5種類が用意されています。ゲート チェックイン時のビルドに失敗した場合、チェックインしようとしていた内容はシェルブとして保存されることになります。
プロジェクト ポータル
プロジェクト全体の状況がどうなっているかを、Webブラウザからチーム メンバーやプロジェクト リーダーなどプロジェクトにかかわっているあらゆる人がいつでも参照することができます。チーム コミュニケーションのためのWikiやスケジュール、カレンダーなどの機能を利用することもできます。
テスト管理
テスト計画からテスト ケースの構成、テストの実施、自動化、バグ管理まで、テストのライフサイクルを統合的に管理します。テスト対象となるユーザー ストーリーや、テスト対象のビルド バージョン、発生したバグとその修正情報など、テストに関するあらゆる情報が追跡可能となります。
このようにTFSはアジャイル開発の計画から、ソースコードの開発、テスト、リリースに至るまで、すべての作業を支援するツールです。
アジャイル開発においても、計画は必須です。プロジェクトの計画は、Microsoft ExcelやProjectによって立てられることが多いでしょう。ここでの問題点はプロジェクトが進んで状況が変わっても、当初に立てられた計画表がなかなか更新されないことです。TFSを使えば、最新のプロジェクト状況をExcelやProjectにインポートすることできるので、スケジュールの更新負荷が減り、プロジェクトに関与する人全員が最新の情報を得ることができるようになります。「変更に強い」というのがアジャイル開発の魅力です。イテレーションのたびことに新しい計画が立てられます。そのように計画を立て続ける上で、TFSの機能は大いに役立ちます。
アジャイル開発では進捗はタスクが終わったか、終わっていないかで判断します。50%完了、80%完了と進んで行きながら、リリース直前になって、実はほとんどできていなかったということが判明するという事態はありません。TFSでは、タスクを作業管理として扱うことで、このようなアジャイル式の進捗管理をサポートしています。残っているタスクの数は、バーンダウン チャートという形で、誰の目にも明らかな形で表示します。TFSではバージョン管理、ビルド管理、テスト管理の機能が充実しているので、進捗のレポートがほとんど自動的に生成されます。
TFSでは、プロジェクトに必要な情報を1か所に集めて、アジャイル開発が最初から最後までスムーズに行われてるようにしています。