SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
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 
• Optimizar 
Comportamiento Invariante
¿Por qué cambia el 
software? 
• Arreglar un bug 
• Añadir un feature 
• Mejorar Diseño 
• Optimizar 
Comportamiento 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.

Más contenido relacionado

Similar a Trabajando con código heredado y ser feliz

¿Te Sientes Orgulloso Del CóDigo Que Escribes?
¿Te Sientes Orgulloso Del CóDigo Que Escribes?¿Te Sientes Orgulloso Del CóDigo Que Escribes?
¿Te Sientes Orgulloso Del CóDigo Que Escribes?Israel Antezana Rojas
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simplepsluaces
 
"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturinowebcat
 
To mock or not to mock
To mock or not to mockTo mock or not to mock
To mock or not to mockEloi Poch
 
Módulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilMódulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilJohnny Ordóñez
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDLuis Alexander Aldazabal Gil
 
Meetup TestingUy 2018 - Selenium en la actualidad
Meetup TestingUy 2018 - Selenium en la actualidadMeetup TestingUy 2018 - Selenium en la actualidad
Meetup TestingUy 2018 - Selenium en la actualidadTestingUy
 
Functional programming Vol. 2
Functional programming Vol. 2Functional programming Vol. 2
Functional programming Vol. 2Gandhi Mena Salas
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development TechniquesEduardo Turiño
 
Refactorización
RefactorizaciónRefactorización
RefactorizaciónDavid Santa
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilagilenavarra
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
 

Similar a Trabajando con código heredado y ser feliz (20)

¿Te Sientes Orgulloso Del CóDigo Que Escribes?
¿Te Sientes Orgulloso Del CóDigo Que Escribes?¿Te Sientes Orgulloso Del CóDigo Que Escribes?
¿Te Sientes Orgulloso Del CóDigo Que Escribes?
 
Tdd desde las trincheras
Tdd desde las trincherasTdd desde las trincheras
Tdd desde las trincheras
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simple
 
Integración Continua
Integración ContinuaIntegración Continua
Integración Continua
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino"Demystifying development techniques" por @eturino
"Demystifying development techniques" por @eturino
 
To mock or not to mock
To mock or not to mockTo mock or not to mock
To mock or not to mock
 
Módulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágilMódulo 4. Desarrollador ágil
Módulo 4. Desarrollador ágil
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLID
 
Esto es ingeniería inversa
Esto es ingeniería inversaEsto es ingeniería inversa
Esto es ingeniería inversa
 
Meetup TestingUy 2018 - Selenium en la actualidad
Meetup TestingUy 2018 - Selenium en la actualidadMeetup TestingUy 2018 - Selenium en la actualidad
Meetup TestingUy 2018 - Selenium en la actualidad
 
Meetup TestingUY 2018 - Selenium en la actualidad
Meetup TestingUY 2018 - Selenium en la actualidadMeetup TestingUY 2018 - Selenium en la actualidad
Meetup TestingUY 2018 - Selenium en la actualidad
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
 
Functional programming Vol. 2
Functional programming Vol. 2Functional programming Vol. 2
Functional programming Vol. 2
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques
 
Optimizacion de software
Optimizacion de softwareOptimizacion de software
Optimizacion de software
 
Refactorización
RefactorizaciónRefactorización
Refactorización
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvil
 
Capitulo 2
Capitulo 2Capitulo 2
Capitulo 2
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 

Último

CLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilCLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilDissneredwinPaivahua
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para PlataformasSegundo Silva Maguiña
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfIsbelRodrguez
 
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxTEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxYEDSONJACINTOBUSTAMA
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaXjoseantonio01jossed
 
Descubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialDescubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialyajhairatapia
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxLuisvila35
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEANDECE
 
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfCENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfpaola110264
 
Electromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfElectromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfAnonymous0pBRsQXfnx
 
3.3 Tipos de conexiones en los transformadores trifasicos.pdf
3.3 Tipos de conexiones en los transformadores trifasicos.pdf3.3 Tipos de conexiones en los transformadores trifasicos.pdf
3.3 Tipos de conexiones en los transformadores trifasicos.pdfRicardoRomeroUrbano
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Francisco Javier Mora Serrano
 
