Abbiamo un programma scritto in C ++ che è per lo più procedurale, ma usiamo alcuni contenitori C ++ dalla libreria standard (vettore, mappa, elenco, ecc.). Apportiamo continuamente modifiche a questo codice, quindi non lo chiamerei un pezzo stagnante di codice legacy che possiamo semplicemente concludere.
Ci sono molti problemi con questo codice che rende sempre più difficile per noi apportare modifiche, ma vedo che i tre problemi principali sono:
- Molte delle funzioni fanno più (molto di più) di una cosa
- Violare il principio DRY a sinistra ea destra
- Abbiamo variabili globali e lo stato globale fino alla wazoo.
Stavo pensando che dovremmo prima attaccare le aree 1 e 2. Lungo la strada, possiamo "de-globalizzare" le nostre funzioni più piccole dal basso verso l'alto passando in informazioni che sono attualmente globali come parametri per le funzioni di livello inferiore dalle funzioni di livello più alto e quindi concentrarsi su come eliminare la necessità di variabili globali il più possibile.
Ho appena finito di leggere Code Complete 2 e The Pragmatic Programmer, e ho imparato molto, ma mi sento sopraffatto. Vorrei implementare il test delle unità, passare da un approccio procedurale all'approccio OO, automatizzare i test, utilizzare un sistema di registrazione migliore, convalidare completamente tutti gli input, implementare una gestione degli errori migliore e molte altre cose, ma so se iniziamo tutto ciò in una volta, ci rovineremmo. Penso che i tre che ho elencato siano i più importanti per iniziare.
Qualsiasi suggerimento è benvenuto.
Siamo un team di due programmatori per lo più con esperienza nello scripting in-house. Sarà difficile giustificare il tempo dedicato al refactoring, soprattutto se non possiamo fatturare il tempo a un cliente. Che ci crediate o no, questo progetto ha avuto successo abbastanza da tenerci occupati a tempo pieno e anche da diversi consulenti impegnati ad usarlo per il lavoro dei clienti.