Refactoring di numerose classi / metodi C ++. Come iniziare? [duplicare]

9

Ho a che fare con il codice legacy. Contiene alcune classi BIG (conteggio linee 8000+) e alcuni metodi BIG (conteggio linee 3000+). Per uno di questi metodi ho scritto un test unitario che copre almeno un po 'di codice. Questa funzione non ha una struttura specifica, è un casino di loop e condizioni nidificati. Mi piacerebbe refactoring, ma ancora non ho idea di come iniziare.

In realtà ho iniziato estraendo una singola funzione. Alla fine doveva avere 21 parametri: - /

Dovrei ...
1. Continuare ad estrarre funzioni orribili sapendo che a lungo termine avrò successo?
2. inizia ad estrarre funzioni ancora più grandi? Quindi espongo la struttura di questo mostro e poi posso iniziare il vero refactoring.
3. estrai solo piccole funzioni "buone" (e / o classi) solo perché sono un programmatore pulito e puro?
4. fare qualcosa di completamente diverso?

    
posta TobiMcNamobi 19.12.2012 - 21:50
fonte

2 risposte

7

Il refactoring è in qualche modo l'intero libro di cui si parla. È difficile raccontare tutti i metodi e le insidie.

  1. Prima di iniziare il refactoring, scrivi i test per un pezzo che vuoi refactoring.
  2. Inizia il refactoring con pezzi piccoli e puliti di quelle grandi funzioni
  3. Trova il pezzo che può essere riscritto come una funzione e renderlo una funzione.
  4. Esegui i test per assicurarti di aver fatto le cose per bene e non compaia alcun effetto collaterale

Dopodiché dovresti avere un'idea di ciò che deve essere fatto con tutti gli altri (grandi) pezzi. Quando l'intera faccenda diventa più chiara, puoi effettuare una riprogettazione di livello superiore.

P.S. è solo un breve schizzo. Riguardo al refactoring stesso è meglio leggere alcuni libri (come M. Fowler - Refactoring, ecc.)

    
risposta data 19.12.2012 - 22:09
fonte
2

Code Complete raccomanda di creare un'interfaccia o un wrapper tra il codice legacy e il nuovo codice che lo utilizza. Mantieni l'interfaccia pulita e in quanto è necessario apportare modifiche al codice legacy, rifattorizzare o riscrivere i pezzi necessari e spostarli in avanti.

Se devi apportare abbastanza modifiche, alla fine le classi verranno portate alla pari con il nuovo codice.

    
risposta data 20.12.2012 - 19:05
fonte

Leggi altre domande sui tag