Ir al contenido principal

Como llevar a cabo una refactorización

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:
  1. Madurez del equipo de desarrollo
  2. Antigüedad del proyecto y de las herramientas utilizadas
  3. Evolución del cliente
Estos factores pueden propiciar el proceso o bien bloquearlo por completo.

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:
  1. Cambios en la tecnología (de clientes y propia)
  2. Tendencias del mercado
  3. Cambios en los procesos internos
  4. Nuevos modelos de negocios
  5. Errores constantes o recursivos
  6. Mejoras en las funcionalidades existentes
  7. 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.
Es altamente recomendable el uso de metodologías ágiles para evitar que ante requerimientos imprevistos que impidan continuar con la refactorización, ésta quede incompleta. Se recomienda el uso de SCRUM.

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.
  1. 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
  2. Planificar. Es aconsejable que al final de un sprint se haya completado uno de los objetivos planteados
  3. Primer paso: Diagramas de clases de lo actual
  4. Segundo paso: Diagramas de secuencias de los métodos actuales involucrados
  5. Tercer paso: Analizar problema y buscar una solución utilizando patrones de diseño
  6. Cuarto paso: Nuevo digrama de clases
  7. Quinto paso: Nuevo diagrama de secuencia
  8. Correr las pruebas unitarias y funcionales existentes para verificar el estado actual antes de la modificación
  9. Codificar la solución
  10. 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
  11. 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

Entradas populares de este blog

Configurar Wi-Fi en Slackware

Ahora es común tener una notebook pero no lo es tanto el tener un linux en ella y mucho menos tener un Slackware en la notebook. Sin embargo, es posible tenerlo por lo que vale la pena dedicarle unas líneas a la configuración del Wi-Fi. Primero que nada hay que saber cuál es la placa de red inalambrica que posee la notebook, es decir su marca y modelo. Si ya está Linux instalado en la notebook solo se debe ejecutar el siguiente comando para saber cuál es la marca y modelo de la placa de red inalambrica: # lspci Este comando dará como resultado algo similar a esto: 09:00.0 Ethernet controller: Marvell Technology Group Ltd. Unknown device 4354 (rev 12) 0b:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02) En estas líneas se puede observar que la segunda hace referencia a la placa de red inalambrica que posee la notebook, en este caso una Intel PRO/Wireless 3945ABG . Con esta información lo que se debe hacer es buscar cuál es el módulo que se deb...

¿Qué hace un Licenciado en Sistemas?

Muchas veces, conocidos que no son informáticos, me han preguntado ¿qué hace un Licenciado en Sistemas? ...... " Buena pregunta " - sonaba en mi cabeza. Yo sé lo que yo quiero hacer en mi vida profesional pero realmente ¿qué perfil tiene un Licenciado en Sistemas? Es sencillo saber qué hace un médico, un veterinario, un ingeniero civil, etc. Por ejemplo si su perro se enferma ¿a quién llaman? si quieren construir un puente ... ¿a quién llaman? si ustedes están enfermos ¿a quién llaman? Ahora, si necesitan un sistema para su empresa ¿a quien llaman? ... ¿a un Lic. en Sistemas? ¿a un Ing. en Sistemas? ¿a un programador de aplicaciones? ¿a un analista en sistemas? ¿a un consultor informático? o ¿al amigo que se la pasa en internet y que sabe "todo" sobre computadoras e hizo un montón de cursos (word, excel, windows, redes, etc.)? Esta situación se presenta a menudo; es tan confuso que muchas veces hasta los mismos profesionales informáticos o entendidos en la materia ...

Paquetes para Slackware

Para aquellos que recién comienzan a utilizar Slackware , esta grandiosa distribución GNU/Linux una de las más antiguas, estables y seguras que existen; de seguro se habrán encontrado con la tarea de instalar algún programa extra y que no es distribuido junto con Slackware. Uno de los mejores sitios para encontrar software empaquetado para esta distro es Linuxpackages.net ; en este sitio podrán realizar búsquedas en versiones específicas de Slackware inclusive en la última versión liberada, la 12.1. Los paquete que aquí se encuentran ya han sido precompilados por lo que no deberán realizar los típicos pasos "./configure","make" y "make install"; sino que solamente podrán utilizar las herramientas installpkg, pkgtool o kpackage para instalar los paquetes descargados desde este sitio. Claro que no siempre encontrarán el soft que buscan en este excelente sitio, en esos casos siempre es bueno recurrir a los sitios del autor del soft en cuestión para obtener l...