テスト駆動開発のスタイル

ここで、発想を変えてみましょう。

テストコードを先に書き、ソースコードを後に書くことにしてはどうでしょうか。そして、リファクタリングを後にまわすことにしたらどうでしょうか。さらに一連の作業を最小にして、この3つの作業を繰り返すことにしたらどうでしょうか。

そう、これがテスト駆動開発なのです。具体的なテスト駆動の開発プロセスは表2のようになります。


  1. テストコードを1つだけ作成(追加)する
  2. テストコードをパスする最小のソースコードを作成する
  3. リファクタリングで設計を洗練する
  4. 1〜3を繰り返す

テスト駆動開発はテストコードを先にプログラミングし、テストを成功させるための対象ソースコードを実装することによって実際のプログラム実装が進みます。いいかえると、テストを成功させるためにテスト対象となるソースコードを実装していくスタイルです。

テストコードを実装しないプログラム実装はなく、テストコードと実際のコードがペアで作成されて、開発が進みます。

最初はテストが失敗し、その失敗したテストを成功させるために最も簡単なコーディングを行います。次に、テストが成功することを確認したら、先ほど作成した簡単なコーディングをリファクタリングし、またテストを成功させます。

テスト駆動開発では、図1に示すようにエラーが起きる状態をレッド(テストがパスしない状況)、そしてテストが成功する状態をグリーン(テストをパスしている状況)というように表現します。つまり「レッド → グリーン → リファクタリング → レッド →グリーン → …」というリズムで開発が進むことになります。
 

テスト駆動開発のリズム
図1:テスト駆動開発のリズム

テスト駆動開発を採用すれば、開発者は十分なコードを書いたことを納得できます(だって、テストをパスしたのですから)。

そして、コードは十分に改善/改良されます(だって、リファクタリングという誰でも再現可能な手順で設計を洗練するのですから)。

その上、十分なテストが実施されます(だって、何度も何度もテストを通過していったのですから)。

 

「開発者の視点」から「利用者の視点」へ

先ほど述べた従来の手法は「開発者の視点」でのアプローチであり、テストも「開発者の視点」でテストが行われていました。つまり従来の手法では、開発者が作成したコードに合わせてテストを行うことになります。

ですから、「仕様を満たしているのか」「テストは十分であるのか」と開発者が常に不安を抱えてしまいます。また「開発者の視点」のテストは、「本来の仕様に応えているかどうかの確認にはならない」ということが発生してしまうのです。

しかし、テスト駆動開発は「利用者の視点」のアプローチであり、「利用者の視点」でのテストとなります。

基準となる「テスト(≒仕様)」が成功するように、コーディングを行っていくという形ですから、利用者の要求に応えるスタイルです。よって、コーディング時に仕様に対する品質を作り込むことができます。

さらに、テスト駆動開発はテストの再利用性を考慮していることから、コード修正によるデグレードがないことを確認するためのテストが自動化されているため、開発時に品質を作り込むことができます。

 

テスト駆動開発を実現するVS2005 Team Systemの機能

さて実際にテスト駆動開発を実現するには、ユニットテストを自動実行するツールとリファクタリングを効率よく実施できるエディタが必要です。

 

ユニットテスト機能

テスト駆動開発では、「テストコードを作成すること」「テストを自動化して繰り返し実行できること」「テスト結果を確認すること」をサポートするテスティングフレームワークが必要です。

VS2005 Team Systemでは、このテスティングフレームワークの機能をユニットテストが提供します。

ユニットテストは、テストを実行可能な形で保存しておくことが可能でリファクタリングを行った時に、内部のプログラミング構造が変わっても外部仕様は変わっていないことを再確認できるという利点があります。

さらに、仕様変更などが発生して一部のロジックを変更した場合、保存されているテストを流してみれば、ほかの部分に影響がでていないということやデグレードが発生していないかを確認することができます。

そしてテストケース管理機能を用いれば、個々のテストケースを実行可能な形で管理して必要な時に実行/確認できるということは大変有効といえます。

またユニットテスト、すなわちテスティングフレームワークの機能は、開発者によってバラつきがでるような属人性の排除を可能とするため、品質の均一化がはかれます。同一の尺度での評価が可能となることも大きなメリットです。当然ながら生産性向上にも寄与します。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30