ダウンロード サンプルソース(C#) (13.4 KB)
TDD(テスト駆動開発)では、仕様変更にどのように対応しているのでしょうか? デバッグはどうやるのでしょうか? 答えはどちらも「ゼロから作るときと同様にRED ⇒ GREEN ⇒ リファクタリングを繰り返す」です。今回はそれらについて、修正時に変更するテストケースの数を増やさないための考察も含め解説します。
はじめに
この連載の第1回ではTDDの基本を、第2回と第3回とでMSTestとNUnitの使い方を説明しました。ここからは、いわば実践編になります。まずは、避けて通ることのできない仕様変更とデバッグの方法についてです。
対象読者
- TDDに興味をお持ちの.NET Frameworkの開発者。
必要な環境
サンプルコードを試してみるには、C# 2010(Expressで可)とNUnit 2.6が必要です。本稿執筆時点では、下記から入手できます。
- C# 2010 Express: Microsoft Visual Studio Express
- NUnit 2.6: NUnit V2 2.6.0
- NUnitのインストール手順: NUnit 2.5 の導入 Step by Step(筆者サイト、旧バージョンでの説明ですが基本的に同じです)
※ Visaul Studio 11 betaでも構いません。その場合は、Visual StudioのIDEとNUnitを統合できます(「Visual Studio 11 betaの単体テスト機能を使ってみよう!」を参照)。
TDDでは仕様変更やバグをどう扱うのか?
仕様変更とは、TDDではテストケースの修正・追加です。バグとは、TDDではテストケースの不足や誤りです。
連載第1回で述べたように、TDDのテストファーストとは、自動化されたテストコードの形でメソッドの外部設計を先に確定させてから、それを満たすようにメソッドの内部設計(すなわち製品コードの実装)を行うことでした。
テストファースト: 外部設計(テストケース) ⇒ 内部設計(製品コード)
仕様変更の場合、新たな仕様を満たすために変更・追加しなければならないメソッドがあります。メソッドの外部設計に対する変更・追加として、仕様変更の内容をブレークダウンできたら、後はそのようにテストケースを変更・追加してテストファーストを実施します。
バグの場合、そのバグを含んでいるメソッドの外部設計に誤りがあったということです。なぜなら、自動化されたテストコードによって外部設計が記述されているのですから、テストファーストでは外部設計を満たさない実装は存在していないはずだからです。ですから、バグの原因となった外部設計(テストケース)の誤りをまず特定し、修正します。そうしてから、変更・追加したテストケースに通るように製品コードを修正します。
どちらの場合でも、テストファーストで汚くなったコードはリファクタリングします。まとめると、仕様変更でもバグ修正でも、まずテストケースの変更・追加にブレークダウンし、テストケースを変更・追加してREDになることを確認し、次に製品コードを修正してGREENにし、そしてリファクタリングします。最初にコードを書くときのTDDと同じループを回すことになります。
TDD: RED ⇒ GREEN ⇒ リファクタリング ⇒ (…繰り返し…)
それでは簡単なサンプルコードを使って、実際のやり方を見ていきましょう。
- 修正履歴
-
- 2012/05/20 21:40 初稿完
この記事は参考になりましたか?
- C#で始めるテスト駆動開発入門連載記事一覧
- この記事の著者
-
biac(ばいあっく)
HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
