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.