Refactoring: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
Riga 1:
{{S|informatica}}
In [[ingegneria del software]], il '''refactoring''' (o '''code refactoring''') è una "tecnica strutturata per modificare la struttura interna di porzioni di [[codice sorgente|codice]] senza modificarne il comportamento esterno",<ref>Martin Fowler in [http://refactoring.com refactoring.com]</ref> 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]].<ref>Joshua Kerievsky, ''Refactoring to Patterns''</ref> Il refactoring è un elemento importante delle principali metodologie emergenti di sviluppo del software (soprattutto [[programmazione orientata agli oggetti|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 [[programmazione orientata agli oggetti|orientato agli oggetti]]. In questa accezione stretta (proposta originariamente da [[Martin Fowler]], che è tuttora uno degli autori più influenti sull'argomento),<ref>Fowler è tra l'altro l'autore del primo libro sull'argomento: ''Refactoring: Improving the Design of Existing Code'', e mantiene il sito [http://refactoring.com refactoring.com], che raccoglie molte risorse sul refactoring.</ref> il refactoring è in genere motivato dalla rilevazione di un ''[[code smell]]''.<ref name="fowlerbook">V. M. Fowler, ''Refactoring''</ref> 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.<ref name="fowlerbook"/> 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 [[Integrated development environment|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 [[automazione del collaudo del software|test automatici]]; per esempio, lo [[test driven development|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 ==
|