第 4 回【上級編】一歩先行くテスト管理をやってみよう
Step 1
Team Foundation Server で管理するチーム プロジェクトを作成します。
チーム エクスプローラ (表示されていない場合は、メニューバー [表示] - [チーム エクスプローラ] をクリック) のサーバー名を右クリックして、[新しいチーム プロジェクト] をクリックします。
図 1. [新しいチーム プロジェクト]をクリックして、チーム プロジェクトを作成
[<TFS サーバー名> の新しいチーム プロジェクト] ダイアログが表示されるので、[チーム プロジェクトの名前を指定してください] に 「チーム プロジェクト」を入力して [次へ] をクリックします。
図 2. チーム プロジェクト名を入力
[チーム プロジェクトを作成するために使用するプロセス テンプレートを指定してください] に [MSF for Agile Software Development - v4.2] を選択して [完了] をクリックします。
図 3. チーム プロジェクトのプロセス テンプレートを選択
TFS 上にチーム プロジェクトが作成されて、プロセス テンプレートのページが表示されます。
図 4. [新しいチーム プロジェクト]をクリックして、チーム プロジェクトを作成
Step 2
テスト 対象のプロジェクトを作っていきます。
[ファイル] - [新規作成] - [プロジェクト] をクリックします。[新しいプロジェクト] ダイアログが表示されるので、[Visual C# (または、Visual Basic)] - [Windows] を展開して、[クラス ライブラリ] を選択します。[プロジェクト名] に 「チーム開発ライブラリ」を入力します。[ソース管理に追加] をチェックして、[OK] ボタンをクリックします。
図 5. クラス ライブラリ プロジェクトを作成
[ソリューション チーム開発ライブラリをソース管理に追加] ダイアログが表示されるので、[チーム プロジェクトの場所] に表示されている [チームプロジェクト] が選択されていることを確認して、[OK] ボタンをクリックします。
図 6. ソース管理に使用するチーム プロジェクトを選択
生成された Class1 に足し算メソッドを追加します。

- public int 足し算(int x, int y)
{
return x + y;
}

-
Public Function 足し算(ByVal x As Integer, ByVal y As Integer) As Integer
Return x + y
End Function
Step 3
足し算メソッドに単体テストを作成していきます。
足し算メソッドを右クリックして、[単体テストの作成] をクリックします。
図 7. 足し算メソッドを右クリックして、単体テストを作成
[単体テストの作成] ダイアログが表示されるので、[足し算] メソッドがチェックされていることを確認して、[OK] ボタンをクリックします。
図 8.単体テスト対象を確認して、[OK] ボタンをクリック
[新しいテスト プロジェクト] ダイアログが表示されるので、「チーム開発ライブラリ.Test」 と入力して、[作成] ボタンをクリックします。
図 9.単体テスト プロジェクト名を入力して、[作成] ボタンをクリック
テスト コードが生成されるので、以下のように編集します。

-
[TestMethod()]
public void 足し算Test()
{
Class1 target = new Class1();
int x = 3;
int y = 5;
int expected = 8;
int actual;
actual = target.足し算(x, y);
Assert.AreEqual(expected, actual);
}

-
<TestMethod()> _
Public Sub 足し算Test()
Dim target As Class1 = New Class1
Dim x As Integer = 3
Dim y As Integer = 5
Dim expected As Integer = 8
Dim actual As Integer
actual = target.足し算(x, y)
Assert.AreEqual(expected, actual)
End Sub
Step 4
テスト リストを作成して、作成したテストをリストに追加します。
メニュー バーの [テスト] - [ウィンドウ] - [テスト リスト エディタ] をクリックして、テスト リスト エディタを開きます。
図 10. テスト リスト エディタをクリック
[読み込まれたすべてのテスト] に表示された [足し算Test] を右クリックします。
[新しいテスト リスト] をクリックします。
図 11. テストを右クリックして、[新しいテスト リスト] をクリック
[新しいテスト リストの作成] ダイアログが表示されるので、[名前] に 「チェックインテスト」 を入力して [OK] ボタンをクリックします。
図 12. テスト リストの名前を入力して [OK] ボタンをクリック
[テスト リスト エディタ] の [テストの一覧] を展開すると、作成した [チェックインテスト] が表示されて、[足し算Test] がリストに表示されます。
図 13. [テストの一覧] を展開すると作成したテスト リストが表示されて、テストが追加されている
[ソリューション エクスプローラ] のソリューションを右クリックして、[チェックイン] をクリックします。
図 14. ソリューションを右クリックして [チェックイン] をクリック
[チェックイン] ダイアログが表示されるので、[コメント] に 「新規チェックイン」 と入力して [チェックイン] ボタンをクリックします。
図 15. ソリューションを右クリックして [チェックイン] をクリック
チームプロジェクトにチェックインしたソリューションが追加されていることが確認できます。
図 16. チーム プロジェクトに追加したソリューションが追加される
Step 5
TFS をソース管理に使用すると、単体テストが完了していることをチェックイン時のルールとして登録することができます。
[チーム エクスプローラ] の「チームプロジェクト」を右クリックして、[チーム プロジェクトの設定] - [ソース管理] をクリックします。
図 17.チーム プロジェクトを右クリックして [ソース管理] をクリック
[ソース管理の設定] ダイアログが表示されるので、[チェックイン ポリシー] タブをアクティブにして、[追加] ボタンをクリックします。
図 18.[ソース管理の設定] ダイアログで [追加] ボタンをクリック
[チェックイン ポリシーの追加] ダイアログが表示されるので、[テスト ポリシー] を選択して、[OK] をクリックします。
[参照] ダイアログが表示されるので、チーム プロジェクトに保存したテスト プロジェクトのテスト メタデータ ファイル (拡張子が .vsmdi のファイル) を選択して、[OK] ボタンをクリックします。
図 19. Visual Studio テスト メタデータ ファイルを選択して、[OK] ボタンをクリック
[テスト ポリシー] ダイアログが表示されるので、前のステップで作成したテスト リストである [チェックインテスト] をチェックして、[OK] ボタンをクリックします。
図 20. 対象のテスト リストをチェックして、[OK] ボタンをクリック
Class1.cs を編集して、チェックインします。ここでは、簡単にメソッドにコメントを追加するだけにしておきます。

- // 足し算テスト
[TestMethod()]
public void 足し算Test()

-
' 足し算テスト
<TestMethod()> _
Public Sub 足し算Test()
[ソリューション エクスプローラ] で、[Class1.cs] を右クリックして、[チェックイン] をクリックします。
図 21. Class1 を右クリックして、[チェックイン] をクリック
[チェックイン] ダイアログが表示されて、[ポリシー警告] をアクティブにすると、[ポリシーの警告] が表示されていることが確認できます。
図 22. [チェックイン] ダイアログで、ポリシーの警告が表示される
このまま、[チェックイン] ボタンをクリックすると、[ポリシー エラー] ダイアログが表示されます。
図 23.ポリシー警告を無視して、チェックインすると、[ポリシー エラー] ダイアログが表示される
[ポリシー エラー] ダイアログでは、[ポリシー エラーをオーバーライドして、チェックインを続行] をチェックして、[理由] の欄にポリシー違反をする必要がある理由を記入することで、チェックインすることも可能ですが、通常はここで [キャンセル] ボタンをクリックして、きちんとテストを実施した後で、再度チェックインを行います。
Step 6
チェックイン時に自動的にビルドをおこなって、単体テストを実施するように設定していきます。
[チーム エクスプローラ] の [ビルド] を右クリックして、[ビルド定義の新規作成] をクリックします。
図 24. [ビルド定義の新規作成] をクリック
[ビルド定義] ダイアログが表示されるので、[ビルド定義名] に 「Build1」 を入力します。
図 25.[ビルド定義名] を入力
[ワークスペース] をクリックします。通常はデフォルトの設定で問題ありませんが、作業フォルダを変更するなど、設定を変更する必要がある場合は、ここで変更します。
図 26. ワークスペースの設定を確認
[プロジェクト ファイル] をクリックします。ビルドの設定がされていない場合、警告が表示されているので、[作成] ボタンをクリックします。
図 27.[プロジェクト ファイル] の設定で、[作成] ボタンをクリック
[MSBuild プロジェクト ファイルの作成ウィザード] ダイアログが表示されます。[ビルドするソリューションの選択および順番指定] で、対象のソリューションをチェックします。ここでは、[(すべての選択)] をチェックします。[次へ] をクリックします。
図 28.ビルド対象のソリューションを選択
[ビルドする構成の選択] がアクティブになるので、[ビルドするための構成を選択してください。] の [構成] に [Release] が選択されていることを確認して、[次へ] をクリックします。
図 29. [ビルドする構成の選択] で [Release] が選択されていることを確認
[ビルド オプションの選択] がアクティブになるので、[テストの実行 (BVT の実行など)] をチェックして、ビルド時に実施するテスト リストのテスト メタデータ ファイル (拡張子が .vsmdi のファイル) を選択します。[実行するテスト リスト] にテスト メタデータ ファイルに含まれるテストの一覧が表示されるので、[チェックインテスト] をチェックして [完了] をクリックします。
図 30.[ビルド オプションの選択] で、ビルド時に実施するテストを選択
[MSBuild プロジェクト ファイルの作成ウィザード] が閉じて、[ビルド定義] ダイアログに戻ります。[プロジェクト ファイル] で警告の表示がなくなっていることが確認できます。
図 31. [プロジェクト ファイル] の設定で、警告が表示されなくなる
[ビルドの規定値] をクリックします。[ビルド エージェント] になにも登録されていない状態なので、[新規作成] をクリックします。
図 32.[ビルド エージェント] の [新規作成] をクリック
[ビルド エージェントのプロパティ] ダイアログが表示されるので、[表示名] に 「BuildAgent」 を入力します。[コンピュータ名] にビルド エージェントが登録されているコンピューター名を入力します。それ以外はデフォルトの設定のままにして、[OK] ボタンをクリックします。
図 33.ビルド エージェントの表示名、コンピューター名を入力して [OK] をクリック
[ビルド エージェントのプロパティ] ウィンドウが閉じると、[ビルド エージェント] に入力した表示名が表示されます。[ビルドのステージング先の共有場所] にビルド結果を保持する共有フォルダー名を入力します。
図 34. ビルドのステージング先の共有場所に共有フォルダー名を入力
[トリガ] をクリックします。[チェックインのたびにビルドする (ビルド数多)] をチェックします。[OK] ボタンをクリックして、設定を完了します。
図 35.チェックイン時にビルドが行われるように設定する
さて、ビルドの設定が終わったので、ソースを変更してチェックインをしてみましょう。
足し算の結果に 1 を加算して、テストが失敗するようにソースを変更します。

- public int 足し算(int x, int y)
{
return x + y + 1;
}

- Public Function 足し算(ByVal x As Integer, ByVal y As Integer) As Integer
Return x + y + 1
End Function
[トリガ] をクリックします。[チェックインのたびにビルドする (ビルド数多)] をチェックします。[OK] ボタンをクリックして、設定を完了します。
図 36.編集したファイルを右クリックして、[チェックイン] をクリック
[チェックイン] ダイアログが表示されるので、[コメント] を記入して、[チェックイン] ボタンをクリックします。
図 37.コメントを記入して、[チェックイン] をクリック
[チーム エクスプローラ] で、[ビルド] - [Build1] をダブルクリックすると、チェックイン後、自動的にビルドが進行していることが確認できます。
図 38.チェックイン後に自動的にビルドが開始されている
[ビルド定義]をダブルクリックすると、詳細な状態を確認することができます。しばらく待つとビルドが終了します。このビルドでは、テストに×が表示されて、自動テストに失敗したことがわかります。
図 39.自動ビルドで実施されたテストが失敗していることがわかる
Step 7
テストで実行された範囲を確認するために、コード カバレッジを確認してみましょう。
メニュー バーの [テスト] - [テストの実行構成の編集] - [ローカルテストの実行 (localtestrun.testrunconfig)] をクリックします。
図 40.メニューから、[ローカル テストの実行] をクリック
[localtestrun.testrunconfig] ダイアログが表示されるので、[カバレッジ] をクリックします。[インストルメント化する項目を選択する] に表示されているテスト対象のライブラリである [チーム開発ライブラリ.dll] をチェックします。[適用] をクリックして内容を保存した後、[閉じる] をクリックします。
図 41.カバレッジ取得対象のライブラリを選択して、[適用]、[閉じる] をクリック
メニュー バーの [テスト] - [実行] - [ソリューションのすべてのテスト] をクリックして、テストを実行します。
図 42
[テスト結果] が表示されるので、結果を右クリックして、[コード カバレッジの結果] をクリックします。
図 43
[コード カバレッジの結果] が表示されるので、展開していくとメソッドごとのカバレッジが表示されます。
図 44.テストが実施されたコード カバレッジのカバー率が表示される
少し無駄なコードを書いて、カバー率を下げてみましょう。足し算メソッドを以下のように変更して、再度テストを実施します。メニュー バーの [テスト] - [実行] - [ソリューションのすべてのテスト] をクリックして、テストを実行します。[テスト結果] を右クリックして、[コード カバレッジの結果をクリックします。]

- public int 足し算(int x, int y)
{
int result = x + y;
if (x > y)
{
return result;
}
else
{
return result;
}
}

- Public Function 足し算(ByVal x As Integer, ByVal y As Integer) As Integer
Dim result As Integer = x + y
If (x > y) Then
Return result
Else
Return result
End If
End Function
[コード カバレッジの結果] を展開していくと、[カバー済み] が [75.00%] に減っていることが確認できます。
図 45.カバー率が減少していることがわかる
[コード カバレッジの結果] をダブルクリックすると、コードが表示されて、実際にカバーされているコードが色分けされて表示されます。青く表示されている部分がカバーされているコードで、赤く表示されている部分がカバーされていないコードになります。
図 46.カバー率が減少していることがわかる
Step 8
ここまでに実施してきた開発やテストなどの作業内容や進捗状況などは、TFS に自動的に記録されて、レポートの形式で確認することができます。
[チーム エクスプローラ] で、[レポート] 以下の項目をダブルクリックするとレポートが表示されます。
図 47.[チーム エクスプローラ] の [レポート] をダブルクリックして、レポートを表示
このレポートを確認するためには、TFS のライセンスが必要になりますが、無償で提供されているVisual Studio Team System Web Access を使うと、Web からレポートの参照やその他の Team Foundation Server の機能を利用することも可能です。
図 48.無償で提供されている VSTS Web Access でも同じようにレポートを確認することができる