Was ist der erste veröffentlichte Verweis auf Test-First-Programmierung?

11

Ich lese Refactoring von Martin Fowler noch einmal. In Kapitel 4, Gebäudetests, bin ich auf die folgende Passage gestoßen.

Tatsächlich ist es am nützlichsten, Tests zu schreiben, bevor Sie mit dem Programmieren beginnen. Wenn Sie eine Funktion hinzufügen müssen, schreiben Sie zunächst den Test. Das ist nicht so rückwärts, wie es sich anhört. Wenn Sie den Test schreiben, fragen Sie sich, was zu tun ist, um die Funktion hinzuzufügen. Das Schreiben des Tests konzentriert sich auch auf die Schnittstelle und nicht auf die Implementierung (immer eine gute Sache). Dies bedeutet auch, dass Sie einen klaren Punkt haben, an dem Sie mit dem Codieren fertig sind - wenn der Test funktioniert.

Obwohl ich jetzt ein Verfechter der testgetriebenen Entwicklung bin, konnte ich mich nicht erinnern, dass ich in das Konzept eingeführt worden war, als ich dieses Buch vor fast 5 Jahren ursprünglich gelesen hatte.

Laut Amazon.com wurde dieses Buch ursprünglich am 8. Juli 1999 veröffentlicht. Ist dies der erste veröffentlichte Verweis auf Test-First-Programmierung oder gibt es etwas noch früher?

Eric Weilnau
quelle
Es ist nicht subjektiv. Ist es relevant? Das glaube ich nicht. Wenn Sie ein gutes Motiv, um diese Frage wieder öffnen, eine Anzeige auf meta.programmers.stackexchange.com
Maniero
@ Bigown: Ich bin nicht sicher, ob ich verstehe. Wollen Sie damit sagen, dass Sie diese Frage geschlossen haben, weil sie nicht subjektiv oder nicht relativ ist?
Eric Weilnau
Es ist eindeutig objektiv.
Maniero
2
Es ist auch programmierbezogen und interessant, und obwohl es eine wahre Antwort gibt, ist es nicht einfach zu beweisen, dass es nicht einfach ist. Wohin geht es sonst? ProgrammingHistory.stackexchange?
AShelly
4
Wir können hier objektive Fragen zulassen - wir bevorzugen subjektive Fragen, aber genau wie Stack Overflow einige SUBJEKTIVE Fragen hat, die überleben, kann diese Site einige OBJEKTIVE Fragen haben, die überleben. (Ich würde jedoch nicht erwarten, hier Fragen zu sehen, wie ich diesen Perl-Code zum Laufen bringen kann)
Jeff Atwood

Antworten:

9

Testgetriebene Entwicklung ähnelt Design by Contract, bei dem Sie Vorbedingungen, Invarianten und Nachbedingungen haben.

Der Begriff wurde von Bertrand Meyer im Zusammenhang mit seinem Entwurf der Programmiersprache Eiffel geprägt und erstmals ab 1986 in verschiedenen Artikeln beschrieben [Wikipedia]

Formale Methoden stammen aus mindestens 1983 und wurden für sicherheitskritische Systeme wie die fahrerlose Pariser U-Bahn nach der B-Methode verwendet:

In der ersten und abstraktesten Version, die als abstrakte Maschine bezeichnet wird, sollte der Designer das Ziel des Entwurfs angeben. [Wikipedia]

Dies könnten einige der Dinge sein, von denen Kent Beck "Pionierarbeit geleistet hat ... die Wiederentdeckung der Test-First-Programmierung".

Mehr auf den Punkt gebracht: Anscheinend war Nasas Projekt Mercury aus den frühen 1960er Jahren das erste Softwareprojekt, das testgetriebene Entwicklung und andere agile Praktiken verwendete. Ich konnte keine frühe Dokumentation finden, aber hier ist ein Bericht aus dem Jahr 2003 , in dem die Kommunikation der Projektmitglieder zitiert wird:

