出版社内容情報
本書は、Microsoft .NETでの実践的なテスト駆動開発(TDD)を、アジャイルソフトウェア開発のエキスパートが披露しています。.ADO.NETによるリレーショナルデータベース、ASP.NETで作成されたユーザーインターフェースやASP.NET Webサービスなど、熟練プログラマが現実的なタスクにTDDを導入する方法を見事に紹介しています。NETクラスライブラリおよびNUnitを使用して、.NET特有の問題に焦点を当ててはいますが、Microsoftのテクノロジを使用していなくても、データベースやアプリケーションサーバーに応用できる概念が見つかるでしょう。本書でTDDの開発リズムを身につければ、デバッグ作業を減らし、設計を改善し、プログラミングプラクティスの生産性を高めることができ、改善の効果がすぐに現れます。
■目次
謝辞
はじめに
第1部 テスト駆動開発入門
第1章 テスト駆動開発のプラクティス
1.1 テスト駆動開発とは
1.1.1 テストの種類
1.1.2 シンプルな設計
1.1.3 リファクタリング
1.2 プロセス
1.2.1 テストリスト
1.2.2 レッド/グリーン/リファクタ
まとめ
第2章 .NETでのテスト駆動開発
2.1 タスク
2.2 テストリスト
2.2.1 最初のテストの選択
2.3 レッド/グリーン/リファクタ
テスト1:Stackを作成し、IsEmptyがtrueであることを確認する
テスト2:Stackにオブジェクトを1つプッシュした後、IsEmptyがfalseであることを確認する
テスト3:Stackにオブジェクトを1つプッシュし、そのオブジェクトをポップした後、IsEmptyがtrueであることを確認する
テスト4:オブジェクトを1つプッシュし、それを記憶しておき、オブジェクトをポップして、2つのオブジェクトが同じであることを確認する
テスト5:オブジェクトを3つプッシュし、それらを記憶しておき、それぞれをポップして、それらが正しい順番で削除されることを確認する
テスト6:要素を含んでいないStackをポップする
テスト7:オブジェクトを1つプッシュした後、Topを呼び出し、IsEmptyがfalseであることを確認する
テスト8:オブジェクトを1つプッシュし、それを記憶しておき、Topを呼び出して、返されたオブジェクトが先ほどプッシュしたものと同じであることを確認する
テスト9:複数のオブジェクトをプッシュし、それらを記憶しておき、Topを呼び出して、最後にプッシュした要素がTopから返されたものと同じであることを確認する
テスト10:オブジェクトを1つプッシュして、Topを繰り返し呼び出し、返されたものとプッシュしたものを比較する
テスト11:要素を含んでいないStackでTopを呼び出す
テスト12:Stackにnullをプッシュして、IsEmptyがfalseを返すことを確認する
テスト13:Stackにnullをプッシュして、Stackをポップし、返された値がnullであることを確認する
テスト14:Stackにnullをプッシュして、Topを呼び出し、返された値がnullであることを確認する
まとめ
第3章 リファクタリング
3.1 ふるい
3.1.1 リファクタリングの前に問題が何もないことを確認する
リファクタリング0:不要なコードを削除する
リファクタリング1:メソッドの名前を変更する
リファクタリング2:テストを追加する
リファクタリング3:メソッドを隠す
リファクタリング4:ネストした条件をガード句と置換する
リファクタリング5:メソッドをインライン化する
リファクタリング6:変数の名前を変更する
リファクタリング7:ループを1つにまとめる
リファクタリング8:無駄なコードを削除する
リファクタリング9:ループを1つにまとめる(その2)
リファクタリング10:ローカル変数のスコープを縮小する
リファクタリング11:TempとQueryを置換する
リファクタリング12:無駄なコードを削除する
リファクタリング13:メソッドを抽出する
リファクタリング14:メソッドを抽出する(その2)
リファクタリング15:ローカル変数のスコープを縮小する
リファクタリング16:手続き型の設計をオブジェクトに変換する
リファクタリング17:データは使用する場所の近くに配置する
まとめ
第2部 テスト駆動開発実践
第4章 メディアライブラリサンプル
4.1 背景情報
4.1.1 既存のデータベース
4.2 最初の機能
4.3 その他の機能
第5章 プログラマテスト:ADO.NETでのTDDの使用
5.1 データアクセス層のテスト
5.2 タスク
5.2.1 データベースへの接続
5.2.2 個々のエンティティへのアクセス
5.3 エンティティ間のリレーションシップのテスト
5.3.1 Track-Recordingリレーションシップ
5.4 Recordingの取得
5.5 テストの構成
まとめ
第6章 プログラマテスト:ASP.NET WebサービスでのTDDの使用
6.1 タスク
6.1.1 テストリスト
6.2 データ変換
6.2.1 DTO
6.3 データベースカタログサービス
6.4 Webサービスのテスト
6.4.1 Webサービスのプロデューサ/コンシューマインフラストラクチャ
6.5 あと一息
まとめ
第7章 顧客テスト:最初の機能の完成
7.1 これで完成?
7.1.1 顧客テスト
7.2 Recordingを取得するための顧客テスト
7.2.1 スクリプト1:既存のRecordingを取得して、その内容を検証する
7.2.2 スクリプト2:存在しないRecordingを取得する
7.3 顧客テストの自動化
7.3.1 FITの概要
7.3.2 FITと実装との接続
7.3.3 FITによる自動化
7.4 見解の統一
7.4.1 Trackの録音時間
7.4.2 Recordingの録音時間
まとめ
第8章 顧客テスト主導の開発
8.1 FITスクリプト
8.1.1 既存のRecordingへのReviewの追加
8.1.2 Reviewの追加と削除の実装
まとめ
第9章 顧客テスト主導の開発:失敗状態の洗い出し
9.1 プログラマテスト
9.1.1 SOAPフォールトの実装
まとめ
第10章 プログラマテスト:トランザクションの使用
10.1 プログラマテスト
10.1.1 トランザクションマネージャ
10.1.2 TransactionManagerとテスト/アプリケーションコードの統合
10.2 プログラマテスト:Catalogクラス
まとめ
第11章 サービス層のリファクタリング
11.1 問題
11.1.1 何が問題なのか
11.1.2 解決策
まとめ
第12章 Webクライアントの実装
12.1 ユーザーインターフェイスのテスト
12.2 タスク
12.3 検索の実装
12.3.1 検索サービスの実装
12.3.2 検索ページの実装
12.3.3 Repeater Webコントロールへの結果のバインディング
12.3.4 このスタブはもう十分
まとめ
付録A NUnit入門
A.1 NUnitクイックスタート
ステップ1:テストコード用のVisual Studioプロジェクトの作成
ステップ2:NUnitフレームワークへの参照の追加
ステップ3:プロジェクトへのクラスの追加
ステップ4:NUnit GUIテストランナーを使用するためのVisual Studioプロジェクトの設定
ステップ5:テストのコンパイルと実行
ステップ6:NUnit GUIテストランナーのレイアウト
A.2 NUnitの基本概念
A.2.1 テストケース
A.3 NUnitのその他の機能
A.3.1 SetUp属性とTearDown属性の使用
A.3.2 ExpectedExceptionの使用
A.3.3 Ignore属性の使用
A.3.4 TestFixtureSetUpとTestFixtureTearDownの使用
A.3.5 テストのライフサイクルコントラクト
A.4 Visual Studio .NETのデバッガとNUnit GUIテストランナーの併用
付録B ADO.NETのトランザクション
B.1 トランザクション管理
B.1.1 手動によるトランザクション管理
B.1.2 自動的なトランザクション管理
B.2 トランザクション参加
付録C 参考文献
内容説明
データベースやアプリケーションサーバーなど、現実的なタスクにTDDを導入する方法を一挙に紹介。
目次
第1部 テスト駆動開発入門(テスト駆動開発のプラクティス;.NETでのテスト駆動開発;リファクタリング)
第2部 テスト駆動開発実践(メディアライブラリサンプル;プログラマテスト:ADO.NETでのTDDの使用;プログラマテスト:ASP.NET WebサービスでのTDDの使用 ほか)
付録
著者等紹介
ニューカーク,ジェームズ[ニューカーク,ジェームズ][Newkirk,James W.]
Microsoft Platform Architecture Guidanceチームの開発リーダーを務め、「Patterns&Practices」シリーズを通じてエンタープライズカスタマーを対象としたガイダンスや再利用可能な資源を構築している。書籍の執筆やソフトウェアプロジェクトのコンサルティングの合間をみて、NUnit V2の開発を進めた
ウォロンツォフ,アレクセイ[ウォロンツォフ,アレクセイ][Vorontsov,Alexei A.]
ソフトウェア開発者として8年以上の経験を持ち、科学数学アプリケーションからエンタープライズシステムまで、さまざまな環境でソフトウェアを開発してきた。大規模な分散ソフトウェアソリューションと、エンタープライズシステムの開発を低コストで実現するアジャイル開発技法を実践したアプリケーションの開発、テスト、管理に関心を持っている
※書籍に掲載されている著者及び編者、訳者、監修者、イラストレーターなどの紹介情報です。