SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
TDD
                                GUIA DE SUPERVIVENCIA




                       Un relato de horrores... by @AlfredoCasado

martes 1 de noviembre de 2011
Un poco de contexto...

                        Desarrollo de producto

                        Media de 4 desarrolladores muy motivados

                        Sin experiencia con TDD

                        JAVA (aka the new cobol)

                        Muchas lineas, más de 200k (test incluidos)

martes 1 de noviembre de 2011
martes 1 de noviembre de 2011
martes 1 de noviembre de 2011
martes 1 de noviembre de 2011
PRIMER HORROR
                                ¡Rojo significa que te pares!




martes 1 de noviembre de 2011
PRIMER HORROR


                                COMMIT AND...


                                                RUN!!


martes 1 de noviembre de 2011
SEGUNDO HORROR
                                La obsesión unitaria

                                           mock
                                    mock          mock


                                  mock     SUT       mock


                                                  mock
                                    mock
                                           mock




martes 1 de noviembre de 2011
SEGUNDO HORROR
                Sólo es un problema... cuando no sabes programar
                          Mucho acoplamiento => demasiados mocks

                          ¿ley de demeter?, ¿de quien? => mocks que devuelven mocks que devuelven mocks...

                          Depender de abstracciones al extremo => una interfaz, una implementación

                          No escuchar a tus test => si el test se complica demasiado... revisa tu diseño.

                          Escribir estos test despues del código => SUICIDIO.




martes 1 de noviembre de 2011
TERCER HORROR
                                Mis test se parecen mucho...
                                  (duplicación primer capitulo)




martes 1 de noviembre de 2011
TERCER HORROR
                                   duplicación de fixtures
                                En test de integración o end-to-end




martes 1 de noviembre de 2011
TERCER HORROR
                                Solución aceptable: @Rules (JUnit 4.7+)




martes 1 de noviembre de 2011
CUARTO HORROR
                                duplicación segundo capitulo

   Mismo API debe soportar varias versiones de un esquema
                     de base de datos

                                                      Esquema v1.0


                                 App       API
                                Cliente
                                                      Esquema v1.1




martes 1 de noviembre de 2011
CUARTO HORROR
                                   ¿Herencia?




martes 1 de noviembre de 2011
CUARTO HORROR
                    Extendiendo JUnit con nuestro propio runner




 El test se ejecutará dos veces, una para cada versión de base
                            de datos.



martes 1 de noviembre de 2011
QUINTO HORROR
                                Ficheros con datos de test, ¡gran idea!




martes 1 de noviembre de 2011
QUINTO HORROR
           Test que no tienen given




                                        Test data builder




martes 1 de noviembre de 2011
SEXTO HORROR
                                ¿Donde están mis test?




martes 1 de noviembre de 2011
SEXTO HORROR
                                Con los test unitarios es fácil

               ¿Los de integración donde van?, ¿y los funcionales?

          ¿organizar por sprints?, ¿por funcionalidad?, ¿test que
         resuelven bugs aparte?, ¿en el mismo proyecto?, ¿en un
                          proyecto para test?




martes 1 de noviembre de 2011
SEPTIMO HORROR
                        pedazo de UI, y ahora vas y lo pruebas...




martes 1 de noviembre de 2011
OCTAVO HORROR
                         ¿No llevarás prisa?, el build tarda un ratito...
                                           reloj o algo similar




martes 1 de noviembre de 2011
NOVENO HORROR
                                 ¿doctor que me pasa?
                                      un doctor, incluso el
                                      doctor de los simpson?

                                                                usted tiene una...
                                                               NullPointerException!




martes 1 de noviembre de 2011
NOVENO HORROR
                                Los test se diseñan para fallar




martes 1 de noviembre de 2011
NOVENO HORROR
                                Las excepciones hay que capturarlas!




martes 1 de noviembre de 2011
DECIMO HORROR
                     ¿Que probará este test?
         Esto lo único que “prueba” es que no sabes hacer test




martes 1 de noviembre de 2011
DECIMO HORROR




                                ¿No falta algo?, ¿y los assert?



martes 1 de noviembre de 2011
Terminando:

                                TDD no es un fin, es un camino. No se si hemos avanzado mucho o poco, pero si se
                                que estamos muy lejos de donde empezamos y más lejos aún de donde
                                terminaremos llegando.



                                La mejora continua no acaba con las “retrospectivas”, empieza con las
                                retrospectivas y acaba con las manos en el teclado.




martes 1 de noviembre de 2011

Weitere ähnliche Inhalte

Mehr von Agile Spain

Análisis de la implementación de prácticas ágiles en Argentina
Análisis de la implementación de prácticas ágiles en ArgentinaAnálisis de la implementación de prácticas ágiles en Argentina
Análisis de la implementación de prácticas ágiles en ArgentinaAgile Spain
 
