Ti consiglio vivamente di non provare un refactor questo codice.
Sei in una situazione senza vincita qui, qualsiasi nuova funzionalità che aggiungi può introdurre un bug in una funzione esistente per la quale non esiste un test. Tuttavia, se si refactoring quella funzionalità esistente è probabile che sia possibile creare bug in altre funzionalità.
Se vendi il refactoring per il business come "abbiamo bisogno di passare un po 'di tempo a rendere il sistema meno bug e testabile", in 3 mesi ti ritroverai con un sistema ancora più bacato con qualche altro test l'azienda non sarà soddisfatto!
Inoltre, probabilmente scoprirai che i requisiti per il sistema sono "qualunque cosa faccia adesso". Scrivere test per questo non sarà facile.
La soluzione migliore è ottenere requisiti rigidi sulle nuove funzionalità e accertarsi di eseguire test per loro. Bug nelle vecchie funzionalità, beh, puoi dire "vuoi che scriva test per quella funzione? Quali sono i requisiti di come dovrebbe funzionare?".
Una volta che hai più familiarità con il progetto solo allora inizia a sostituire i bit man mano che vengono aggiornati con nuove funzionalità.
Consigli avanzati per gli utenti:
Se vuoi davvero che il prodotto funzioni al 100%, devi assolutamente avere l'azienda da acquistare per un progetto di "grande riscrittura".
Ciò va ben oltre lo scopo del team di sviluppo, poiché prima di iniziare a programmare è necessario raccogliere e comprendere sia i requisiti originali del sistema sia anche il modo in cui viene effettivamente utilizzato giorno per giorno.
Avrai bisogno di configurare un ambiente di test separato per il sistema esistente. Supponiamo che lo sviluppo normale del business continui mentre il progetto di riscrittura è in corso.
Una volta che hai questi puoi iniziare a scrivere test funzionali per il sistema attuale. Non toccare il codice fino a quando non vengono eseguiti. Sei destinato a trovare una serie di bug esistenti, o dovremmo dire differenze tra ciò che la gente pensava che i requisiti fossero e che cosa il sistema facesse. Ciò richiederà una serie di riunioni da risolvere, forse il sistema è giusto e i requisiti sono sbagliati, forse sono entrambi sbagliati, forse hanno ragione ma non sono più di quelli di cui l'azienda ha bisogno.
Solo dopo aver passato una serie completa di test funzionali puoi persino pensare di cambiare il codice; e ricorda, mentre stai facendo che un altro team si sta collegando aggiungendo altre funzionalità che dovrai duplicare sul "nuovo sistema" prima di poter andare in diretta.
Se riesci a fare tutto questo, supera il business come al solito team e rilasci poi un prodotto con le stesse caratteristiche che aveva all'inizio del processo. È una vendita molto difficile da fare per un'azienda se il prodotto funziona fondamentalmente ok.