Back in April, Ruby on Rails creator David Heinemeier Hansson caused a stir when he asserted in a RailsConf keynote that Test Driven Development (TDD) was an unrealistic and ineffective fad that had seen its day. Test-first development was a good set of training wheels for learning how to think about testing, he wrote, but in the long run, as the "test-first rhetoric got louder and angrier," Hansson had found himself pulling away. Finally, he hit his breaking point with the fundamentalist dogma of TDD:
Enough. No more. My name is David, and I do not write software test-first. I refuse to apologize for that any more, much less hide it. I'm grateful for what TDD did to open my eyes to automated regression testing, but I've long since moved on from the design dogma.
Rather than focusing on rapid design and unit testing -- "where all dependencies are mocked out, and thousands of tests can close in seconds" -- Hansson called for a return to whole system testing, leveraging modern advances in parallelization and cloud runner infrastructure.
Hansson's position caught the attention of TDD creator Kent Beck, whose sideways defense of TDD -- lamenting the demise of the technique that had protected his programs from his own tendency to error, let him document his code while he worked, and facilitated explicit agreement between programmers working on joint projects -- is captured in a Facebook post as well as in the eventual #isTDDDead hangout and live conversation series between Beck, Hansson, and Martin Fowler. Fowler, who mainly refereed, later summarized the high points of Hansson and Beck's discussion on his own blog.
All in all a discussion both entertaining and worthwhile -- and one that probably isn't going away. Uncle Bob (Robert C. Martin), following along from the sidelines, noted the historic tendency for software developers to factionalize over programming techniques. Still, if "TDD were a dead topic, the brouhaha that we've all watched would not have happened," he wrote.