Imagen de: Picasa Web Albums |
Una de las técnicas más importantes en el desarrollo ágil de software y en particular del Test Driven Development (TDD) es la Refactorización, la cual consiste en hacer modificaciones al código existente para mejorar su diseño de forma tal que no afecte su comportamiento externo.
Está técnica es la que permite implementar en la práctica uno de los valores de la programación extrema (XP) y del desarrollo ágil de software que es la simplicidad.
En este artículo se describe el concepto de refactorización, razones para aplicarlo, tipos de refactorizaciones, beneficios, lo que la práctica permite hacer, entre otros aspectos.
¿Cuales son los tipos de refactorización?
¿Como se determina que Refactorizar?
La Refactorización se ejecuta cuando se identifican áreas que necesitan mejora en la versión actual de un software o componente, las cuales por lo general resultan de inspecciones de código o del diseño.
Si, en efecto, existe mucha información en la literatura y en la web sobre anti patrones conocidos y los patrones que servirán para solucionar problemas comunes.
Les invitamos a participar en la conversación sobre Refactorización el el foro de nuestra Web “La Oficina de Proyectos de Informática” (http://www.pmoinformatica.com). ¿Que opina usted de la refactorización?, ¿Ha intentado aplicar esta técnica?, ¿Cuales fueron los resultados?, ¿Que cambios aplicó luego de su primera experiencia?.
Les invitamos a suscribirse al blog por los distintos canales, incluyendo lista de correo electrónico, al Twitter @PMOInformatica, a nuestra página de Facebook o al feed RSS.
<< Artículo anterior: TDD Componentes dificiles de probar
¿Desea obtener más información?
Consulte otros artículos de la serie de "Test Driven Development" (TDD).
>> TDD: Componentes difíciles de probar
>> Test Driven Development (TDD): Pruebas del desarrollador
>> Test Driven Development (TDD): Como llevarlo a la práctica
>> Test Driven Development (TDD): Ventajas y desventajas
>> Test Driven Development (TDD): 9 retos para su implementación y cómo hacerles frente
Referencia
Otros artículos en “La Oficina de Proyectos de Informática”
Desarrollo ágil, Scrum y Test Driven Development
>> 5 Preguntas y respuestas sobre el Feature Driven Development (FDD)
>> Plantillas Scrum: historias de usuario y criterios de aceptación
>> Scrum de Scrum: Desarrollo ágil para grandes proyectos
>> 5 métricas de desempeño para proyectos de desarrollo ágil y Scrum
>> Herramientas de software para gestión de proyectos de desarrollo ágil
>> El Desarrollo ágil en un entorno de fechas y presupuestos predefinidos
>> Los Programas de Certificación del Scrum Alliance
>> Preguntas y respuestas sobre Scrum Alliance
>> Gestión de Proyectos PMI y el Desarrollo Ágil: ¿Que tienen en común?
>> Metodologías de desarrollo ágil
Presentamos a continuación el artículo sobre Refactorización:
Por definición, la refactorización se ejecuta para mejorar los aspectos no funcionales de un programa o software, para mejorarlo, optimizarlo, facilitar el mantenimiento y escalabilidad, esto sin agregar ni quitar ninguna funcionalidad para el usuario final.
Al aplicar esta técnica en el contexto del desarrollo ágil de software, por ejemplo al aplicar un enfoque de Programación Extrema (XP), o más en particular el Test Driven Development (TDD), en una iteración dada, se desarrolla el código que cubre unicamente las necesidades actuales, si en el futuro se determina que es necesario una modificación de código para garantizar la escalabilidad y el mantenimiento, esto se hace por medio de una Refactorización.
Más información sobre XP y TDD en los siguientes enlaces:
- Refactorización de código: El tipo de refactorización más conocidio, que comprende la refactorización de código fuente.
- Refactorización de base de datos: Cambios en el esquema (Schema) de base de datos que mejoran su diseño.
- Refactorización de Interfaz de usuario: Cambios de estandarización de la presentación, manteniendo la funcionalidad, por ejemplo alinear campos, alinear tamaños de botones, entre otros.
¿Como se determina que Refactorizar?
La Refactorización se ejecuta cuando se identifican áreas que necesitan mejora en la versión actual de un software o componente, las cuales por lo general resultan de inspecciones de código o del diseño.
Algunos ejemplos de estos defectos que requieren mejora son: Código duplicado, Elementos de diseño o métodos muy extensos, Nombre inadecuado para un elemento y Acoplamiento.
Para mayor información sobre este tema, les invitamos a consultar nuestra serie sobre anti patrones de desarrollo de software y base de datos, por medio de los siguientes enlaces.
>> Entrada de datos manejada inadecuadamente (Input Kludge)
>> El botón mágico
>> El Objeto Todopoderoso
>> Errores comunes en el desarrollo de Bases de datos: Tercera Parte
>> Errores comunes en el desarrollo de Bases de datos: Segunda Parte
>> Errores comunes en el desarrollo de Bases de datos
>> Errores comunes de programación: Segunda Parte
>> 5 errores comunes de programación
>> El botón mágico
>> El Objeto Todopoderoso
>> Errores comunes en el desarrollo de Bases de datos: Tercera Parte
>> Errores comunes en el desarrollo de Bases de datos: Segunda Parte
>> Errores comunes en el desarrollo de Bases de datos
>> Errores comunes de programación: Segunda Parte
>> 5 errores comunes de programación
Muchos de los defectos que se buscan mejorar por medio de la refactorización tienen que ver con código que hacen que el software sea más difícil de entender, con la finalidad de hacer el sistema más simple.
¿Existen patrones para realizar Refactorizaciones?
Para los cuatro casos presentados anteriormente, las refactorizaciones a aplicar son: Extraer método, Extraer clase, Renombrar elemento y Extraer intefaz.
¿Que pruebas deben hacerse cuando se realiza una refactorización?
Para aplicar una Refactorización de manera segura, es crítico que el comportamiento del sistema sea conocido y verificado antes de aplicar la modificación, con la finalidad que se pueda mejorar el sistema si temor a que este deje de funcionar adecuadamente. Para ello, se requiere aplicar un conjunto completo de pruebas en ambiente de desarrollo antes de aplicar la modificación.
Luego de aplicar la Refactorización, las pruebas en ambiente de desarrollo se ejecutan de nuevo, asegurando el comportamiento adecuado. Es importante que estas pruebas se realicen después de aplicar cada Refactorización pequeña, evitando aplicar muchas Refactorizaciones sin probar. Esto asegura que en caso de error, se conocerá específicamente cual modificación de código lo ocasiono.
¿Que otras técnicas facilitan la Refactorización?
Existen otras técnicas que facilitan una mejor refactorización, como lo es la definición de estándares de codificación, los cuales permiten que las refactorizaciones se hagan de forma consistente.
Asimismo, es importante que el equipo de desarrollo entienda que la propiedad del código es colectiva y no individual, y deben saber que la refactorización se puede aplicar en toda la base de código para mejorar la implementación.
¿Y que opina usted?
Les invitamos a participar en la conversación sobre Refactorización el el foro de nuestra Web “La Oficina de Proyectos de Informática” (http://www.pmoinformatica.com). ¿Que opina usted de la refactorización?, ¿Ha intentado aplicar esta técnica?, ¿Cuales fueron los resultados?, ¿Que cambios aplicó luego de su primera experiencia?.
Les invitamos a suscribirse al blog por los distintos canales, incluyendo lista de correo electrónico, al Twitter @PMOInformatica, a nuestra página de Facebook o al feed RSS.
<< Artículo anterior: TDD Componentes dificiles de probar
¿Desea obtener más información?
Consulte otros artículos de la serie de "Test Driven Development" (TDD).
>> TDD: Componentes difíciles de probar
>> Test Driven Development (TDD): Pruebas del desarrollador
>> Test Driven Development (TDD): Como llevarlo a la práctica
>> Test Driven Development (TDD): Ventajas y desventajas
>> Test Driven Development (TDD): 9 retos para su implementación y cómo hacerles frente
Referencia
Otros artículos en “La Oficina de Proyectos de Informática”
Desarrollo ágil, Scrum y Test Driven Development
>> 5 Preguntas y respuestas sobre el Feature Driven Development (FDD)
>> Plantillas Scrum: historias de usuario y criterios de aceptación
>> Scrum de Scrum: Desarrollo ágil para grandes proyectos
>> 5 métricas de desempeño para proyectos de desarrollo ágil y Scrum
>> Herramientas de software para gestión de proyectos de desarrollo ágil
>> El Desarrollo ágil en un entorno de fechas y presupuestos predefinidos
>> Los Programas de Certificación del Scrum Alliance
>> Preguntas y respuestas sobre Scrum Alliance
>> Gestión de Proyectos PMI y el Desarrollo Ágil: ¿Que tienen en común?
>> Metodologías de desarrollo ágil
buen articulo, gracias
ResponderEliminar