Ce ne sono alcuni, ma i vantaggi lontano superano gli svantaggi.
C'è una curva di apprendimento ripida.
Molti sviluppatori sembrano aspettarsi che possano essere efficienti con la programmazione prima del test fin dal primo giorno. Sfortunatamente ci vuole un sacco di tempo per acquisire esperienza e programmare alla stessa velocità di prima. Non puoi aggirarlo.
Per essere più specifici, è molto facile sbagliare. Puoi facilmente (con ottime intenzioni) finire a scrivere un sacco di test che sono difficili da mantenere o testare le cose sbagliate. È difficile dare esempi qui - questi tipi di problemi richiedono semplicemente esperienza per risolvere. È necessario avere una buona sensazione di separare le preoccupazioni e progettare per testabilità. Il mio miglior consiglio qui sarebbe di fare la programmazione della coppia con qualcuno che conosce molto bene il TDD.
Fai più codice in anticipo.
Test-first significa che non puoi saltare i test (che è buono) e significa che finirai a scrivere più codice in anticipo. Questo significa più tempo. Di nuovo, non puoi aggirarlo. Sei ricompensato con un codice che è più facile da mantenere, estendere e in genere meno bug, ma ci vuole tempo.
Può essere una vendita difficile per i gestori.
I gestori di software sono generalmente interessati solo dalle scadenze. Se passi alla programmazione di prova e ti stai improvvisamente impiegando 2 settimane per completare una funzione invece di una, a loro non piacerà. Questa è sicuramente una battaglia che vale la pena combattere e molti manager sono abbastanza illuminati per ottenerlo, ma può essere una vendita difficile.
Può essere una dura vendita per gli altri sviluppatori.
Poiché c'è una curva di apprendimento ripida, non tutti gli sviluppatori preferiscono la programmazione prima del test. In effetti, immagino che all'inizio non piaccia agli sviluppatori più . Puoi fare cose come la programmazione delle coppie per aiutarle a diventare più veloci, ma può essere una vendita difficile.
Alla fine, i vantaggi superano gli svantaggi, ma non aiuta se si ignorano gli svantaggi. Sapere con cosa hai a che fare fin dall'inizio ti aiuta a negoziare alcuni, se non tutti, degli svantaggi.