Alcune settimane fa ho iniziato il mio primo progetto con TDD. Fino ad ora, ho letto solo un libro al riguardo.Come sviluppare metodi complessi con TDD
La mia preoccupazione principale: come scrivere test per metodi/classi complessi. Ho scritto una classe che calcola una distribuzione binomiale. Quindi, un metodo di questa classe prende n, k e p come input e calcola il resp. probabilità. (In effetti fa un po 'di più, è per questo che ho dovuto scriverlo da solo, ma atteniamo a questa descrizione della classe, per semplicità dell'argomento.)
Quello che ho fatto per testare questo metodo è: copiare alcuni tavoli con diverse n ho trovato nel web nel mio codice, selezionando a caso una voce in questa tabella, alimentato il resp. valori per n, k e p nella mia funzione e ho osservato se il risultato era vicino al valore nella tabella. Lo ripeto un numero di volte per ogni tavolo.
Questo funziona tutto bene ora, ma dopo aver scritto il test, ho dovuto tankare per alcune ore per codificare realmente la funzionalità. Dalla lettura del libro, ho avuto l'impressione di non dover programmare più a lungo di alcuni minuti, finché il test non è di nuovo verde. Cosa ho fatto di sbagliato qui? Naturalmente ho rotto questo compito in molti modi, ma sono tutti privati.
Una domanda correlata: era una cattiva idea scegliere numeri casuali dal tavolo? In caso di errore, visualizzerò il seme casuale utilizzato da questa esecuzione, in modo che possa riprodurre il bug.
"Ho avuto l'impressione di non dover programmare più di qualche minuto, finché il test non è di nuovo verde." Dove - in particolare - hai avuto questa impressione? Si prega di fornire la citazione o riferimento. Questo è raramente vero, e sono curioso di sapere dove hai letto/visto/sentito. –
Era in un libro tedesco, "Testegetriebene Entwicklung mit JUnit & FIT", di Frank Westphal, prima edizione. Per esempio. a pagina 13, le prime due frasi. – matthias
E visto che molto probabilmente non hai accesso al libro, provo una traduzione: "L'interplay tra lo sviluppo basato su test e la progettazione semplice, genera un ciclo di codifica minuzioso, infatti non si codifica più a lungo di solo pochi minuti, senza chiudere il ciclo di feedback per mezzo di test. " (Bene, mi sto avvicinando ai limiti del mio inglese qui, spero che questa traduzione sia corretta.) – matthias