SlideShare ist ein Scribd-Unternehmen logo
1 von 50
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

Weitere ähnliche Inhalte

Ähnlich wie Working effectively with legacy code

Refactorización
RefactorizaciónRefactorización
RefactorizaciónDavid 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ñoHernan Wilkinson
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd introfperezplain
 
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/2012Alfredo Chavez
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando softwareGabriel 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/2012Alfredo 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 smelssGermán Küber
 
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 felizDiego 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 MAPSArturo CUBA TORRES
 
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 aliadasJohanna Duque
 
Escribiendo código T-SQL eficientemente
Escribiendo código T-SQL eficientementeEscribiendo código T-SQL eficientemente
Escribiendo código T-SQL eficientementeJoseph Lopez
 
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 testingAlberto Perdomo
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 

Ähnlich wie 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
 

Mehr von 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 ZBiko
 
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óricasBiko
 
¿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 2017Biko
 
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 pageBiko
 
Contribuir a drupal
Contribuir a drupalContribuir a drupal
Contribuir a drupalBiko
 
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ónBiko
 
Introducción a Tag Manager
Introducción a Tag ManagerIntroducción a Tag Manager
Introducción a Tag ManagerBiko
 
Fields en drupal 8
Fields en drupal 8Fields en drupal 8
Fields en drupal 8Biko
 
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óvilBiko
 
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 proyectosBiko
 
Tendencias web en el sector agroalimentario
Tendencias web en el sector agroalimentarioTendencias web en el sector agroalimentario
Tendencias web en el sector agroalimentarioBiko
 
Realidad aumentada y Movilidad
Realidad aumentada y MovilidadRealidad aumentada y Movilidad
Realidad aumentada y MovilidadBiko
 
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 vidasBiko
 
Webinar: Aterrizaje de proyectos digitales
Webinar: Aterrizaje de proyectos digitalesWebinar: Aterrizaje de proyectos digitales
Webinar: Aterrizaje de proyectos digitalesBiko
 
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 intentoBiko
 
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 pelosBiko
 

Mehr von 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
 

Working effectively with legacy code