Trabajando con código heredado y ser feliz

Post on 06-Dec-2014

85 views 0 download

description

Metodología para trabajar con código legacy y tratar de sobrevivir

Transcript of Trabajando con código heredado y ser feliz

Working with Legacy Code and Be Happy

Ing. Diego Caballero, CSM

Legacy Code• Definición académica:

• Código Viejo

• Con muchos años en producción

• Mucho mantenimiento y cambios

• Difícil de mantener

• Pero es EXITOSO

Legacy Code

• Si Homero fuera un programa, ¿sería fácil de mantener?

• No es código tan viejo

• ¿Qué hace que sea fácil o difícil de mantener?

Legacy Code

!

Todo código sin Testcases

¿Por qué cambia el software?

• Arreglar un bug

• Añadir un feature

• Mejorar Diseño

• Optimizar

¿Por qué cambia el software?

• Arreglar un bug

• Añadir un feature

• Mejorar Diseño

• OptimizarComportamiento Invariante

¿Por qué cambia el software?

• Arreglar un bug

• Añadir un feature

• Mejorar Diseño

• OptimizarComportamiento Invariante

Comportamiento Invariante

Hay que modificar Legacy Code. ¿Qué Hacer?

• Renunciar

• Hacer el sistema de vuelta

• Pagarle a otro para que lo haga

• Hacerlo nosotros

DIY

• Dos formas de trabajar:

• Edit and Pray (Estandar de facto)

• Cover and Modify

Cover and Modify• Legacy Code Change algorithm

1. Identificar Puntos cambios

2. Encontrar puntos de testing

3. Romper las dependencias

4. Escribir Tests

5. Hacer cambios y refactorear

Romper Dependencias

• Sensing

• Separation

Demo Sencilla

Seam

• Un punto del programa

• Donde se puede cambiar el comportamiento

• Sin modificar en ese punto

• Tiene un punto de activación

Tipos de Seam• Dependiente del leguaje

• Tipos más comunes

• De Preprocesador(c/c++)

• De Linkeado (Ejemplo)

• De Objetos

public  void  metodo(UnaClase  o){  

       int  i  =  o.doSomething();  

       o.PrintOnConsole();  

}  

Seam de Objeto

Herramientas

• xUnit

• Herramientas de Refactoring

• Analizadores Estáticos

• Frameworks de Mocks

Diferencias con TDD

• No derivamos diseño a través de pruebas

• No tienen por qué ser Test Unitarios

• Una vez que cubrimos, podemos aplicar TDD

Conclusiones

• Se puede trabajar código legado y ser feliz.

• Ser metódico.

• Tratar de aplicar siempre refactoring automático.