Refactoring: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Aggiunte non pertinenti, 90% non è refactoring, molto POV, nessuna fonte, errori vari. Rollback manuale.
Etichetta: Ripristino manuale
 
(42 versioni intermedie di 29 utenti non mostrate)
Riga 1:
{{S|informaticaprogrammazione}}
In [[ingegneria del software]], ilCon '''refactoring''' (o '''code refactoring'''), ènell'[[ingegneria del software]], si indica 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]]. Iquali vantaggi che il refactoring persegue riguardano in genere un miglioramento dellala [[leggibilità]], dellala [[manutenibilità]], dellala [[riusabilità]], e delll'[[estendibilitàestensibilità]] del codice enonché la riduzione della sua complessità, eventualmente attraverso l'introduzione a posterioreposteriori di [[design pattern]].<ref>Joshua Kerievsky, ''Refactoring to Patterns''</ref> Si tratta di 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]].
 
== Descrizione ==
Nella forma proposta originariamente da [[Martin Fowler]], che è 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 viene eseguito attraverso una serie di micro-passi, ciascuno dei quali consiste di una modifica molto limitata (e quindi che comporta un basso rischio di introdurre errori), ma che combinati fra loro possono portare a ristrutturazioni significative del codice. Molti [[Integrated development environment|ambienti di sviluppo]] forniscono strumenti automatici per applicare le più tipiche micro-trasformazioni del codice usate nel refactoring.
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),<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 [[Ambiente di sviluppo integrato|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 (informatica)|Eclipse]].
Il refactoring è spesso associato all'uso di tecniche di [[automazione del collaudo del software|test automatici]] sul codice, applicati a valle di ciascuna micro-modifica per verificare che le funzioni del codice siano state correttamente preservate. In particolare, lo [[test driven development|sviluppo basato su test]] (TDD) prevede una fase esplicita di refactoring al termine di ogni ciclo di modifica.
 
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: 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à (informatica)|ereditarietà]]).
== Software per il refactoring ==
 
Molti [[Integrated development environment|IDE]] forniscono supporto al refactoring del codice. Funzioni di refactoring sono incluse per esempio nei seguenti IDE:
== Software utilizzati ==
* IntelliJ IDEA (per [[Java (linguaggio)|Java]])
Molti [[IntegratedAmbiente developmentdi environmentsviluppo integrato|IDE]] forniscono supporto al refactoring del codice. Funzioni di refactoring sono incluse per esempio nei seguenti IDE:
 
* [[IntelliJ IDEA]] (per [[Java (linguaggio di programmazione)|Java]])
* [[Eclipse (informatica)|Eclipse]] (per Java)
* [[NetBeans]] (per Java)
* Embarcadero [[C++]] e [[C (linguaggio)|C]] (ex Borland C/C++ Builder)
* Embarcadero [[Delphi]]
* [[Visual Studio]] 2008 e 2010 (per piattaforma [[.NET]] nelle versioni dal 2003 in poi)
* [[PyCharm]] (per [[Python]])
* WingIDE 4.x e 5.x di WingWare
 
* KomodoIDE
==Voci correlate==
* [[DesignPhpStorm]] patternper [[PHP]]
* [[Automazione del collaudo del software]]
* [[Test driven development]]
 
==Note==
Riga 27 ⟶ 30:
* Joshua Kerievsky, ''Refactoring to Patterns''
* William C. Wake, ''Refactoring Workbook''
 
==Voci correlate==
* [[Automazione del collaudo del software]]
* [[Design pattern]]
* [[Test driven development]]
* [[Programmazione estrema]]
 
==Collegamenti esterni==
* {{FOLDOC||refactoring}}
* [http://refactoring.com refactoring.com], raccolta di risorse sul refactoring mantenuta da [[Martin Fowler]]
 
{{Controllo di autorità}}
== Voci correlate ==
* [[Programmazione estrema]]
{{Portale|Informatica|ingegneria}}
 
[[Categoria:Programmazione]]
[[Categoria:Ingegneria del software]]
 
[[ar:إعادة هيكلة الكود]]
[[ca:Refacció]]
[[cs:Refaktorování]]
[[da:Refactoring]]
[[de:Refactoring]]
[[en:Code refactoring]]
[[es:Refactorización]]
[[fi:Refaktorointi]]
[[fr:Refactorisation]]
[[gl:Refactorización]]
[[he:Refactoring]]
[[hr:Refaktoriranje koda]]
[[ja:リファクタリング (プログラミング)]]
[[ko:리팩토링]]
[[lt:Pertvarkymas (programavimas)]]
[[nl:Refactoren]]
[[no:Refaktorering]]
[[pl:Refaktoryzacja]]
[[pt:Refatoração]]
[[ru:Рефакторинг]]
[[sv:Omstrukturering av kod]]
[[uk:Рефакторинг]]
[[vi:Cải tiến mã nguồn]]
[[zh:代码重构]]