La mia esperienza con la transizione
Per molti anni ho capito male che non avevo abbastanza tempo per scrivere test unitari per il mio codice. Quando ho fatto dei test, erano cose gonfie e pesanti che mi hanno solo incoraggiato a pensare che avrei dovuto scrivere solo unit test quando sapevo che erano necessari.
Recentemente sono stato incoraggiato a utilizzare Test Driven Development e ho scoperto che si trattava di una rivelazione completa. Ora sono fermamente convinto di non avere il tempo non per scrivere test unitari.
Nella mia esperienza, sviluppando con i test in mente si finiscono con interfacce più pulite, classi più focalizzate e amp; moduli e generalmente più SOLID , codice verificabile.
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 un accoppiamento elevato, continuo a pensare che "sarebbe molto più semplice se fosse stato scritto in modo disaccoppiato".
Confronto e contrasto tra le due stazioni sperimentali che supporto. Uno è stato in giro per un po 'e ha una grande quantità di codice legacy, mentre l'altro è relativamente nuovo.
Quando si aggiungono funzionalità al vecchio laboratorio, spesso si arriva al laboratorio e si impiegano 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 il test off-line, quindi praticamente tutto deve essere sviluppato on-line. Se provassi a sviluppare offline, avrei finito con più oggetti fittizi di quanto sarebbe ragionevole.
Nel laboratorio più recente, di solito posso aggiungere funzionalità sviluppandolo off-line sulla mia scrivania, prendendo in giro solo le cose che sono immediatamente necessarie, e quindi impiegando solo un breve periodo di tempo in laboratorio, stirare eventuali problemi rimanenti, non raccolto fuori linea.
Il mio consiglio
Sembra che tu abbia iniziato bene, ogni volta che farai grandi cambiamenti nel tuo flusso di lavoro di sviluppo, devi assicurarti che tutti sia coinvolto nel prendere questa decisione, e idealmente che la maggior parte persone ci hanno comprato. Dalla tua domanda, sembra che tu abbia ragione. Se la gente non ha entusiasmo per l'idea, è destinata a fallire oa generare cattiva volontà.
A meno che tu non possa presentare un caso aziendale interessante, vorrei non consigliare un'implementazione di base dei test e delle specifiche dell'unità per l'intero sistema. Come ho detto sopra, se un sistema non è progettato con test in mente, può essere molto difficile scrivere test automatici per questo.
Invece, consiglierei di iniziare in piccolo e di utilizzare la regola del boy scout :
Always leave the campground cleaner than you found it.
Se mentre stai implementando qualcosa su questo codebase, puoi identificare i test specifici richiesti per testare il comportamento esistente e la transizione dal vecchio comportamento al nuovo, quindi hai documentato entrambi la modifica delle specifiche e hai iniziato a implementare unit test per il tuo sistema.
I moduli che non tocchi non ottengono i test unitari, ma se non li stai toccando, probabilmente è perché sono già stati testati in modo approfondito e non hanno bisogno di modifiche o non vengono mai utilizzati.
Quello che vuoi evitare è sprecare un intero carico di sforzi per lo sviluppatore scrivendo test che non saranno mai necessari ( YAGNI funziona altrettanto bene per il codice di prova come per il codice di produzione * 8 '), non verrà mai più utilizzato e demoralizzerà le persone pensando che i test siano inutili dopotutto.
Sommario
Inizia in piccolo, aumenta la fiducia nei test in modo incrementale e ottieni valore commerciale dallo sviluppo di test quando e dove sono più utili per il tuo team.