SlideShare una empresa de Scribd logo
Calidad
Clean code
Profesionalidad
Hacer lo correcto
Economics
¿POR QUÉ
HABLAMOS DE
ESTO?
WORKING EFFECTIVELY WITH LEGACY CODE
EDIT & PRAY
VS
COVER & MODIFY
1. Hay que planificar los cambios con mucho cuidado.
2. Entender el código que estamos modificando.
3. Empezar a realizar cambios.
4. Comprobar que TODO sigue funcionando.
5. Y repetir 3 o 4 veces todo hasta que sabemos que funciona.
EDIT & PRAY
•  Trabajar con feedback.
•  Escribir tests para describir el
comportamiento.
•  Preparar código para TDD (Refactoring).
•  TDD.
COVER AND MODIFY
1.  Identificar puntos de cambio
2.  Encontrar puntos donde se puede añadir tests
3.  Romper dependencias
4.  Escribir tests
5.  Hacer cambio/añadir feature y refactor
PASO A PASO
Depende del objetivo del desarrollo.
Pitch point.
Tests de caracterización.
¿CÓMO EMPEZAR?
SEAMS/COSTURAS
●  Detección: Para detectar identificar valores que
computa nuestro código y a los que no podemos
acceder.
●  Separación: Para poder introducir tests a una parte del
código que está acoplado.
¿POR QUÉ ROMPER DEPENDENCIAS?
DETECCIÓN/SEPARACIÓN
ESTRATEGIAS PARA
ROMPER
DEPENDENCIAS
La clase no puede ser instanciada en un entorno de test.
Hay una dependencia que es difícil de mockear o falsear.
No hay un punto de corte donde una dependencia
complicada pueda ser sustituida por un mock o fake.
PROBLEMAS QUE PODEMOS ENCONTRAR
Break Out Method Object
Expose Static Method
Parameterize Constructor
Pull up feature
Adapt Parameter
Extract Implementer
Extract Interface
Extract and Override Call
TÉCNICAS
Extract and Override Factory Method
Introduce Instance Delegator
Introduce Static Setter
Parameterize Constructor
Parameterize Method
Replace Global Reference with Getter
Supersede Instance Variable
Subclass and Override Method
SUBCLASS AND OVERRIDE.
EXTRACT INTERFACE AND PARAMETERIZE
CONSTRUCTOR.
ADAPT PARAMETER.
TÉCNICAS
SEAM & SUBCLASS AND OVERRIDE
EXTRACT INTERFACE AND PARAMETERIZE CONSTRUCTOR
ADAPT PARAMETER
¡No entiendo el código!
Leer muchas veces.
Hacer schemas/dibujos
Extraer métodos pequeños.
Scratch refactoring
¡NO ENTIENDO EL CÓDIGO!
Leer muchas veces.
Hacer schemas/dibujos
Extraer métodos pequeños.
Scratch refactoring
¡NO ENTIENDO EL CÓDIGO!
MY CLASS IS TOO BIG
Dividir responsabilidades.
Buscar métodos agrupados.
Buscar métodos ocultos.
Buscar acciones se pueden cambiar al mismo tiempo.
Buscar relaciones internas.
Buscar las responsabilidades de la clase.
Hacer scratch refactoring.
Centrarse en el trabajo actual.
MY CLASS IS TOO BIG
¡No tengo tiempo!
Sprout method
Sprout class
Wrap method
Wrap class
¡NO TENGO TIEMPO!
SPROUT METHOD
SPROUT METHOD
WRAP CLASS
WRAP CLASS
http://ptgmedia.pearsoncmg.com/images/9780131177055/samplepages/
0131177052.pdf
https://timhigh.wordpress.com/2008/08/15/legacy-code-bad-practices/
https://agilewarrior.wordpress.com/2011/05/05/working-effectively-with-
legacy-code/
http://codely.tv/screencasts/testear-codigo-acoplado/
http://craftedsw.blogspot.com.es/2011/07/testing-legacy-hard-wired-
dependencies.html
REFERENCIAS
Working effectively with legacy code