Como cocinar tu contrato ágil
Como cocinar tu contrato ágilComo cocinar tu contrato ágil
Como cocinar tu contrato ágilAgile Spain
 
Introducción a la agilidad
Introducción a la agilidadIntroducción a la agilidad
Introducción a la agilidadAgile Spain
 
Cas2010 desarrollo-de-aplicaciones-en-la-nube-con-scrum-y-xp
Cas2010 desarrollo-de-aplicaciones-en-la-nube-con-scrum-y-xpCas2010 desarrollo-de-aplicaciones-en-la-nube-con-scrum-y-xp
Cas2010 desarrollo-de-aplicaciones-en-la-nube-con-scrum-y-xpAgile Spain
 
Cas2010 gestion-agil-de-la-configuracion
Cas2010 gestion-agil-de-la-configuracionCas2010 gestion-agil-de-la-configuracion
Cas2010 gestion-agil-de-la-configuracionAgile Spain
 
Cas2010 itinerario-implementacion-agil
Cas2010 itinerario-implementacion-agilCas2010 itinerario-implementacion-agil
Cas2010 itinerario-implementacion-agilAgile Spain
 
Cas2010 gestion-agil-de-equipos
Cas2010 gestion-agil-de-equiposCas2010 gestion-agil-de-equipos
Cas2010 gestion-agil-de-equiposAgile Spain
 
Cas2010 integrando-practicas-agiles-y-de-experiencia-de-usuario
Cas2010 integrando-practicas-agiles-y-de-experiencia-de-usuarioCas2010 integrando-practicas-agiles-y-de-experiencia-de-usuario
Cas2010 integrando-practicas-agiles-y-de-experiencia-de-usuarioAgile Spain
 
Cas2010 toolchain-for-agile-teams-traceability-from-product-vision-to-working...
Cas2010 toolchain-for-agile-teams-traceability-from-product-vision-to-working...Cas2010 toolchain-for-agile-teams-traceability-from-product-vision-to-working...
Cas2010 toolchain-for-agile-teams-traceability-from-product-vision-to-working...Agile Spain
 
Cas2010 los-principios-agiles-como-guia-o-por-que-querras-volver-a-modelos-tr...
Cas2010 los-principios-agiles-como-guia-o-por-que-querras-volver-a-modelos-tr...Cas2010 los-principios-agiles-como-guia-o-por-que-querras-volver-a-modelos-tr...
Cas2010 los-principios-agiles-como-guia-o-por-que-querras-volver-a-modelos-tr...Agile Spain
 
Cas2010 to-track-defects-or-not-to-track-defects-that-is-the-question
Cas2010 to-track-defects-or-not-to-track-defects-that-is-the-questionCas2010 to-track-defects-or-not-to-track-defects-that-is-the-question
Cas2010 to-track-defects-or-not-to-track-defects-that-is-the-questionAgile Spain
 
Cas2010 is-there-space-for-testers-in-agile-projects
Cas2010 is-there-space-for-testers-in-agile-projectsCas2010 is-there-space-for-testers-in-agile-projects
Cas2010 is-there-space-for-testers-in-agile-projectsAgile Spain
 
Cas2010 one-year-of-software-developments-to-win-a-world-racing-championship
Cas2010 one-year-of-software-developments-to-win-a-world-racing-championshipCas2010 one-year-of-software-developments-to-win-a-world-racing-championship
Cas2010 one-year-of-software-developments-to-win-a-world-racing-championshipAgile Spain
 
Cas2010 pair-programming-strategies
Cas2010 pair-programming-strategiesCas2010 pair-programming-strategies
Cas2010 pair-programming-strategiesAgile Spain
 
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automationCas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automationAgile Spain
 
Cas2010 herramientas-de-pruebas-unitarias-pex-y-moles
Cas2010 herramientas-de-pruebas-unitarias-pex-y-molesCas2010 herramientas-de-pruebas-unitarias-pex-y-moles
Cas2010 herramientas-de-pruebas-unitarias-pex-y-molesAgile Spain
 
Ser ágil en España, un caso real con equipos de trabajo en remoto
Ser ágil en España, un caso real con equipos de trabajo en remotoSer ágil en España, un caso real con equipos de trabajo en remoto
Ser ágil en España, un caso real con equipos de trabajo en remotoAgile Spain
 
Cuore.js: Una historia de amor
Cuore.js: Una historia de amorCuore.js: Una historia de amor
Cuore.js: Una historia de amorAgile Spain
 
Stop the line & Stop Feature Development practices
Stop the line & Stop Feature Development practicesStop the line & Stop Feature Development practices
Stop the line & Stop Feature Development practicesAgile Spain
 
