There was no test-driven development process during the development due to very tight deadlines
Questa affermazione è molto preoccupante. Non perché significa che hai sviluppato senza TDD o perché non stai testando tutto. Questo è preoccupante, perché ti fa pensare che TDD ti rallenti e ti faccia perdere una scadenza.
Finché la vedi in questo modo non sei pronto per TDD. Il TDD non è qualcosa a cui puoi gradualmente adattarti. O sai come farlo o non lo fai. Se provi a farlo a metà strada, ce la farai e te ne starai male.
Il TDD è qualcosa che dovresti prima praticare a casa. Impara a farlo, perché aiuta tu codice ora . Non perché qualcuno ti ha detto di farlo. Non perché ti aiuterà quando cambierai più tardi. Quando diventa qualcosa che fai perché sei di fretta, allora sei pronto per farlo professionalmente.
TDD è qualcosa che puoi fare in qualsiasi negozio. Non è nemmeno necessario convertire il codice di test. Puoi tenerlo per te se gli altri disdegnano i test. Quando lo fai bene, i test velocizzano il tuo sviluppo anche se nessun altro li esegue.
D'altra parte, se gli altri amano e eseguono i test, dovresti tenere a mente che, anche in un negozio TDD, non è compito tuo verificare i test. Significa creare un codice di produzione funzionante. Se capita di essere testabile, pulito.
Se pensi che il management debba credere nel 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ù veloce, allora non sei pronto per il TDD al lavoro. Hai bisogno di 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 spigolosi.
Is it a good idea to write all possible test cases after transforming the team to TDD?
Indipendentemente da ciò che sta facendo il team, 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é fare una sentenza è difficile.
Salva la tua energia di test per l'interessante logica di business. La roba che prende le decisioni e applica la politica. Metti alla prova questo. Un codice di colla strutturale ovvio e di facile lettura che collega solo i materiali non ha bisogno di test quasi altrettanto male.
(1) Is it still okay or good idea to stop most of the development and start writing whole possible test cases from the beginning, even though everything is working completely OKAY (yet!)? Or
No. Questo è "facciamo una riscrittura completa" pensando. Questo distrugge la conoscenza vincente. Non chiedere alla direzione per tempo di scrivere test. Basta scrivere test. Una volta che sai cosa stai facendo, i test non ti rallenteranno.
(2) it's better to wait for something bad happen and then during the fix write new unit tests, or
(3) even forget about previous codes and just write unit tests for the new codes only and postpone everything to the next major refactor.
Risponderò alle domande 2 e 3 allo stesso modo. Quando cambi il codice, per qualsiasi motivo, è davvero bello se riesci a inserire un test. Se il codice è legacy, attualmente non accetta un test. Il che significa che è difficile testarlo prima di cambiarlo. Bene, dal momento che lo stai modificando in ogni caso puoi cambiarlo in qualcosa di verificabile e testarlo.
Questa è l'opzione nucleare. È rischioso Stai apportando modifiche senza test. Ci sono alcuni trucchi creativi per mettere il codice legacy sotto test prima di cambiarlo. Si cercano quelle che vengono chiamate cuciture che consentono di modificare il comportamento del codice senza modificare il codice. Puoi cambiare i file di configurazione, creare file, qualunque cosa sia necessaria.
Michael Feathers ci ha dato un libro a riguardo: Lavorare efficacemente con il codice legacy . Dagli una lettura e vedrai che non devi masterizzare tutto ciò che è vecchio per creare qualcosa di nuovo.