Modificare metodi interminabili: scomporli


Quando è necessario modificare un metodo lungo centinaia o migliaia di righe di codice e modificare un comportamento esistente conviene   SCOMPORRE IL METODO ABNORME E METTERLO SOTTO TEST   con l'aiuto di un tool di refactoring come Resharper.

 La strategia è quella di separare la logica dalle intricate dipendenze nel codice e quindi sradicare le dipendenze (ad esempio sostituendo i riferimenti a classi concreti  con riferimenti a interfacce) per semplificare il test del codice.

Il metodo non è già coperto da test e quindi è necessario cominciare applicando solo i refactoring previsti dal tool (principalmente RefactoringExtractMethod e RefactoringRenameMethod) evitando refactoring manuali che non sono sicuri senza ne test ne tool.

Una volta fatti refactoring automatici che tipicamente sono a grana grossa e messo il codice sotto test è possibile procedere con le altre modifiche di grana fine e poi con quelle manuali (quelle non supportate dal tool di refactoring).


 Riferimenti: Working Effectively with legacy code di M.C.Feathers


P.S. Alcuni Refactoring delle dipendenze che aiutano a testare i metodi estratti:

Parametrize Method: passa come argomenti le dipendenze del metodo in modo da poterle mockare
Expose Static Method: rendi il metodo statico cosi puoi testarlo senza istanziare l'intera classe e le sue dipendenze

Push Down Dependency: sposta le dipendenze difficili da istanziare su una classe derivata
Pull Up Feature: oppure sposta il metodo in una classe base

Extract and Override Getter:  metti le dipendenze difficili da mockare in un getter virtuale e nel test implementa  l'override che restituisce dei mock

Subclass and Override Method: nel test fai l'override dei metodi le cui dipendenze ostacolano il test del metodo da testare
Extract and Override Call: oppure fai l'override della chiamata al metodo
 


Tags :   |  |  |  |

Print | posted @ Wednesday, August 20, 2008 9:19 PM

Comments have been closed on this topic.