Refactoring

Da Wikipedia, l'enciclopedia libera.
Jump to navigation Jump to search

Con refactoring (o code refactoring), nell'ingegneria del software, si indica 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 quali la leggibilità, la manutenibilità, la riusabilità, l'estensibilità del codice nonché la riduzione della sua complessità, eventualmente attraverso l'introduzione a posteriori di design pattern.[2] Si tratta di 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.

Descrizione[modifica | modifica wikitesto]

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 programmazione orientata 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.

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: rieseguire eventuali test automatici al termine di ogni micromodifica fornisce infatti un più alto grado di confidenza che non siano stati introdotti errori; questo consente di prendere in considerazione anche modifiche particolarmente pericolose (come lo spostamento di codice fra classi o la modifica delle relazioni di ereditarietà).

Software utilizzati[modifica | modifica wikitesto]

Molti IDE forniscono supporto al refactoring del codice. Funzioni di refactoring sono incluse per esempio nei seguenti IDE:

Note[modifica | modifica wikitesto]

  1. ^ Martin Fowler in refactoring.com
  2. ^ Joshua Kerievsky, Refactoring to Patterns
  3. ^ 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.
  4. ^ a b V. M. Fowler, Refactoring

Bibliografia[modifica | modifica wikitesto]

  • 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

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Controllo di autoritàLCCN (ENsh99002049 · GND (DE4784343-3 · J9U (ENHE987007566125005171 (topic) · NDL (ENJA01191220