In 2010 I read 37 books of all different flavours but my favorite software book of the year was definitely Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce. I have written about an idea presented in the book previously , but I thought I’d repost my amazon review here for posterity:
Growing Object-Oriented Software, Guided by Tests is an excellent book by Steve Freeman and Nat Pryce. In it, as the title suggests, they describe an agile approach for growing software incrementally over time, using tests as a tool to provoke progress and to maintain focus on quality. The authors are the creators of the jMock mocking framework, and as such they approach the design of OO software with a heavy bias towards interface-based design.
The book is concise and very well written, it feels like it has been edited to within an inch of its life. It is full of tips and patterns for common testing challenges that can be applied to any project. The book is split into five main parts:
- Introduction, explaining the motivation behind test-driven development and a basic high-level introduction to TDD. They explain the reasoning behind the Object-Oriented design principles that they follow in their process.
- The Process of Test-Driven Development, describing the test-driven process they follow in-depth. The key differentiator of their method is that they follow an “outside-in” development approach where they begin first by writing an integration test to define the feature to be implemented, then use a unit testing approach to tease out the implementation. For them, design for testability should be the highest design goal for software.
- A Worked Example, where they describe the development of a complete system following their development approach. They start from the very beginning, getting a “walking skeleton” of the application up and running right through to adding functionality feature-by-feature. There are lots of code examples and you really should pay attention to get the most of this section. As the system is developed they describe the decisions and trade-offs they make.
- Sustainable Test-Driven Development, techniques to make TDD projects work in the long-term. Topics like test flexibility, test diagnostics and test readability are covered.
- Advanced Topics, focuses on the tough topics in automated testing: persistence, multi-threaded, and asynchronous code.
This is a book which investigates what Michael Feathers calls the “deep synergy between testability and good design” in-depth. It will teach you how to create cleaner, more expressive, more sustainable code. It might even change they way you think about software development. This book is definitely is my software book of the year.
What was your favorite book of 2010?