Test-Driven Development (TDD) is an established technique for delivering better software faster. TDD is based on a simple idea - Write tests for a code before it is possible to write the code itself. However, this 'simple' idea takes skill and judgment to do well. This is a practical guide to TDD that aims to take the reader beyond the basic concepts. Two TDD pioneers show how to let tests guide a personal development and 'grow' software that is coherent, reliable, and maintainable. Steve Freeman and Nat Pryce tries to describe the processes they use, the design principles they strive to achieve, and some of the tools that help them get the job done. Through an extended worked example, the reader can learn how TDD works at multiple levels, using tests to drive the features and the object-oriented structure of the code, and using Mock Objects to discover and then describe relationships between objects. Along the way, the book systematically addresses challenges that development teams encounter with TDD - from integrating TDD into the processes to testing the most difficult features.