Test di regressione
Si tratta di test di regressione .
Immagina il prossimo sviluppatore che osserva il tuo metodo e nota che stai usando numeri magici. Gli è stato detto che i numeri magici sono malvagi, quindi crea due costanti, una per il numero due, l'altra per il numero tre: non c'è nulla di sbagliato nel fare questo cambiamento; non è come se stesse modificando la tua implementazione già corretta.
Essendo distratto, inverte due costanti.
Esegue il commit del codice e tutto sembra funzionare correttamente, perché non ci sono test di regressione in esecuzione dopo ogni commit.
Un giorno (potrebbe essere settimane dopo), qualcosa si rompe altrove. E altrove, voglio dire nella posizione completamente opposta del codice di base, che sembra non avere nulla a che fare con la funzione polynominal
. Le ore di debugging doloroso portano al colpevole. Durante questo periodo, l'applicazione continua a fallire nella produzione, causando molti problemi ai tuoi clienti.
Mantenere i test originali che hai scritto potrebbe prevenire questo tipo di dolore. Lo sviluppatore distratto avrebbe impegnato il codice e quasi immediatamente avrebbe visto che aveva rotto qualcosa; tale codice non raggiungerà nemmeno la produzione. I test unitari saranno inoltre molto precisi sulla posizione dell'errore . Risolvere il problema non sarebbe difficile.
Un effetto collaterale ...
In realtà, la maggior parte del refactoring è strongmente basata sui test di regressione. Fai un piccolo cambiamento. Test. Se passa, va tutto bene.
L'effetto collaterale è che se non hai test, praticamente qualsiasi refactoring diventa un enorme rischio di rompere il codice. Dato che sono molti i casi, è già difficile spiegare alla direzione che il refactoring dovrebbe essere fatto, sarebbe ancora più difficile farlo dopo che i precedenti tentativi di refactoring hanno introdotto più bug.
Avendo una suite completa di test, sei incoraggiante nel rifattorizzare, e quindi in un codice migliore. Senza rischi, diventa molto allettante per il refactoring di più, su base regolare.
Modifiche ai requisiti
Un altro aspetto essenziale è che i requisiti cambiano. Potrebbe essere richiesto per gestire numeri complessi e, improvvisamente, devi cercare il registro di controllo della versione per trovare i test precedenti, ripristinarli e iniziare ad aggiungere nuovi test.
Perché tutto questo fastidio? Perché rimuovere i test per aggiungerli in seguito? Potresti averli tenuti al primo posto.