Introducción
La refactorización siempre es uno de los procesos de desarrollo más complejos y riesgosos, sin embargo es crucial para la evolución del software que se está desarrollando.La forma de comenzar un proceso de refactorización depende de tres factores:
- Madurez del equipo de desarrollo
- Antigüedad del proyecto y de las herramientas utilizadas
- Evolución del cliente
Razones por las cuales refactorizar
Aquellos que piensen que una refactorización no debería suceder nunca, están equivocados, este proceso es la clave de la evolución de todo software. No es factible comenzar desde cero cada vez que hay una revolución en la tecnologia o el mercado. Basta con que el cliente decida invertir para cambiar la tecnología lo cual impacta directamente en los sistemas que tenga implementados y en consecuencia en la velocidad que nuestro producto deba adaptarse.Pero hay muchas más razones por las cuales es necesario realizar una refactorización, algunas de ellas son:
- Cambios en la tecnología (de clientes y propia)
- Tendencias del mercado
- Cambios en los procesos internos
- Nuevos modelos de negocios
- Errores constantes o recursivos
- Mejoras en las funcionalidades existentes
- Necesidad de dividir el producto en varios (conversión a Línea de productos de software)
Planificar el proceso
Es necesario que el proceso de refactorización sea debidamente planificado. Debe llevarse a cabo de la misma manera que cualquier otro desarrollo pero teniendo en cuenta que este proceso puede no agregar valor al usuario final sino a los propios desarrolladores como así también al producto en sí mismo.Es recomendable dedicar entre un 20% y 30% del esfuerzo total a los procesos de refactorización para que éstos valgan la pena.
Aprovechar los tiempos ociosos de los equipos de trabajo es lo ideal. Esto tiempos suelen estar en:
- Días entre feriados largos. Las cortas semanas de 3 o 4 días suelen ser buenas para invertir tiempo en procesos de mejora
- Épocas vacacionales. Cuando el equipo se ve reducido en su número por lo general hay exceso de trabajo para los que se quedan, sin embargo con una buena planificación el trabajo en esas épocas no debería ser excesivo ni crítico para el negocio por lo que es un buen momento para implementar este tipo de mejoras en los proyectos
- Época de vacas flacas. En todo proyecto hay un momento del año en el que no se planifican nuevos features ni mejoras en las funcionalidades existentes, en esos momentos es dónde es más recomendable realizar la refactorización.
Herramientas
Las herramientas para implementar exitosamente una refactorización son simples, y así deberían ser.- Diagramas de clases
- Diagramas de secuencias
- Patrones de diseño
- Pruebas unitarias
- Herramientas de autodocumentación como Doxygen o similar
Metodología
La metodología propuesta consta de sencillos pasos, entre los cuales se incluye la planificación.- Plantear pequeños objetivos. Por ejemplo: refactorizar uno o varios métodos de una clase, o bien una clase completa. Pero no más que eso en un sólo objetivo
- Planificar. Es aconsejable que al final de un sprint se haya completado uno de los objetivos planteados
- Primer paso: Diagramas de clases de lo actual
- Segundo paso: Diagramas de secuencias de los métodos actuales involucrados
- Tercer paso: Analizar problema y buscar una solución utilizando patrones de diseño
- Cuarto paso: Nuevo digrama de clases
- Quinto paso: Nuevo diagrama de secuencia
- Correr las pruebas unitarias y funcionales existentes para verificar el estado actual antes de la modificación
- Codificar la solución
- Correr las pruebas unitarias y funcionales. Debido a que la funcionalidad se mantiene igual sólo se debería haber modificado la implementación, no hace falta nuevas pruebas unitarias o funcionales a menos que no existan antes
- Documentar todo
Conclusiones
La refactorización siempre será una de las tareas de todo equipo de desarrollo y por lo tanto es inútil evitarlo u omitirlo en el ciclo de vida del desarrollo de cualquier sistema. La estrategia acertada es incluirlo en la planificación de todo proyecto para que no sea ni traumático, ni riesgoso.La evolución del software no sólo está dado por las nuevas funcionalidades sino por las mejoras continuas en su implementación lo que asegura su calidad y performance.
Comentarios
Publicar un comentario