Ce ne sono parecchi, ma i vantaggi superano di gran lunga gli svantaggi.
C'è una ripida curva di apprendimento.
Molti sviluppatori sembrano aspettarsi di poter essere efficienti con la programmazione test-first fin dal primo giorno. Purtroppo ci vuole molto tempo per acquisire esperienza e programmare alla stessa velocità di prima. Non puoi aggirarlo.
Per essere più specifici, è molto facile sbagliarsi. Puoi facilmente (con ottime intenzioni) finire per scrivere un sacco di test che sono difficili da mantenere o testare cose sbagliate. È difficile fornire esempi qui: questo tipo di problemi richiede semplicemente esperienza per risolverli. Devi avere una buona idea di separare le preoccupazioni e progettare per la testabilità. Il mio miglior consiglio qui sarebbe di programmare la coppia con qualcuno che conosca davvero bene TDD.
Fai più codice all'inizio.
Test-first significa che non puoi saltare i test (il che è buono) e significa che finirai per scrivere più codice in anticipo. Questo significa più tempo. Ancora una volta, non puoi aggirarlo. Vieni premiato con un codice che è più facile da mantenere, estendere e generalmente meno bug, ma richiede tempo.
Può essere una vendita difficile per i manager.
I gestori di software si occupano generalmente solo delle scadenze. Se passi alla programmazione test-first e all'improvviso stai impiegando 2 settimane per completare una funzione anziché una, non piacerà. Questa è sicuramente una battaglia che vale la pena combattere e molti manager sono abbastanza illuminati da ottenerla, ma può essere una vendita difficile.
Può essere una vendita difficile per i colleghi sviluppatori.
Dal momento che c'è una ripida curva di apprendimento, non tutti gli sviluppatori amano la programmazione test-first. In effetti, immagino che all'inizio alla maggior parte degli sviluppatori non piaccia. Puoi fare cose come la programmazione in coppia per aiutarli ad accelerare, ma può essere una vendita difficile.
Alla fine, i vantaggi superano gli svantaggi, ma non aiuta se si ignorano solo gli svantaggi. Sapere con cosa hai a che fare fin dall'inizio ti aiuta a negoziare alcuni, se non tutti, gli svantaggi.