# Refacció

Refacció és el procés mitjançant el qual es fa una reescriptura d'un material escrit per tal de facilitar la seva comprensió i millorar-ne la seva estructura interna. Aquest procés es duu a terme conservant el significat del text i el seu comportament.

## Refaccionant codi font

En enginyeria del programari, el terme refacció, en anglès refactoring, s'empra per a descriure el fet de modificar codi font sense canviar-ne el comportament observat des de l'exterior. La refacció sovint és una part del cicle de vida del programari: els desenvolupadors alternen entre la producció de noves funcionalitats i la refacció de codi ja existent per tal de millorar-ne la consistència interna i la claredat. Les proves de regressió asseguren que la refacció no ha canviat el comportament del codi observat des d'altres mòduls del programa.
El terme és una analogia amb la factorització de nombres i de polinomis. Per exemple, x² − 1 factoritza a (x + 1)(x − 1), revelant una estructura interna que abans no era visible (les dues arrels +1 i -1). De forma similar quan es refacciona el programari apareixen estructures que restaven amagades en el codi original.
Un exemple, trivial, de refacció és canviar el nom d'una variable de manera que doni una pista del seu significat dins del codi. Per exemple, reanomenar una variable anomenada 'i' a 'interes'. Un exemple més complex de refacció seria moure part del codi d'un mètode o funció a un altre mètode o funció de forma que es pugui utilitzar a més d'un lloc i s'evitin duplicitats, a part de reduir la mida del codi del mètode o funció original. En els següents diagrames es pot veure, de forma simplificada, un exemple de refacció d'una classe per tal de reduir-ne la mida i la complexitat. Es passaria de la situació "complex":
cap a:
Aquesta refacció permetria tractar les dades d'una forma més concreta i senzilla. Com s'observa, la interfície oferta per la classe es manté constant durant la refacció.
Aquests processos de refacció s'han produït de forma desorganitzada des dels inicis de la programació. Les metodologies modernes de programació, com ara la programació extrema, preveuen fases en el cicle de vida del programari on únicament es fan processos de refacció.
Una referència clàssica de la refacció del codi font és el llibre de Martin Fowler anomenat Refactoring. Tot i que, com s'ha dit, la refacció s'ha dut a terme informalment durant anys, l'article de 1993 de William F. Opdyke és el primer a analitzar la refacció. La refacció és un concepte d'una importància cabdal, tant és així que ha estat qualificada com una de les innovacions més importants del programari
Alguns mètodes de refacció es troben amb problemes en ser utilitzats. Refer la capa de negoci d'una base de dades és difícil o impossible, a causa de la transformació de l'esquema i la migració de dades que ha d'ocórrer mentre el sistema pot estar sent utilitzat fortament. Finalment, la refacció que afecta a una interfície pot causar dificultats a menys que el programador tingui accés a tots els usuaris de la interfície. Per exemple, un programador que canviï el nom d'un mètode en una interfície ha d'editar totes les referències al nom vell a tot el projecte o mantenir un stub amb el nom vell. Aquest stub llavors cridaria al nou nom del mètode.

## Eines de refacció

Un factor molt important a tenir en compte a l'hora de refaccionar el codi és el conjunt d'eines que emprem per a editar el codi font. Cal tenir present que el procés de refaccionar sense una eina és un procés totalment manual i, per tant, subjecte a errors. Pensis en el cas que s'hagi de canviar el nom d'una classe per tal que reflecteixi millor la seva funció dins de l'aplicació. El procés implica recórrer tot el codi buscant la instanciació de la classe i substituir-ne el nom. Eines com Eclipse, NetBeans, Anjuta permeten automatitzar aquest, i altres tipus de refaccions.

## Altres usos de la refacció

El terme refacció o refactoring també s'aplica quan es modifica un altre tipus de text. Per exemple, a les planes Viqui, la refacció es refereix al procés de reescriptura i reorganització del text per tal d'escurçar-lo i organitzar-lo tot i mantenir la quantitat d'informació que conté. Un cas clar en serien les discussions, on algú pot estar interessat a veure els arguments que es fan servir però no estigui interessat a veure l'evolució de la discussió.

## Referències

* Martin Fowler: Refactoring. Improving the Design of Existing Code, Addison-Wesley Professional 1999, ISBN 0-201-48567-2
* William C. Wake: Refactoring Workbook, Addison-Wesley, ISBN 0-321-10929-5
* Joshua Kerievesky: Refactoring To Patterns, Addison-Wesley, ISBN 0-321-21335-1

## Vegeu també

* Entropia del programari, mesura de desordre del programari
* Programació Extrema
* Proves de regressió
* Refacció de Base de Dades

## Enllaços externs

* What Is Refactoring? (article c2.com) (anglès)
* Pàgina de Martin Fowler sobre refactorització (anglès)
* Aspect-Oriented Refactoring Arxivat 2004-10-11 a Wayback Machine. per Ramnivas Laddad (anglès)