Cosas que te dije o cómo tragar la pastilla roja sin agua
Cosas que te dije o cómo tragar la pastilla roja sin aguaCosas que te dije o cómo tragar la pastilla roja sin agua
Cosas que te dije o cómo tragar la pastilla roja sin aguaAgile Spain
 

Mehr von Agile Spain (20)

Análisis de la implementación de prácticas ágiles en Argentina
Análisis de la implementación de prácticas ágiles en ArgentinaAnálisis de la implementación de prácticas ágiles en Argentina
Análisis de la implementación de prácticas ágiles en Argentina
 
Como cocinar tu contrato ágil
Como cocinar tu contrato ágilComo cocinar tu contrato ágil
Como cocinar tu contrato ágil
 
Introducción a la agilidad
Introducción a la agilidadIntroducción a la agilidad
Introducción a la agilidad
 
Cas2010 desarrollo-de-aplicaciones-en-la-nube-con-scrum-y-xp
Cas2010 desarrollo-de-aplicaciones-en-la-nube-con-scrum-y-xpCas2010 desarrollo-de-aplicaciones-en-la-nube-con-scrum-y-xp
Cas2010 desarrollo-de-aplicaciones-en-la-nube-con-scrum-y-xp
 
Cas2010 gestion-agil-de-la-configuracion
Cas2010 gestion-agil-de-la-configuracionCas2010 gestion-agil-de-la-configuracion
Cas2010 gestion-agil-de-la-configuracion
 
Cas2010 itinerario-implementacion-agil
Cas2010 itinerario-implementacion-agilCas2010 itinerario-implementacion-agil
Cas2010 itinerario-implementacion-agil
 
Cas2010 gestion-agil-de-equipos
Cas2010 gestion-agil-de-equiposCas2010 gestion-agil-de-equipos
Cas2010 gestion-agil-de-equipos
 
Cas2010 integrando-practicas-agiles-y-de-experiencia-de-usuario
Cas2010 integrando-practicas-agiles-y-de-experiencia-de-usuarioCas2010 integrando-practicas-agiles-y-de-experiencia-de-usuario
Cas2010 integrando-practicas-agiles-y-de-experiencia-de-usuario
 
Cas2010 toolchain-for-agile-teams-traceability-from-product-vision-to-working...
Cas2010 toolchain-for-agile-teams-traceability-from-product-vision-to-working...Cas2010 toolchain-for-agile-teams-traceability-from-product-vision-to-working...
Cas2010 toolchain-for-agile-teams-traceability-from-product-vision-to-working...
 
Cas2010 los-principios-agiles-como-guia-o-por-que-querras-volver-a-modelos-tr...
Cas2010 los-principios-agiles-como-guia-o-por-que-querras-volver-a-modelos-tr...Cas2010 los-principios-agiles-como-guia-o-por-que-querras-volver-a-modelos-tr...
Cas2010 los-principios-agiles-como-guia-o-por-que-querras-volver-a-modelos-tr...
 
Cas2010 to-track-defects-or-not-to-track-defects-that-is-the-question
Cas2010 to-track-defects-or-not-to-track-defects-that-is-the-questionCas2010 to-track-defects-or-not-to-track-defects-that-is-the-question
Cas2010 to-track-defects-or-not-to-track-defects-that-is-the-question
 
Cas2010 is-there-space-for-testers-in-agile-projects
Cas2010 is-there-space-for-testers-in-agile-projectsCas2010 is-there-space-for-testers-in-agile-projects
Cas2010 is-there-space-for-testers-in-agile-projects
 
Cas2010 one-year-of-software-developments-to-win-a-world-racing-championship
Cas2010 one-year-of-software-developments-to-win-a-world-racing-championshipCas2010 one-year-of-software-developments-to-win-a-world-racing-championship
Cas2010 one-year-of-software-developments-to-win-a-world-racing-championship
 
Cas2010 pair-programming-strategies
Cas2010 pair-programming-strategiesCas2010 pair-programming-strategies
Cas2010 pair-programming-strategies
 
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automationCas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
Cas2010 behavior-driven-development-aplicado-en-acceptance-test-automation
 
Cas2010 herramientas-de-pruebas-unitarias-pex-y-moles
Cas2010 herramientas-de-pruebas-unitarias-pex-y-molesCas2010 herramientas-de-pruebas-unitarias-pex-y-moles
Cas2010 herramientas-de-pruebas-unitarias-pex-y-moles
 
Ser ágil en España, un caso real con equipos de trabajo en remoto
Ser ágil en España, un caso real con equipos de trabajo en remotoSer ágil en España, un caso real con equipos de trabajo en remoto
Ser ágil en España, un caso real con equipos de trabajo en remoto
 
Cuore.js: Una historia de amor
Cuore.js: Una historia de amorCuore.js: Una historia de amor
Cuore.js: Una historia de amor
 
