La clave del refactoring es que se parte de un código que más o menos funciona, se modifica y el código debe seguir funcionando igual que antes. Si hacemos refactoring con frecuencia, es importante tener algún medio de probar que el código sigue funcionando correctamente después de “arreglarlo”.

El objetivo final es dejara el código funcionando exactamente igual que antes, pero hecho de otra manera que facilite seguir trabajando.

Si se añade código nuevo, NO arreglamos el existente. Si estamos arreglando el existente, NO añadimos funcionalidades nuevas. La idea es arreglar el código con frecuencia, cada vez que veamos que algo no está todo lo bien hecho que debiera. Es decir, hacer refactoring sistemáticamente.

Ventajas

Sabemos que nunca se diseña bien el código a la primera, bien porque nunca se dice al principio todo lo que la aplicación debe de hacer o porque el cliente pide nuevos requisitos, modificaciones, etc.

El refactoring ayuda a los equipos de desarrollo a mantener su código legible y limpio. Esto permitirá que el código sea más facil de modificar en fases más avanzadas del proyecto.
Aunque pueda parecer una perdida de tiempo, a largo plazo se gana mucho tiempo. Es una práctica que debe de ser realizada en cualquier proyecto de forma sistemática.

Testing

Es imprescindible relizar pruebas de las partes que han sido modificadas para verificar que efectivamente todo sigue igual. Esta tarea no sólo debe de ser realizada por desarrollo sino que el equipo de testing debe realizar sus pruebas también. Desarrollo debe realizar pruebas unitarias, mientras que QA realizará las pruebas funcionales, de integraci n, rendimiento…o las que sean necesarias, todas ellas para garantizar que todo sigue funcionando correctamente. Nunca debemos hacer en un cambio grande, pasarnos varias horas arreglando código sin pasar ningún tipo de prueba y al final hacer la prueba. Si la prueba no pasa, tardaremos también un buen tiempo en encontrar dónde está el fallo.

Referencias
Podeis encontrar más información en la web de Martin Fowler, uno de las gurus del refactoring (y de muchas cosas mas).