Qual è il primo riferimento pubblicato alla programmazione test-first?


11

Sto rileggendo Refactoring di Martin Fowler. Nel capitolo 4, Test di costruzione, mi sono imbattuto nel passaggio seguente.

In effetti, uno dei tempi più utili per scrivere i test è prima di iniziare la programmazione. Quando è necessario aggiungere una funzione, iniziare scrivendo il test. Questo non è così arretrato come sembra. Scrivendo il test ti stai chiedendo cosa deve essere fatto per aggiungere la funzione. La scrittura del test si concentra anche sull'interfaccia piuttosto che sull'implementazione (sempre una buona cosa). Significa anche che hai un punto chiaro in cui hai finito la codifica - quando il test funziona.

Mentre ora sono un sostenitore dello sviluppo guidato dai test, non mi ricordavo di essere stato introdotto al concetto quando ho letto questo libro circa 5 anni fa.

Secondo Amazon.com, questo libro è stato originariamente pubblicato l'8 luglio 1999. È questo il primo riferimento pubblicato alla programmazione test-first o c'è qualcosa ancora prima?


Non è soggettivo. È rilevante? Io non la penso così. Se hai un buon motivo per riaprire questa domanda, pubblica su meta.programmers.stackexchange.com
Maniero

@bigown: non sono sicuro di aver capito. Stai dicendo che hai chiuso questa domanda perché non è soggettiva o non è relativa?
Eric Weilnau,

È chiaramente obiettivo.
Maniero,

2
È anche relativo alla programmazione e interessante, e sebbene possa esserci una vera risposta, dimostrarlo non è facile. Dove altro va? ProgrammingHistory.stackexchange?
AShelly,

4
possiamo consentire domande oggettive qui - preferiamo domande soggettive ma proprio come Stack Overflow ha alcune domande SOGGETTIVE che sopravvivono, questo sito può avere alcune domande OBIETTIVE che sopravvivono. (Non mi aspetto di vedere nessuna domanda "come faccio a far funzionare questo codice Perl" qui)
Jeff Atwood,

Risposte:


9

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).


4

Jon Bently dentro Programming Pearls (pubblicato originariamente nel 1986) non menziona specificamente la programmazione Test-First. Ma nel capitolo "Scrivere programmi corretti", descrive la scrittura di un algoritmo definendo prima i presupposti, gli invarianti e le postcondizioni, e nel capitolo successivo descrive un framework di test automatizzato.

Non è del tutto test-first, ma stava sicuramente ponendo alcune delle basi.

Anche,

CIO Magazine, marzo 1993, Bug Busters , di Lucie Juneau, pag 84 :

I casi di test ... possono essere sviluppati anche prima che qualsiasi codice sia stato scritto. Idealmente, questi casi si basano sui requisiti di un'applicazione ... Se gli sviluppatori ricevono test basati sui requisiti prima di iniziare a scrivere codice, progetteranno un prodotto in grado di superare tali test ... "


La seconda edizione è stata pubblicata il 7 ottobre 1999 secondo Amazon.com. La prima edizione è stata pubblicata nel 1986. Questo riferimento era nella prima edizione?
Eric Weilnau,

Ho letto solo la 2a edizione. La prefazione sembra indicare che l'unico capitolo "Scrivere programmi corretti" era nella prima edizione, il capitolo dei test automatici è più recente.
AShelly,

3

Quello era Kent Beck , nel suo libro Extreme Programming , anch'esso pubblicato nel 1999 .

testo alternativo


Secondo Amazon.com, questo libro è stato originariamente pubblicato il 5 ottobre 1999. Questo è quasi 3 mesi dopo la pubblicazione di Refactoring. Ho modificato la mia domanda per includere la data esatta di pubblicazione secondo Amazon.com. Non ho letto il libro di Kent, ma presumo che fornisca molte più informazioni sulla programmazione test-first.
Eric Weilnau,

3
È interessante notare che la quarta di copertina di quel libro dice che Kent Beck "ha aiutato il pioniere ... alla riscoperta della programmazione test-first". Da dove l'ha riscoperto?
AShelly,

Interessante trovare AShelly!

1
@AShelly: Un paio di anni fa Kent Beck ha tenuto un keynote a RailsConf. In esso ha descritto come ha escogitato TDD e menziona di averlo letto in un vecchio articolo degli anni '60.
Jörg W Mittag,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.