Stop the line & Stop Feature Development practices
Stop the line & Stop Feature Development practicesStop the line & Stop Feature Development practices
Stop the line & Stop Feature Development practices
 
Cosas que te dije o cómo tragar la pastilla roja sin agua
Cosas que te dije o cómo tragar la pastilla roja sin aguaCosas que te dije o cómo tragar la pastilla roja sin agua
Cosas que te dije o cómo tragar la pastilla roja sin agua
 

TDD, Una guía de supervivencia

  • 1. TDD GUIA DE SUPERVIVENCIA Un relato de horrores... by @AlfredoCasado martes 1 de noviembre de 2011
  • 2. Un poco de contexto... Desarrollo de producto Media de 4 desarrolladores muy motivados Sin experiencia con TDD JAVA (aka the new cobol) Muchas lineas, más de 200k (test incluidos) martes 1 de noviembre de 2011
  • 3. martes 1 de noviembre de 2011
  • 4. martes 1 de noviembre de 2011
  • 5. martes 1 de noviembre de 2011
  • 6. PRIMER HORROR ¡Rojo significa que te pares! martes 1 de noviembre de 2011
  • 7. PRIMER HORROR COMMIT AND... RUN!! martes 1 de noviembre de 2011
  • 8. SEGUNDO HORROR La obsesión unitaria mock mock mock mock SUT mock mock mock mock martes 1 de noviembre de 2011
  • 9. SEGUNDO HORROR Sólo es un problema... cuando no sabes programar Mucho acoplamiento => demasiados mocks ¿ley de demeter?, ¿de quien? => mocks que devuelven mocks que devuelven mocks... Depender de abstracciones al extremo => una interfaz, una implementación No escuchar a tus test => si el test se complica demasiado... revisa tu diseño. Escribir estos test despues del código => SUICIDIO. martes 1 de noviembre de 2011
  • 10. TERCER HORROR Mis test se parecen mucho... (duplicación primer capitulo) martes 1 de noviembre de 2011
  • 11. TERCER HORROR duplicación de fixtures En test de integración o end-to-end martes 1 de noviembre de 2011
  • 12. TERCER HORROR Solución aceptable: @Rules (JUnit 4.7+) martes 1 de noviembre de 2011
  • 13. CUARTO HORROR duplicación segundo capitulo Mismo API debe soportar varias versiones de un esquema de base de datos Esquema v1.0 App API Cliente Esquema v1.1 martes 1 de noviembre de 2011
  • 14. CUARTO HORROR ¿Herencia? martes 1 de noviembre de 2011
  • 15. CUARTO HORROR Extendiendo JUnit con nuestro propio runner El test se ejecutará dos veces, una para cada versión de base de datos. martes 1 de noviembre de 2011
  • 16. QUINTO HORROR Ficheros con datos de test, ¡gran idea! martes 1 de noviembre de 2011
  • 17. QUINTO HORROR Test que no tienen given Test data builder martes 1 de noviembre de 2011
  • 18. SEXTO HORROR ¿Donde están mis test? martes 1 de noviembre de 2011
  • 19. SEXTO HORROR Con los test unitarios es fácil ¿Los de integración donde van?, ¿y los funcionales? ¿organizar por sprints?, ¿por funcionalidad?, ¿test que resuelven bugs aparte?, ¿en el mismo proyecto?, ¿en un proyecto para test? martes 1 de noviembre de 2011
  • 20. SEPTIMO HORROR pedazo de UI, y ahora vas y lo pruebas... martes 1 de noviembre de 2011
  • 21. OCTAVO HORROR ¿No llevarás prisa?, el build tarda un ratito... reloj o algo similar martes 1 de noviembre de 2011
  • 22. NOVENO HORROR ¿doctor que me pasa? un doctor, incluso el doctor de los simpson? usted tiene una... NullPointerException! martes 1 de noviembre de 2011
  • 23. NOVENO HORROR Los test se diseñan para fallar martes 1 de noviembre de 2011
  • 24. NOVENO HORROR Las excepciones hay que capturarlas! martes 1 de noviembre de 2011
  • 25. DECIMO HORROR ¿Que probará este test? Esto lo único que “prueba” es que no sabes hacer test martes 1 de noviembre de 2011
  • 26. DECIMO HORROR ¿No falta algo?, ¿y los assert? martes 1 de noviembre de 2011
  • 27. Terminando: TDD no es un fin, es un camino. No se si hemos avanzado mucho o poco, pero si se que estamos muy lejos de donde empezamos y más lejos aún de donde terminaremos llegando. La mejora continua no acaba con las “retrospectivas”, empieza con las retrospectivas y acaba con las manos en el teclado. martes 1 de noviembre de 2011