Más contenido relacionado

Similar a Working effectively with legacy code

Refactorización
RefactorizaciónRefactorización
Refactorización
David Santa
 
Encadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de DiseñoEncadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de Diseño
Hernan Wilkinson
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd intro
fperezplain
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Alfredo Chavez
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
Gabriel Moral
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Alfredo Chavez
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup
 
Refactoring code smelss
Refactoring   code smelssRefactoring   code smelss
Refactoring code smelss
Germán Küber
 
Tdd
TddTdd
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
Juan Jose Villar Ortuño
 
Trabajando con código heredado y ser feliz
Trabajando con código heredado y ser felizTrabajando con código heredado y ser feliz
Trabajando con código heredado y ser feliz
Diego Caballero
 
Desarrollo sistemas web con PHP, HTML5, GOOGLE MAPS
Desarrollo sistemas web con PHP, HTML5, GOOGLE MAPSDesarrollo sistemas web con PHP, HTML5, GOOGLE MAPS
Desarrollo sistemas web con PHP, HTML5, GOOGLE MAPS
Arturo CUBA TORRES
 
Metadata api en apex
Metadata api en apexMetadata api en apex
Metadata api en apex
Federico Giust
 
Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
Jesus Maria Escudero Justel
 
Haciendo de las pruebas tus mejores aliadas
Haciendo de las pruebas tus mejores aliadasHaciendo de las pruebas tus mejores aliadas
Haciendo de las pruebas tus mejores aliadas
Johanna Duque
 
Buenasprcticas
BuenasprcticasBuenasprcticas
Buenasprcticas
Juan Baudazio Sanchez
 
Escribiendo código T-SQL eficientemente
Escribiendo código T-SQL eficientementeEscribiendo código T-SQL eficientemente
Escribiendo código T-SQL eficientemente
Joseph Lopez
 
TDD talk
TDD talkTDD talk
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testing
Alberto Perdomo
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
Rodrigo Pimentel
 

Similar a Working effectively with legacy code (20)

Refactorización
RefactorizaciónRefactorización
Refactorización
 
Encadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de DiseñoEncadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de Diseño
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd intro
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Refactoring code smelss
Refactoring   code smelssRefactoring   code smelss
Refactoring code smelss
 
Tdd
TddTdd
Tdd
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Trabajando con código heredado y ser feliz
Trabajando con código heredado y ser felizTrabajando con código heredado y ser feliz
Trabajando con código heredado y ser feliz
 
Desarrollo sistemas web con PHP, HTML5, GOOGLE MAPS
Desarrollo sistemas web con PHP, HTML5, GOOGLE MAPSDesarrollo sistemas web con PHP, HTML5, GOOGLE MAPS
Desarrollo sistemas web con PHP, HTML5, GOOGLE MAPS
 
Metadata api en apex
Metadata api en apexMetadata api en apex
Metadata api en apex
 
Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
 
Haciendo de las pruebas tus mejores aliadas
Haciendo de las pruebas tus mejores aliadasHaciendo de las pruebas tus mejores aliadas
Haciendo de las pruebas tus mejores aliadas
 
Buenasprcticas
BuenasprcticasBuenasprcticas
Buenasprcticas
 
Escribiendo código T-SQL eficientemente
Escribiendo código T-SQL eficientementeEscribiendo código T-SQL eficientemente
Escribiendo código T-SQL eficientemente
 
TDD talk
TDD talkTDD talk
TDD talk
 
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testing
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 

Más de Biko

Guia Rapida Para Entender A La Generacion Z
Guia Rapida Para Entender A La Generacion ZGuia Rapida Para Entender A La Generacion Z
Guia Rapida Para Entender A La Generacion Z
Biko
 