Das Projekt Mercury lief mit sehr kurzen (halbtägigen) Iterationen, die zeitlich begrenzt waren. Das Entwicklungsteam führte eine technische Überprüfung aller Änderungen durch und wandte interessanterweise die Extreme Programming-Praxis der Test-First-Entwicklung, Planung und des Schreibens von Tests vor jedem Mikroinkrement an.

Der Rest des Berichts ist ebenfalls interessant, heißt es weiter:

Die früheste Referenz, die sich speziell auf die Beschreibung und Empfehlung der iterativen Entwicklung konzentrierte, war ein Bericht von Brian Randell und FW Zurcher aus dem Jahr 1968 von IBM TJ Watson Research.

Zusätzlich zu den automatisierten Tests befürwortet der Bericht von 1968 die parallele Codierung und das Testen, wenn nicht das erste Testen:

G. Detailentwurf, Codierung und Dokumentation jedes Programmblocks.
h. Entwurf und Dokumentation von Testmethoden für jeden Programmblock parallel zu Schritt (g).

Hugo
quelle
4

Jon Bently in Programming Pearls (ursprünglich 1986 veröffentlicht) erwähnt die Test-First-Programmierung nicht ausdrücklich. Im Kapitel "Schreiben korrekter Programme" beschreibt er das Schreiben eines Algorithmus, indem er zuerst die Vorbedingungen, Invarianten und Nachbedingungen definiert, und im nächsten Kapitel beschreibt er ein automatisiertes Testframework.

Es ist nicht ganz der erste Test, aber er hat definitiv einige Grundlagen geschaffen.

Ebenfalls,

CIO Magazine, März 1993, Bug Busters , von Lucie Juneau, S. 84 :

Testfälle ... können entwickelt werden, noch bevor Code geschrieben wurde. Im Idealfall basieren diese Fälle auf den Anforderungen einer Anwendung ... Wenn Entwickler vor dem Schreiben von Code anforderungsbasierte Tests erhalten, entwerfen sie ein Produkt, das diese Tests bestehen kann ... "

AShelly
quelle
Die 2. Ausgabe wurde am 7. Oktober 1999 laut Amazon.com veröffentlicht. Die 1. Ausgabe wurde irgendwann im Jahr 1986 veröffentlicht. War diese Referenz in der 1. Ausgabe?
Eric Weilnau
Ich habe nur die 2. Auflage gelesen. Das Vorwort scheint darauf hinzudeuten, dass das einzige Kapitel "Richtige Programme schreiben" in der 1. Ausgabe enthalten war, das Kapitel über automatisierte Tests ist neuer.
AShelly
3

Das war Kent Beck in seinem Buch Extreme Programming , das ebenfalls 1999 veröffentlicht wurde .

Alt-Text


quelle
Laut Amazon.com wurde dieses Buch ursprünglich am 5. Oktober 1999 veröffentlicht. Dies ist fast 3 Monate nach der Veröffentlichung von Refactoring. Ich habe meine Frage so bearbeitet, dass sie das genaue Veröffentlichungsdatum gemäß Amazon.com enthält. Ich habe Kents Buch nicht gelesen, gehe aber davon aus, dass es weitaus mehr Informationen zur Test-First-Programmierung enthält.
Eric Weilnau
3
Es ist interessant, dass auf der Rückseite dieses Buches steht, dass Kent Beck "Pionierarbeit geleistet hat ... die Wiederentdeckung der Test-First-Programmierung". Woher hat er es wiederentdeckt?
AShelly
Interessante Suche nach AShelly!
1
@AShelly: Vor ein paar Jahren hielt Kent Beck eine Keynote bei RailsConf. Darin beschrieb er, wie er auf TDD gekommen war und er erwähnte, dass er darüber in einem alten Artikel aus den 60ern gelesen hatte.
Jörg W Mittag