Supponiamo che uno avesse un programma relativamente grande (diciamo 900k SLOC in C #), tutti commentati / documentati a fondo, ben organizzati e funzionanti. L'intera base di codice è stata scritta da un singolo sviluppatore senior che non è più con l'azienda. Tutto il codice è testabile così com'è e IoC è usato dappertutto - tranne per qualche strana ragione per cui non hanno scritto alcun test unitario. Ora, la tua azienda desidera ramificare il codice e desidera che vengano aggiunti test unitari per rilevare quando le modifiche interrompono la funzionalità principale.
- Aggiungere test è una buona idea?
- Se è così, come si potrebbe iniziare su qualcosa del genere?
MODIFICARE
OK, quindi non mi aspettavo risposte che facessero buoni argomenti per conclusioni opposte. Il problema potrebbe essere fuori dalle mie mani comunque. Ho letto anche le "domande duplicate" e il consenso generale è che "scrivere i test è buono" ... sì, ma non troppo utile in questo caso particolare.
Non credo di essere solo qui a contemplare la scrittura di test per un sistema legacy. Terrò le metriche su quanto tempo è trascorso e quante volte i nuovi test rilevano problemi (e quante volte non lo fanno). Tornerò e lo aggiornerò tra circa un anno con i miei risultati.
CONCLUSIONE
Quindi risulta sostanzialmente impossibile aggiungere un unit test al codice esistente con una parvenza di ortodossia. Una volta che il codice funziona, ovviamente, non è possibile eseguire il red-light / green-light dei test, di solito non è chiaro quali comportamenti sono importanti da testare, non è chiaro da dove iniziare e certamente non è chiaro quando si è terminati. In realtà anche porre questa domanda manca in primo luogo al punto principale di scrivere test. Nella maggior parte dei casi ho trovato in realtà più semplice riscrivere 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à, è una storia diversa e credo che sia il momento di aggiungere test unitari (come alcuni hanno sottolineato di seguito). Alla fine la maggior parte del codice viene riscritta, spesso prima del previsto - adottando questo approccio