Ho ereditato una base di codice esistente per un prodotto che è riprovevolmente sciatto. Il design fondamentale è tristemente inadeguato, che sfortunatamente posso fare poco senza un refactor completo (accoppiamento HIGH, LOW coesione, duplicazione dilagante di codice, nessuna documentazione tecnica di progettazione, test di integrazione anziché test unitari). Il prodotto ha una storia, un'elevata esposizione ai clienti critici "cash-cow" con una tolleranza minima per il rischio, un debito tecnico che farà arrossire i greci, una base di codice MOLTO grande e complessità, e un approccio disfattista stanco della battaglia contro i bug da parte del team prima me.
Il vecchio team ha portato la nave in un'altra divisione in modo da avere l'opportunità di rovinare un altro progetto. È molto raro che si verifichi un fallimento del progetto di incompatibilità tecnica anziché 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 capacità di creare una squadra da zero per aiutarmi.
La mia domanda è quella di raccogliere opinioni sul refactoring a basso impatto su un progetto come questo quando hai del tempo libero durante la fase di raccolta dei requisiti funzionali. Esistono migliaia di avvisi del compilatore, quasi tutti importazioni non utilizzate, variabili locali non lette, assenza di verifica 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 possa controllare il numero di volte in cui la barra spaziatrice è stata premuta su una determinata riga. Ulteriori risorse di database e file vengono 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, mentre pulisco pulisco cose a basso impatto ea basso rischio e mi chiedo se sto perdendo tempo o facendo la cosa giusta. Cosa succede se la nuova funzionalità significa strappare il codice che ho trascorso tempo prima? Ho intenzione di iniziare un approccio Agile e capisco che questo è accettabile e normale refactificare costantemente durante lo sviluppo Agile.
Riesci a pensare a eventuali impatti positivi o negativi del mio fare ciò che vorresti aggiungere?