La tua prima priorità è far funzionare gli strumenti. Scegli un framework di test che funzioni per la tua combinazione di lingua, piattaforma e IDE. Preferibilmente un framework di test che supporta report di copertura e integrazione continua (o trova un modo per integrarlo).
Sebbene sia possibile eseguire test eseguiti da strumenti personalizzati, la creazione di tale strumento non è il tuo progetto attuale. Quindi, non farlo, ottieni qualcosa che esiste già.
Chiunque sia responsabile per il codice dovrebbe scrivere e revisionare il test o delegare queste attività. Non è una buona idea avere altri test di scrittura per gli sviluppatori, altri riesaminare i test potrebbero o non funzionare.
Quali test scrivere?
Considerando che stiamo parlando di introdurre test su un progetto esistente, non inizierai con test di unità reali. Il motivo è che non siamo sicuri che il codice sia in buone condizioni per farlo. Non sappiamo ancora quanto sarà facile isolare o prendere in giro i componenti. Il codice potrebbe non disporre di interfacce o di dipendenze per facilitare il test.
Inizia scrivendo i test per i tuoi requisiti o documentazione. Cioè, se la documentazione o i requisiti dicono che quando fai X allora si verifica Y, fai un test di questo. Fai lo stesso con i contratti. Se possibile, converti questi contratti in test (non sempre possibile).
Qualsiasi difetto trovato dovrebbe tradursi in nuovi test. Se hai i mezzi per usare i test per replicare un bug, fallo. Questi saranno i tuoi test di regressione, il cui scopo è quello di fare in modo che durante le modifiche non infrangono ciò che è già stato risolto.
Una volta che hai finito con la documentazione / i requisiti, spostati per aumentare la copertura del test. L'idea è di assicurarsi che ogni strana situazione sia testata e di non utilizzare il percorso del codice di uso normale o previsto.
Una volta aggiunti i test per aumentare la copertura di un componente in un punto in cui ritieni che il modo più semplice per aumentare la copertura sia il refactoring del codice ... allora fallo. I test esistenti dovrebbero dare maggiore sicurezza durante il refactoring. Questo è quando inizi a modellare il tuo codice per facilitare il test dell'unità reale.
Tutto quanto sopra è per il codice legacy. Per il nuovo codice, scrivere test prima e durante la scrittura del codice stesso. I test dovrebbero essere una considerazione nel design del codice.