Supponiamo che uno abbia un programma relativamente grande (diciamo 900k SLOC in C #), tutti commentati / documentati accuratamente, ben organizzati e funzionanti bene. L'intera base di codice è stata scritta da un singolo sviluppatore senior che non è più con la società. Tutto il codice è testabile così com'è e IoC è usato in tutto - tranne per qualche strana ragione per cui non hanno scritto nessun test unitario. Ora, la tua azienda vuole diramare il codice e desidera aggiungere test di unità per rilevare quando le modifiche interrompono la funzionalità di base.
- L'aggiunta di test è una buona idea?
- Se sì, come si potrebbe iniziare anche su qualcosa di simile?
Modifica
OK, quindi non mi aspettavo risposte che facessero buoni argomenti per conclusioni opposte. Il problema potrebbe essere comunque fuori dalle mie mani. Ho letto anche le "domande duplicate" e il consenso generale è che "scrivere test è buono" ... sì, ma non troppo utile in questo caso particolare.
Non penso di essere solo qui a contemplare la scrittura di test per un sistema legacy. Ho intenzione di mantenere le metriche su quanto tempo è trascorso e quante volte i nuovi test riscontrano problemi (e quante volte non lo fanno). Tornerò e aggiornerò questo anno circa da oggi con i miei risultati.
Conclusione
Quindi risulta che è praticamente impossibile aggiungere il test unitario al codice esistente con qualsiasi parvenza di ortodossia. Una volta che il codice sta funzionando, ovviamente non è possibile effettuare la luce rossa / verde dei test, di solito non è chiaro quali comportamenti sono importanti da testare, non è chiaro da dove cominciare e sicuramente non è chiaro quando hai finito. Davvero anche chiedendo questa domanda manca il punto principale di scrivere test in primo luogo. Nella maggior parte dei casi ho trovato più facile ri-scrivere il codice usando TDD piuttosto che decifrare le funzioni previste e aggiungere retroattivamente i test unitari. Quando si risolve un problema o si aggiunge una nuova funzionalità, si tratta di una storia diversa, e credo che questo sia il momento di aggiungere test unitari (come indicato in seguito). Alla fine la maggior parte del codice viene riscritta, spesso prima di quanto ti aspetteresti: adottando questo approccio sono stato in grado di aggiungere una copertura di test a una porzione sorprendentemente ampia della base di codice esistente.