La mia esperienza con la transizione
Per molti anni ho avuto il malinteso di non avere abbastanza tempo per scrivere test unitari per il mio codice. Quando scrivevo i test, erano cose gonfie e pesanti che mi incoraggiavano solo a pensare che avrei dovuto scrivere test unitari solo quando sapevo che erano necessari.
Di recente sono stato incoraggiato a utilizzare Test Driven Development e l'ho trovato una rivelazione completa. Ora sono fermamente convinto di non avere il tempo di non scrivere unit test .
Nella mia esperienza, sviluppando pensando ai test, si ottengono interfacce più pulite, classi e moduli più mirati e in genere più codice SOLID , testabile.
Ogni volta che lavoro con un codice legacy che non ha test unitari e devo testare manualmente qualcosa, continuo a pensare "questo sarebbe molto più veloce se questo codice avesse già dei test unitari". Ogni volta che devo provare ad aggiungere funzionalità di unit test al codice con elevato accoppiamento, continuo a pensare "sarebbe molto più facile se fosse stato scritto in modo disaccoppiato".
Confronto e contrasto delle due stazioni sperimentali che io sostengo. Uno è in circolazione da un po 'e ha una grande quantità di codice legacy, mentre l'altro è relativamente nuovo.
Quando si aggiunge funzionalità al vecchio laboratorio, spesso si tratta di scendere in laboratorio e passare molte ore a lavorare sulle implicazioni della funzionalità di cui hanno bisogno e su come posso aggiungere quella funzionalità senza influire su nessuna delle altre funzionalità. Il codice semplicemente non è impostato per consentire i test off-line, quindi praticamente tutto deve essere sviluppato on-line. Se provassi a sviluppare off-line, finirei con più oggetti finti di quanto sarebbe ragionevole.
Nel laboratorio più recente, di solito posso aggiungere funzionalità sviluppandola off-line sulla mia scrivania, prendendo in giro solo le cose che sono immediatamente necessarie e quindi trascorrendo solo un breve periodo in laboratorio, risolvendo eventuali problemi rimanenti non risolti -linea.
Il mio consiglio
Sembra che tu abbia iniziato bene, ogni volta che farai grandi cambiamenti al tuo flusso di lavoro di sviluppo, devi assicurarti che tutti siano coinvolti nel prendere quella decisione, e idealmente che la maggior parte delle persone ci abbia accettato. Dalla tua domanda, sembra che tu abbia capito bene. Se le persone non hanno l'entusiasmo per l'idea, è condannato a fallire o generare cattiva volontà.
A meno che non sia possibile presentare un caso aziendale convincente, non consiglierei un'implementazione approfondita di test unitari e specifiche per l'intero sistema. Come accennato in precedenza, se un sistema non è progettato pensando ai test, può essere molto difficile scrivere test automatici per questo.
Invece, consiglierei di iniziare in piccolo e di usare la regola del boy scout :
Lascia sempre il campeggio più pulito di quello che hai trovato.
Se mentre stai implementando qualcosa su questa base di codice, puoi identificare i test specifici richiesti per testare il comportamento esistente e passare dal vecchio comportamento al nuovo, allora hai entrambi documentato la modifica delle specifiche e hai iniziato a implementare i test delle unità per il tuo sistema.
I moduli che non tocchi non ottengono i test unitari, ma se non li tocchi, probabilmente è perché sono già stati accuratamente testati in uso e non necessitano di modifiche o non vengono mai utilizzati.
Quello che vuoi evitare è sprecare un sacco di sforzi degli sviluppatori per scrivere test che non saranno mai necessari ( YAGNI funziona altrettanto bene per il codice di test come per il codice di produzione * 8 '), non verrà mai più usato e demoralizzerà le persone in pensando che i test siano inutili dopo tutto.
Sommario
Inizia in piccolo, costruisci la fiducia nei test in modo incrementale e guadagna valore dallo sviluppo dei test quando e dove avvantaggiano maggiormente il tuo team.