2

I have seen people point me to many different "origins" of TDD. Some will point me to Kent Beck's rediscovery in the late 1990s with XP. Others will mention the 1960s best practice of annotating the results on the sides of the punch cards to check things faster and more accurately. And, still, some will point me to various books on software reliability dating from the 1960s to the 1990s.

But is there a seminal paper or book with a formalization of the process dating from before Kent Beck's XP Explained book? Could someone who has thoroughly studied the topic create a timeline?

8
  • 7
    I would argue that "formalized" TDD is Kent Beck's invention. But the idea of creating a test or a hypothesis before creating a product is as old as engineering itself. – Euphoric Feb 6 '20 at 14:54
  • 2
    @Euphoric ... as old as science itself also. In TDD, there is also the nuance that the tests are validation of specification, which sounds to me a bit more specific and more systematized than the general hypothesis-experimentation procedure. But maybe it isn't? – Philippe Fanaro Feb 6 '20 at 15:33
  • 1
    Did you look a the Wikipedia article? It refers to this quora question, which contains further pointers. Moreover, it should not be too hard to contact Kent Beck through his Facebook or LinkedIn account. – Doc Brown Feb 6 '20 at 16:07
  • 2
    Can somebody explain to me how history of the craft is not related to the craft itself? Knowing about its origins will let us have a more comprehensive view of the topic and its motivations. – Philippe Fanaro Feb 6 '20 at 19:51
  • 1
    @PhilippeFanaro It seems to me your question was closed because it seems to be asking about a book/paper/reference, which is off-topic here. However, I think what you're really asking is the origin of TDD, whether it was Kent Beck's invention or not, and you're not actually looking for a paper. Therefore I'm voting to reopen. – Andres F. Feb 6 '20 at 20:02
3

The term of test driven development is borrowed from XP which leads us directly to Kent Beck. Browsing through specialised literature shows that the terms of TDD, test driven design, test first programming and similar terms only emerge after Beck's book.

TDD is very different from annotations on a punch card or software reliability and quality practices dating back to before the 1990s. Software quality pioneers argued already a long time ago for early and systematic tests. But these quality oriented approaches are at best parallel to the development. They are conducted to prevent bugs, verify and validate software. In "The growth of software testing", D. Gelperin, & B. Hetzel explain in 1988, based on a very broad analysis of existing methods:

The life cycle models move the focus of testing from the end of a project to its beginning. This shift results in the view that testing is not a sequential phase affecting just the software implementation, but is on a parallel track affecting software requirements and designs as well. Testing is seen as strongly interacting with development activities from the very beginning of a project.

This does not mean that test can not contribute to the improvement of the software design, as IBM's "Guide to Testing in a Complex System Environment" points out in 1974:

The test planning must begin early in the develop- ment cycle (...). Testers look at the specifications from an entirely different point of view than do the developers. As such, they can frequently spot flaws in the logic of the design, or the incompleteness of the specification. In doing this, they help the developers to produce a superior product, and accelerate the actual program development.”

But interacting with design and implementation and spotting flaws is not driving the development. So we were still far from TDD. In TDD the writing of the test contributes to the design.

Nevertheless Beck was not the only one with this idea in mind. In 1992 for example, a paper about "Object Oriented Simulation of the CSMA protocol" by H.Saiedian suggest that tests should precede the design and bulding of complex systems. The author did not invent TDD, since his article is about simulation of telecom systems. But the emergence of TDD principles are clearly on page 5:

(...) This feature of object-orientation allows one to consider experimenting with a simple implementation consisting of important objects as well as objects that serve as "stub" or "driver" (or in general,"placeholder") which can aid in the definition, formulation, and testing of object interfaces and interactions; subsequent modifications can be made to the model to develop a more detailed implementation of some or all of the objects on a controlled, gradual basis.

IMHO, I think that the emergence of object orientation, and iterative development approaches, stimulated this kind of thinking. It is not excluded that other teams used TDD like approach without ever having published it. So Zeitgeist or not, Beck is still the first who made a mature concept out of it.

2
  • 1
    Very nice answer, and complementary to the discussion in the comments of the question. I still think it's worth mentioning the Quora discussion featuring Kent Beck himself, mentioned by @DocBrown. The more I investigate the topic the more I believe that Kent Beck took the scientific method and his colleagues' insights to a whole other systematic level. – Philippe Fanaro Feb 9 '20 at 19:08
  • Uncle Bob mentions that the programmers on the Mercury space capsule (1958-1963) wrote unit tests in the morning and made them pass in the afternoon. That's an interesting historical golden nugget for this discussion. (I haven't checked it.) – Philippe Fanaro Apr 22 '20 at 1:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.