It has probably taken me a year on and off reading to get through "Test-Driven Development: An Empirical Evaluation of Agile Practice" and not because it was boring but because it was hard. Why hard? Well, the amount of statistics in this book sort-of blew me away and is definitively above my usual amount (which isn't very high). It was insightful for me how thoroughly you can (and should!?) analyze SW development techniques and it does make me wonder about a lot of claims by people who use less... rigor in their analysis.
Let me start off with what this book is not. This book is *not* a book about learning test-driven development and neither will it tell you about test-driven development techniques. Reading this book will probably not make you any better (or worst) at test-driven development at all... as from this books perspective test-driven development is just one technique that can be analyzed and empirically evaluated.
The book contains 10 chapters. Of these the first three are introduction chapters to test-driven development, empirical software engineering, related studies and setting the goals of the research. Chapter 4 introduces the three 'experiments' in test-driven development for which the researchers collected data which they could analyze. The experiments are mainly with students and contain both a single-programmer and pair-programming variant. A lot of the data is collected using several Eclipse plugins.
Chapter 5-8 analyses a specific measurement for each of these different experiments: 5) the effect on amount of acceptance tests passed, 6) the effect of number of acceptance test passed per hour, 7) the effect on internal software quality and 8) the effect on unit tests (which I felt was a bit odd...). Chapter 9 is a meta-analysis which tries to combine the three experiments and make a larger conclusion. Chapter 10 is the final conclusion.
I probably couldn't understand half of the books mathematics, yet I felt the book was quite insightful in the thoroughness and explanation of its analysis. My biggest amusement was when the author mentions (quite often) that the individual skill difference had a larger effect than any of the other variables. That, of course, was not the goal of the research, but it does stress the first value of the agile manifesto that a technique like TDD (no matter how good) will only be as good as the person doing it... and that is not empirically proven. Other conclusions of the book was that TDD didn't have much significant impact of any of the variables that were measured... except for internal design quality. This is amusing to me as many experienced TDD-ers will keep stressing that TDD is a SW design technique... and this is what the research seems to support.
All in all, I was impressed with the book. From the perspective of an empirical evaluation, I'd probably give it 5 stars. Unfortunately, the main title of the book is "test-driven development" and from the perspective of learning test-driven development, it would get only 1 star. I did all my own mathematical Amazon reviewer magic on 5 and 1 and ended up with a 4 star review, but let me be clear: If you want to learn TDD or improve your TDD techniques... do not buy this book! If you want to learn how to empirically evaluate a SW design technique, this book is one of the best I've read. If you are an experienced TDD-er and are curious about these experiments and TDD research... this book is worth reading too. A though read due to its thoroughness.