Refactorización


   
Siempre hemos oído el término refactorización, pero aunque parezca mentira, mucha gente de la que utiliza el término no sabe realmente su significado.
Así que vamos a aprovechar para explicar el término.

Refactorizar (o Refactoring) es realizar una  transformación al software preservando su comportamiento, modificando sólo su estructura interna para mejorarlo. A esta técnica se le conoce informalmente como limpiar el código.

El término Refactoring fue introducido por primera vez 1992 por William F. Opdyke, y es el primer trabajo conocido que examina específicamente esta técnica.

Actualmente podemos encontrar muchas definiciones para dicho término, entre las que cabe destacar:
  • Tokuda y Batory (2001): "una transformación parametrizada a un programa preservando su comportamiento, modificando automáticamente el diseño de la aplicación y el código fuente subyacente".
  •  Martin Fowler (1999): "cambios realizados en el software para hacerlo más fácil de modificar y comprender, por lo que no son una optimización del código, ya que esto en ocasiones lo hace menos comprensible, ni solucionar errores o mejorar algoritmos".
La refactorización es realizada a menudo como parte del proceso de desarrollo del software. Y se considera como la parte del mantenimiento del código que no arregla errores ni añade funcionalidad. El objetivo es mejorar la comprensión del código o cambiar su estructura y diseño y eliminar código muerto, para facilitar el mantenimiento en el futuro.

¿Por qué debemos Refactorizar?

  • Mejora el diseño.
  • Mejora la lectura del código.
  • Revela defectos.
  • Ayuda a programar más rápido.

¿Cuándo debemos Refactorizar?

  • Cuando desarrollamos usando TDD: Red – Gree – Refactor.
  • Cuando desarrollamos usando PDD (Pain driven development): Si el código te causa dolor, entonces refactorizalo.
  • Cuando se necesita agregar una nueva funcionalidad.
  • Cuando corregimos bugs.
  • Cuando hacemos la revisión de código.

¿Cuándo no debemos Refactorizar?

  • Cuando la deuda técnica es muy alta y la única opción es reescribir toda la aplicación.
  • Cuando no se usa un código, en este caso recomiendo borrarlo.
  • Cuando el fin del plazo de entrega está cerca, esto puede agregar nuevos bugs que no se llegan a probar por falta de tiempo.

Principios de Refactorización

  • KISS (Keep it simple stupid).
  • DRY (Dont repeat yourself).
  • Escribir código expresivo.
  • Reducir el código.
  • Separar responsabilidades.
  • Usar un nivel de abstracción apropiado.

Tips de Refactorización

  • Revisar constantemente el código.
  • Hacer un checklist de defectos a refactorizar.
  • Hacer refactorizaciones pequeñas, una a la vez.
  • Agregar casos de prueba o pruebas unitarias.
  • Revisar los resultados.

Herramientas de Refactorización

  • Visual studio (Microsoft).
  • JustCode (Telerik).
  • ReSharper (JetBrains).
  • CodeRush (DevExpress).
  • Visual Assist X (Whole Tomato).
Podéis encontrar más información en los siguientes enlaces:
Breve introducción a la Refactorización 
La refactorización de software basada en valor
Refactorizar

Comentarios