Synopses & Reviews
With the clarity and precision intrinsic to the Test-Driven Development (TDD) process itself, experts James Newkirk and Alexei Vorontsov demonstrate how to implement TDD principles and practices to drive lean, efficient coding—and better design. The best way to understand TDD is to see it in action, and Newkirk and Vorontsov walk step by step through TDD and refactoring in an n-tier, .NET-connected solution. And, as members of the development team for NUnit, a leading unit-testing framework for Microsoft .NET, the authors can offer matchless insights on testing in this environment—ultimately making their expertise your own.
Test first—and drive ambiguity out of the development process:
- Document your code with tests, rather than paper
- Use test lists to generate explicit requirements and completion criteria
- Refactor—and improve the design of existing code
- Alternate programmer tests with customer tests
- Change how you build UI code—a thin layer on top of rigorously tested code
- Use tests to make small, incremental changes—and minimize the debugging process
- Deliver software that’s verifiable, reliable, and robust
About the Technology: Test-Driven Development is a method in which the development is driven with automated tests. As opposed to conventional development, TDD solves a different set of problems. It does so by proposing that before you write any nontrivial piece of production code, you write tests that the code will at first fail, and then when written correctly, will pass. TDD advocates say this approach has two major benefits. First, because the tests embody specific uses of the yet-unwritten software, they will help tease out the design of the software, complementary to other techniques such as requirements specification and modeling. Second, the tests create a safety net, enabling the programmer to engage in the risky but necessary practice of refactoring--continuously reorganizing the code--without fear of breakage (from Infoworld, August 8, 2003).
About the Author
James W. Newkirk, coauthor of Enterprise Solution Patterns in .NET and Extreme Programming in Practice, led the development of NUnit 2.0. Hes currently the development lead for the Microsoft Platform Architecture Guidance team, which provides guidance and reusable assets to enterprise customers through the Patterns & Practices reference series.
Alexei A. Vorontsov has been developing software in a variety of environmentsfrom scientific and mathematical applications to enterprise systemsfor more than eight years. He specializes in developing, testing, and managing large distributed software solutionsapplying agile development methods for more pragmatic, cost-efficient results.
Table of Contents
Foreword; Acknowledgments; Introduction; What Are the Benefits of Using Tests?; How to Use This Book; Small StepsA Personal Story; Companion Web Site; Part I: Test-Driven Development Primer; Chapter 1: Test-Driven Development Practices; What Is Test-Driven Development?; Process; Summary; Chapter 2: Test-Driven Development in .NETBy Example; The Task; Test ListBeck, Kent. Test-Driven Development: By Example. Addison-Wesley, 2003.; Red/Green/Refactor; Summary; Chapter 3: RefactoringBy Example; The Sieve; Summary; Part II: Test-Driven Development Example; Chapter 4: The Media Library Example; The Skinny; The First Feature; Additional Features; Chapter 5: Programmer Tests: Using TDD with ADO.NET; Testing the Database Access Layer; The Task; Testing Relationships Between Entities; Retrieve a Recording; Test Organization; Summary; Chapter 6: Programmer Tests: Using TDD with ASP.NET Web Services; The Task; Data Transformation; Database Catalog Service; Web Service Tests; Almost Done; Summary; Chapter 7: Customer Tests: Completing the First Feature; Are We Done?; Customer Tests for Recording Retrieval; Automating Customer Tests; Reconciling Viewpoints; Summary; Chapter 8: Driving Development with Customer Tests; The FIT Script; Summary; Chapter 9: Driving Development with Customer Tests: Exposing a Failure Condition; Programmer Tests; Summary; Chapter 10: Programmer Tests: Using Transactions; Programmer Tests; Programmer Tests: Catalog Class; Summary; Chapter 11: Service Layer Refactoring; The Problem; Summary; Chapter 12: Implementing a Web Client; Testing User Interfaces; The Task; Implementing Search; Summary; Part III: Appendixes; Appendix A: NUnit Primer; NUnit Quick Start; NUnit Core Concepts; Other NUnit Capabilities; Using the Visual Studio .NET Debugger with NUnit-Gui; Appendix B: Transactions in ADO.NET; Transaction Management; Transaction Participation; Appendix C: Bibliography; Appendix : About the Authors;