De maquetador a componentizador React, ¿qué ha cambiado?
De maquetador a componentizador React, ¿qué ha cambiado?De maquetador a componentizador React, ¿qué ha cambiado?
De maquetador a componentizador React, ¿qué ha cambiado?
Biko
 
Narrativas Metafóricas
Narrativas MetafóricasNarrativas Metafóricas
Narrativas Metafóricas
Biko
 
¿Son los micropagos el nuevo mal?
¿Son los micropagos el nuevo mal?¿Son los micropagos el nuevo mal?
¿Son los micropagos el nuevo mal?
Biko
 
Tendencias para la venta experiencial 2017
Tendencias para la venta experiencial 2017Tendencias para la venta experiencial 2017
Tendencias para la venta experiencial 2017
Biko
 
Triplica la conversión de tu landing page
Triplica la conversión de tu landing pageTriplica la conversión de tu landing page
Triplica la conversión de tu landing page
Biko
 
Contribuir a drupal
Contribuir a drupalContribuir a drupal
Contribuir a drupal
Biko
 
Drupal 8: deploy capistrano y gestión de la configuración
Drupal 8: deploy capistrano y gestión de la configuraciónDrupal 8: deploy capistrano y gestión de la configuración
Drupal 8: deploy capistrano y gestión de la configuración
Biko
 
Introducción a Tag Manager
Introducción a Tag ManagerIntroducción a Tag Manager
Introducción a Tag Manager
Biko
 
Fields en drupal 8
Fields en drupal 8Fields en drupal 8
Fields en drupal 8
Biko
 
Amp - contenido instantáneo en móvil
Amp - contenido instantáneo en móvilAmp - contenido instantáneo en móvil
Amp - contenido instantáneo en móvil
Biko
 
Sesión de narrativa digital y proceso de descubrimiento en proyectos
Sesión de narrativa digital y proceso de descubrimiento en proyectosSesión de narrativa digital y proceso de descubrimiento en proyectos
Sesión de narrativa digital y proceso de descubrimiento en proyectos
Biko
 
Tendencias web en el sector agroalimentario
Tendencias web en el sector agroalimentarioTendencias web en el sector agroalimentario
Tendencias web en el sector agroalimentario
Biko
 
Realidad aumentada y Movilidad
Realidad aumentada y MovilidadRealidad aumentada y Movilidad
Realidad aumentada y Movilidad
Biko
 
Movilidad - Tendencias que cambiarán nuestras vidas
Movilidad - Tendencias que cambiarán nuestras vidasMovilidad - Tendencias que cambiarán nuestras vidas
Movilidad - Tendencias que cambiarán nuestras vidas
Biko
 
Webinar: Aterrizaje de proyectos digitales
Webinar: Aterrizaje de proyectos digitalesWebinar: Aterrizaje de proyectos digitales
Webinar: Aterrizaje de proyectos digitales
Biko
 
Aplicar Agile/Lean UX …y no morir en el intento
Aplicar Agile/Lean UX …y no morir en el intentoAplicar Agile/Lean UX …y no morir en el intento
Aplicar Agile/Lean UX …y no morir en el intento
Biko
 
Lo digital llega a nuestro mundo …y yo con estos pelos
Lo digital llega a nuestro mundo …y yo con estos pelosLo digital llega a nuestro mundo …y yo con estos pelos
Lo digital llega a nuestro mundo …y yo con estos pelos
Biko
 

Más de Biko (18)

Guia Rapida Para Entender A La Generacion Z
Guia Rapida Para Entender A La Generacion ZGuia Rapida Para Entender A La Generacion Z
Guia Rapida Para Entender A La Generacion Z
 
De maquetador a componentizador React, ¿qué ha cambiado?
De maquetador a componentizador React, ¿qué ha cambiado?De maquetador a componentizador React, ¿qué ha cambiado?
De maquetador a componentizador React, ¿qué ha cambiado?
 
