Refactoring
In ingegneria del software, il refactoring (o code refactoring) è una "tecnica strutturata per modificare la struttura interna di porzioni di codice senza modificarne il comportamento esterno",[1] applicata per migliorare alcune caratteristiche non funzionali del software. I vantaggi che il refactoring persegue riguardano in genere un miglioramento della leggibilità della manutenibilità, della riusabilità e dell'estendibilità del codice e la riduzione della sua complessità, eventualmente attraverso l'introduzione a posteriore di design pattern.[2] Il refactoring è un elemento importante delle principali metodologie emergenti di sviluppo del software (soprattutto object-oriented): per esempio delle metodologie agili, dell'extreme programming, e del test driven development.
Concetti generali
Benché il concetto generale di refactoring possa essere applicato in qualsiasi contesto di sviluppo software, nelle metodologie agili e nell'extreme programming il termine è usato prevalentemente nel contesto della orientato agli oggetti. In questa accezione stretta (proposta originariamente da Martin Fowler, che è tuttora uno degli autori più influenti sull'argomento),[3] il refactoring è in genere motivato dalla rilevazione di un code smell.[4] Per esempio, un metodo potrebbe apparire eccessivamente lungo e complesso, o contenere molto codice duplicato anche in un altro metodo. L'azione di refactoring mira a eliminare il problema (per esempio portando a fattor comune il codice duplicato) attraverso una serie di "micro-passi" il più possibile semplici.[4] Il requisito di semplicità delle singole modifiche ha due giustificazioni: ridurre il rischio di introdurre errori con la modifica, e rendere ipotizzabile l'esecuzione automatica della modifica stessa da parte di strumenti integrati negli IDE. Gran parte della letteratura sul refactoring descrive tipi di micro-modifiche di uso comune che, combinate in sequenza, possono portare a ristrutturazioni anche radicali del software, e molte delle azioni di refactoring proposte in letteratura sono implementate da IDE moderni come Eclipse.
Refactoring e test automatici
Il refactoring è un elemento integrante di molti processi di sviluppo fortemente basati su test automatici; per esempio, lo sviluppo basato su test (TDD) prevede una fase (obbligatoria ed esplicita) di refactoring al termine di ogni ciclo di modifica. Fra i due concetti esiste infatti un legame molto stretto. I test automatici sono utili durante il refactoring perché, attivati dopo ogni micro-modifica, contribuiscono a garantire che la modifica in questione non abbia introdotto errori. Grazie a questa protezione dagli errori, anche modifiche estremamente invasive (come lo spostamento di intere porzioni di codice da una classe all'altra), che in assenza di test sarebbero probabilmente percepite come troppo rischiose, possono essere eseguite con un buon grado di confidenza.
Software per il refactoring
Molti IDE forniscono supporto al refactoring del codice. Funzioni di refactoring sono incluse per esempio nei seguenti IDE:
Voci correlate
Note
- ^ Martin Fowler in refactoring.com
- ^ Joshua Kerievsky, Refactoring to Patterns
- ^ Fowler è tra l'altro l'autore del primo libro sull'argomento: Refactoring: Improving the Design of Existing Code, e mantiene il sito refactoring.com, che raccoglie molte risorse sul refactoring.
- ^ a b V. M. Fowler, Refactoring
Bibliografia
- Martin Fowler, Kent Beck, John Brant e William Opdyke, Refactoring: Improving the Design of Existing Code
- Joshua Kerievsky, Refactoring to Patterns
- William C. Wake, Refactoring Workbook
Collegamenti esterni
- refactoring.com, raccolta di risorse sul refactoring mantenuta da Martin Fowler