Físicas 1: Ecuaciones Dimensionales y Vectores
Físicas 1: Ecuaciones Dimensionales y VectoresFísicas 1: Ecuaciones Dimensionales y Vectores
Físicas 1: Ecuaciones Dimensionales y VectoresSegundo Silva Maguiña
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIAMayraOchoa35
 
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...esandoval7
 
Fisiología del azufre en plantas S.S.pdf
Fisiología del azufre en plantas S.S.pdfFisiología del azufre en plantas S.S.pdf
Fisiología del azufre en plantas S.S.pdfJessLeonelVargasJimn
 
3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptxJhordanGonzalo
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
PRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciaPRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciazacariasd49
 

Último (20)

CLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civilCLASE - 01 de construcción 1 ingeniería civil
CLASE - 01 de construcción 1 ingeniería civil
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para Plataformas
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdf
 
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxTEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
 
Descubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialDescubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundial
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSE
 
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdfCENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
CENTROIDES Y MOMENTOS DE INERCIA DE AREAS PLANAS.pdf
 
Electromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfElectromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdf
 
3.3 Tipos de conexiones en los transformadores trifasicos.pdf
3.3 Tipos de conexiones en los transformadores trifasicos.pdf3.3 Tipos de conexiones en los transformadores trifasicos.pdf
3.3 Tipos de conexiones en los transformadores trifasicos.pdf
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
 
Físicas 1: Ecuaciones Dimensionales y Vectores
Físicas 1: Ecuaciones Dimensionales y VectoresFísicas 1: Ecuaciones Dimensionales y Vectores
Físicas 1: Ecuaciones Dimensionales y Vectores
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
 
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
 
Fisiología del azufre en plantas S.S.pdf
Fisiología del azufre en plantas S.S.pdfFisiología del azufre en plantas S.S.pdf
Fisiología del azufre en plantas S.S.pdf
 
3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
PRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potenciaPRESENTACION DE CLASE. Factor de potencia
PRESENTACION DE CLASE. Factor de potencia
 

Trabajando con código heredado y ser feliz

  • 1. Working with Legacy Code and Be Happy Ing. Diego Caballero, CSM
  • 2. 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
  • 3. 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?
  • 4. Legacy Code ! Todo código sin Testcases
  • 5. ¿Por qué cambia el software? • Arreglar un bug • Añadir un feature • Mejorar Diseño • Optimizar
  • 6. ¿Por qué cambia el software? • Arreglar un bug • Añadir un feature • Mejorar Diseño • Optimizar Comportamiento Invariante
  • 7. ¿Por qué cambia el software? • Arreglar un bug • Añadir un feature • Mejorar Diseño • Optimizar Comportamiento Invariante Comportamiento Invariante
  • 8. Hay que modificar Legacy Code. ¿Qué Hacer? • Renunciar • Hacer el sistema de vuelta • Pagarle a otro para que lo haga • Hacerlo nosotros
  • 9. DIY • Dos formas de trabajar: • Edit and Pray (Estandar de facto) • Cover and Modify
  • 10. 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
  • 11. Romper Dependencias • Sensing • Separation Demo Sencilla
  • 12. Seam • Un punto del programa • Donde se puede cambiar el comportamiento • Sin modificar en ese punto • Tiene un punto de activación
  • 13. Tipos de Seam • Dependiente del leguaje • Tipos más comunes • De Preprocesador(c/c++) • De Linkeado (Ejemplo) • De Objetos
  • 14. public void metodo(UnaClase o){ int i = o.doSomething(); o.PrintOnConsole(); } Seam de Objeto
  • 15. Herramientas • xUnit • Herramientas de Refactoring • Analizadores Estáticos • Frameworks de Mocks
  • 16. 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
  • 17. Conclusiones • Se puede trabajar código legado y ser feliz. • Ser metódico. • Tratar de aplicar siempre refactoring automático.