History of TDD

The following are some of the key events in the history of Test-Driven Development.

  • 1999, Oct 5: Extreme Programming Explained by Kent Beck is published. One of the principles it advocates is “test-first development.”
  • 2000, June 21-23: Tim Mackinnon, Steve Freeman, and Philip Craig present “Endo-Testing: Unit Testing with Mock Objects” at the XP 2000 conference, introducing the concept of mock objects for testing behavior of objects in isolation. It describes the use of mocks in both test-first and test-after development, and references “test-driven programming” and driving the development of code.
  • 2002, Nov 18: Kent Beck’s Test-Driven Development by Example is published, becoming the authoritative statement on the original form of TDD, later known as classical TDD.
  • 2003: Dan North begins work on the JBehave library for behavior specification.
  • 2004, Oct 24-28: Steve Freeman, Nat Pryce, Tim Mackinnon, and Joe Walnes present “Mock Roles, not Objects” at OOPSLA 2004. It further refines the concept of mock objects.
  • 2005, July 5: Dave Astels publishes the blog post “A New Look at Test-Driven Development”. It proposes focusing on specifying behavior rather than testing, referring to this as Behavior-Driven Development (BDD). His 2014 introduction to the post states that it’s where the RSpec project originated.
  • 2006, March: Dan North publishes the blog post “Introducing BDD”. In addition to focusing on specifying behavior, it also mentions describing acceptance tests in terms of behavior, using the given/when/then formulation. It references both the JBehave and RSpec projects as already in progress.
  • 2007, May 18: RSpec is released, inspiring a new family of BDD frameworks as an alternative to “xUnit” style unit testing frameworks.
  • 2009: Steve Freeman and Nat Pryce’s Growing Object-Oriented Software Guided by Tests is published. Growing out of the Mockist TDD tradition and becoming the definitive statement of it, it also includes references to testing behavior rather than API features.

More detail on the C2 wiki.