Lo sviluppo guidato dai test è simile alla progettazione per contratto, in cui si hanno precondizioni, invarianti e postcondizioni.
Il termine è stato coniato da Bertrand Meyer in relazione al suo design del linguaggio di programmazione Eiffel e descritto per la prima volta in vari articoli a partire dal 1986 [Wikipedia]
I metodi formali risalgono almeno al 1983 e sono stati utilizzati per sistemi critici per la sicurezza come la metropolitana di Parigi senza conducente che utilizza il metodo B:
Nella prima e la versione più astratta, che si chiama Abstract Machine, il designer dovrebbe specificare l'obiettivo del design. [Wikipedia]
Queste potrebbero essere alcune delle cose da cui Kent Beck "ha aiutato il pioniere ... la riscoperta della programmazione test-first".
Più precisamente: a quanto pare il progetto Mercury dei primi anni '60 della Nasa fu il primo progetto software che utilizzava lo sviluppo guidato da test e altre pratiche agili. Non sono riuscito a trovare alcuna documentazione iniziale, ma ecco un rapporto del 2003 che cita la comunicazione dei membri del progetto:
Il progetto Mercury ha funzionato con iterazioni molto brevi (di mezza giornata) che sono state inscatolate nel tempo. Il team di sviluppo ha condotto una revisione tecnica di tutte le modifiche e, cosa interessante, ha applicato la pratica di programmazione estrema di test di sviluppo, pianificazione e scrittura test prima di ogni microincremento.
Anche il resto del rapporto è interessante, continua dicendo:
Il primo riferimento che abbiamo scoperto che si concentrava specificamente sulla descrizione e la raccomandazione dello sviluppo iterativo era un rapporto del 1968 di Brian Randell e FW Zurcher presso l'IBM TJ Watson Research.
Oltre ai test automatizzati, il rapporto del 1968 sostiene la codifica e i test paralleli, se non i test prima:
g. Progettazione dettagliata, codifica e documentazione di ciascun blocco di programma.
h. Progettazione e documentazione dei metodi di prova per ciascun blocco di programma in parallelo con la fase (g).