Refactoring

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", applicata per migliorare alcune caratteristiche non funzionali del software quali la…

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", 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. 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

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), il refactoring è in genere motivato dalla rilevazione di un code smell. 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. 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

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

IntelliJ IDEA (per Java)

Eclipse (per Java)

NetBeans (per Java)

Embarcadero C++ e C (ex Borland C/C++ Builder)

Embarcadero Delphi

Visual Studio (per piattaforma .NET nelle versioni dal 2003 in poi)

PyCharm (per Python)

WingIDE 4.x e 5.x di WingWare

KomodoIDE

PhpStorm per PHP

Video: Learning Circle CodeRefactoring Guillaume Lederrey — Guillaume Lederrey — CC0 — Wikimedia Commons

Servizi correlati

Altre voci

C

Customer Interaction Management

Per Customer Interaction Management (CIM) si intende la gestione dei contatti intercorsi fra aziende e clienti, sia a livello di customer care che nell'ambito delle vendite (teleselling) e della promozione di prodotti. A tal proposito possono essere utilizzati software aziendali dedicati alla…

Leggi la voce →
Codice sorgenteC

Codice sorgente

In informatica, il codice sorgente (spesso detto sorgente o codice o listato) è il testo di un algoritmo di un programma scritto in un determinato linguaggio di programmazione, compreso all'interno di un file sorgente, che definisce il flusso di esecuzione del programma stesso, ovvero la sua…

Leggi la voce →
C

Collaudo del software

Il collaudo del software (anche software testing in lingua inglese), in informatica, indica un procedimento, che fa parte del ciclo di vita del software, utilizzato per individuare le carenze di correttezza, completezza e affidabilità delle componenti software in corso di sviluppo. Consiste…

Leggi la voce →
Paradox (database)P

Paradox (database)

Paradox è un'interfaccia software per la gestione di basi di dati di tipo relazionale (RDBMS) che sfrutta le Borland Database Engine e che integra nativamente in sé un modulo per lo sviluppo rapido di applicativi (RAD, Rapid Application Development) gestionali, attualmente distribuito da Corel…

Leggi la voce →
Ingegneria informaticaI

Ingegneria informatica

L'ingegneria informatica è un ramo dell'ingegneria dell'informazione, derivato in larga parte dall'ingegneria elettronica, che applica principi di quest'ultima e dell'informatica pura a processi di progettazione, realizzazione, perfezionamento e gestione di sistemi e soluzioni per l'elaborazione…

Leggi la voce →
C

Classe (informatica)

Una classe, nella programmazione orientata agli oggetti, è un costrutto di un linguaggio di programmazione usato come modello per creare oggetti. Tale modello comprende attributi e metodi che saranno condivisi da tutti gli oggetti creati (istanze) a partire dalla classe. Un oggetto è, di fatto,…

Leggi la voce →