Ho ereditato una base di codice esistente per un prodotto che è deprecabilmente scarso. Il progetto fondamentale è terribilmente inadeguato, ma sfortunatamente posso fare ben poco senza un refactoring completo (accoppiamento HIGH, coesione BASSA, duplicazione dilagante del codice, nessuna documentazione tecnica di progettazione, test di integrazione invece di test unitari). Il prodotto ha una storia, un'elevata esposizione a clienti "cash cow" critici con una tolleranza minima al rischio, un debito tecnico che farà arrossire i Greeks, un codebase MOLTO grande e complessità, e un approccio disfattista stanco delle battaglie da parte della squadra prima me.
La vecchia squadra è saltata in un'altra divisione in modo da avere l'opportunità di rovinare un altro progetto. È molto raro che provi un fallimento tecnico del progetto di incompetenza rispetto a un errore di gestione del progetto, ma questo è davvero uno di quei casi.
Per il momento sono da solo ma ho molto tempo, libertà di decisione e direzione futura e la possibilità di costruire una squadra da zero per aiutarmi.
La mia domanda è di raccogliere opinioni su refactoring a basso impatto su un progetto come questo quando si ha del tempo libero durante la fase di raccolta dei requisiti funzionali. Esistono migliaia di avvisi del compilatore, quasi tutte importazioni inutilizzate, variabili locali non lette, assenza di controllo del tipo e cast non sicuri. La formattazione del codice è così illeggibile e sciatta che sembra che il programmatore abbia sofferto della malattia di Parkinson e non sia in grado di controllare la quantità di volte che la barra spaziatrice è stata premuta su una determinata linea. Ulteriori risorse di database e file sono in genere aperte e mai chiuse in modo sicuro. Argomenti del metodo inutili, metodi duplicati che fanno la stessa cosa, ecc.
Mentre aspetto i requisiti per la prossima funzione, ho iniziato a pulire le cose a basso rischio a basso impatto mentre andavo a chiedermi se stavo perdendo il mio tempo o facendo la cosa giusta. Cosa succede se la nuova funzionalità significa strappare codice che ho trascorso del tempo in precedenza? Ho intenzione di avviare un approccio Agile e capisco che questo è accettabile e normale da refactoring costante durante lo sviluppo Agile.
Riesci a pensare a qualsiasi impatto positivo o negativo che io possa fare di ciò che vorresti aggiungere?