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

Patrón DAO en PHP (Data Access Object in PHP)

Este patrón es de gran ayuda a la hora de separar la manipulación de datos y acceso a la DB de la lógica propia de la aplicación. Una versión simplificada de este patrón posee tres componentes principales: El acceso a los datos El objeto de transferencia de datos (value object) El cliente que consume esos datos Antes de presentar el diagrama de clases analicemos el problema el cual consiste en encontrar una forma de manipular los datos de manera tal que el modo de acceder a los mismos sea transparente al cliente que los consume. Esto quiere decir que el cliente no tiene la necesidad de conocer cómo se acceden a los datos (SQL, conectores, motor de base de datos, tipo de base de datos, etc.). El objeto de acceso a los datos debe ser capaz de poder proveer lo que el cliente requiera y además el cliente debe poder utilizar cualquier otro objeto de acceso sin que esto afecte su lógica interna asegurando así que el sistema funcionará aún cuando se cambie de motor de base de...

Novedades en Virtual Library for Moodle

Hace exactamente 7 meses que Virtual Library for Moodle fue liberada y hemos superado las 600 descargas!! .. y siguen aumentando . El sitio oficial fue recientemente actualizado para mejorar la navegabilidad y poder brindar a nuestros usuarios un lugar donde encontrar información relativa al proyecto, descargar el software y la documentación además de obtener un método para contactarse. Como todo proyecto Open Source estamos más que felices de recibir participación en su desarrollo; ya sea traduciendo a algún idioma aún no disponible, realizando correcciones, o simplemente utilizándola. Varios de los actuales usuarios han hecho sus aportes comentándonos sus experiencias y sugerencias, en general, han superado con creces nuestras espectativas. En pocos meses estaremos lanzando una nueva versión beta para que todos tengan la posibilidad de probar las últimas correcciones realizadas como así también algunas características incorporadas, como por ejemplo un instalador tanto para Windows ...

Cómo elegir tu nueva notebook?

Tips para elegir tu notebook Al momento de elegir una nueva (o la primera) notebook muchos me consultan ¿cuál es la mejor? Es una pregunta simple pero que para cada uno tiene una respuesta diferente. Mi idea al responderla es siempre averiguar el uso que esa persona le dará a la notebook ya que en definitiva la mejor elección es la que se adapta a la vida de su usuario. Si estás buscando comprarte una nueva notebook yo te recomiendo hacer lo siguiente: Establece un presupuesto máximo . Es muy importante saber hasta cuánto puedes invertir, para mi un buen presupuesto no supera los $4000 (ARS) con un margen aceptable de $500 (ARS) Busca promociones o descuentos . Una muy buena opción a la hora de comprar es buscar los lugares que ofrecen descuentos o promociones con diferentes medios de pago esto te permitirá adquirir un buen producto a un mejor precio Elige tres marcas . De todos los fabricantes disponibles en el mercado  elige los tres que más te gusten por alguna de estas...