Narrativas Metafóricas
Narrativas MetafóricasNarrativas Metafóricas
Narrativas Metafóricas
 
¿Son los micropagos el nuevo mal?
¿Son los micropagos el nuevo mal?¿Son los micropagos el nuevo mal?
¿Son los micropagos el nuevo mal?
 
Tendencias para la venta experiencial 2017
Tendencias para la venta experiencial 2017Tendencias para la venta experiencial 2017
Tendencias para la venta experiencial 2017
 
Triplica la conversión de tu landing page
Triplica la conversión de tu landing pageTriplica la conversión de tu landing page
Triplica la conversión de tu landing page
 
Contribuir a drupal
Contribuir a drupalContribuir a drupal
Contribuir a drupal
 
Drupal 8: deploy capistrano y gestión de la configuración
Drupal 8: deploy capistrano y gestión de la configuraciónDrupal 8: deploy capistrano y gestión de la configuración
Drupal 8: deploy capistrano y gestión de la configuración
 
Introducción a Tag Manager
Introducción a Tag ManagerIntroducción a Tag Manager
Introducción a Tag Manager
 
Fields en drupal 8
Fields en drupal 8Fields en drupal 8
Fields en drupal 8
 
Amp - contenido instantáneo en móvil
Amp - contenido instantáneo en móvilAmp - contenido instantáneo en móvil
Amp - contenido instantáneo en móvil
 
Sesión de narrativa digital y proceso de descubrimiento en proyectos
Sesión de narrativa digital y proceso de descubrimiento en proyectosSesión de narrativa digital y proceso de descubrimiento en proyectos
Sesión de narrativa digital y proceso de descubrimiento en proyectos
 
Tendencias web en el sector agroalimentario
Tendencias web en el sector agroalimentarioTendencias web en el sector agroalimentario
Tendencias web en el sector agroalimentario
 
Realidad aumentada y Movilidad
Realidad aumentada y MovilidadRealidad aumentada y Movilidad
Realidad aumentada y Movilidad
 
Movilidad - Tendencias que cambiarán nuestras vidas
Movilidad - Tendencias que cambiarán nuestras vidasMovilidad - Tendencias que cambiarán nuestras vidas
Movilidad - Tendencias que cambiarán nuestras vidas
 
Webinar: Aterrizaje de proyectos digitales
Webinar: Aterrizaje de proyectos digitalesWebinar: Aterrizaje de proyectos digitales
Webinar: Aterrizaje de proyectos digitales
 
Aplicar Agile/Lean UX …y no morir en el intento
Aplicar Agile/Lean UX …y no morir en el intentoAplicar Agile/Lean UX …y no morir en el intento
Aplicar Agile/Lean UX …y no morir en el intento
 
Lo digital llega a nuestro mundo …y yo con estos pelos
Lo digital llega a nuestro mundo …y yo con estos pelosLo digital llega a nuestro mundo …y yo con estos pelos
Lo digital llega a nuestro mundo …y yo con estos pelos
 

Último

primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
eliersin13
 
Introduccion al Lenguaje de Programación C++
Introduccion al Lenguaje de Programación  C++Introduccion al Lenguaje de Programación  C++
Introduccion al Lenguaje de Programación C++
PaulDelgadoSoto
 
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptxTARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
dayronfabricioruizmo
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
micarnavaltupatrimon
 
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
Maria Celeste Trujillo Cruz
 
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcelherramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
Eduardo455921
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
holabuscafiesta
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
micarnavaltupatrimon
 

Último (8)

primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
 
Introduccion al Lenguaje de Programación C++
Introduccion al Lenguaje de Programación  C++Introduccion al Lenguaje de Programación  C++
Introduccion al Lenguaje de Programación C++
 
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptxTARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
 
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
 
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcelherramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
herramientaswebpdfwww.edu.pe.edu.institutoluisevalcarcel
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
 

Working effectively with legacy code