Non vi è stato alcun processo di sviluppo guidato dai test durante lo sviluppo a causa di scadenze molto strette
Questa affermazione è molto preoccupante. Non perché significa che hai sviluppato senza TDD o perché non stai testando tutto. Questo è preoccupante, perché dimostra che TDD ti rallenterà e ti farà perdere una scadenza.
Finché lo vedi in questo modo non sei pronto per il TDD. TDD non è qualcosa in cui puoi gradualmente addentrarti. O sai come farlo oppure no. Se provi a farlo a metà strada, lo farai e sembrerai brutto.
TDD è qualcosa che dovresti prima praticare a casa. Impara a farlo, perché ti aiuta a programmare ora . Non perché qualcuno ti abbia detto di farlo. Non perché sarà di aiuto quando si apportano modifiche in un secondo momento. Quando diventa qualcosa che fai perché sei di fretta, allora sei pronto a farlo professionalmente.
TDD è qualcosa che puoi fare in qualsiasi negozio. Non è nemmeno necessario inserire il codice di prova. Puoi tenerlo per te se gli altri disprezzano i test. Quando lo fai bene, i test accelerano il tuo sviluppo anche se nessun altro li esegue.
D'altra parte, se gli altri adorano ed eseguono i test, è necessario tenere presente che anche in un negozio TDD non è il tuo compito controllare i test. Serve per creare un codice di produzione funzionante collaudato. Se sembra essere testabile, pulito.
Se pensi che il management debba credere in TDD o che i tuoi colleghi programmatori debbano supportare i tuoi test, allora stai ignorando la cosa migliore che TDD fa per te. Ti mostra rapidamente la differenza tra ciò che pensi che faccia il tuo codice e ciò che effettivamente fa.
Se non riesci a vedere come questo, da solo, può aiutarti a rispettare una scadenza più velocemente, allora non sei pronto per TDD al lavoro. Devi esercitarti a casa.
Detto questo, è bello quando il team può utilizzare i test per aiutarli a leggere il codice di produzione e quando la direzione acquisterà nuovi strumenti TDD.
È una buona idea scrivere tutti i possibili casi di test dopo aver trasformato il team in TDD?
Indipendentemente da ciò che il team sta facendo, non è sempre una buona idea scrivere tutti i possibili casi di test. Scrivi i casi di test più utili. La copertura del codice al 100% ha un costo. Non ignorare la legge dei rendimenti decrescenti solo perché è difficile fare una sentenza.
Risparmia la tua energia di test per la logica di business interessante. Il materiale che prende le decisioni e applica la politica. Metti alla prova questo. Il noioso codice di colla strutturale di facile lettura che collega semplicemente le cose insieme non ha bisogno di essere testato altrettanto male.
(1) È ancora ok o buona idea fermare la maggior parte dello sviluppo e iniziare a scrivere interi casi di test dall'inizio, anche se tutto funziona perfettamente OK (ancora!)? O
No. Questo è il pensiero "facciamo una riscrittura completa". Questo distrugge la conoscenza conquistata duramente. Non chiedere alla direzione il tempo di scrivere i test. Scrivi i test. Una volta che sai cosa stai facendo, i test non ti rallenteranno.
(2) è meglio aspettare che accada qualcosa di brutto e poi durante la correzione scrivere nuovi test unitari, oppure
(3) dimentica persino i codici precedenti e scrivi solo i test unitari per i nuovi codici e rimanda tutto al prossimo refactor principale.
Risponderò 2 e 3 allo stesso modo. Quando modifichi il codice, per qualsiasi motivo, è davvero bello se riesci a scivolare in un test. Se il codice è legacy, al momento non è gradito un test. Ciò significa che è difficile testarlo prima di cambiarlo. Bene, dal momento che lo stai cambiando comunque puoi cambiarlo in qualcosa di testabile e testarlo.
Questa è l'opzione nucleare. È rischioso. Stai apportando modifiche senza test. Ci sono alcuni trucchi creativi per mettere alla prova il codice legacy prima di modificarlo. Cerchi le cosiddette cuciture che ti consentono di cambiare il comportamento del tuo codice senza cambiare il codice. Si modificano i file di configurazione, si creano file, qualunque cosa serva.
Michael Feathers ci ha dato un libro su questo: lavorare in modo efficace con il codice legacy . Dagli una lettura e vedrai che non devi bruciare tutto ciò che è vecchio per creare qualcosa di nuovo.