TDD desde las trincheras
Leonardo Micheloni
@leomicheloni
@leomicheloni
¿Quién soy?
• Leonardo Micheloni
• +15 Programador
• +10 años en Agile
• Tokiota
@leomicheloni
@leomicheloni
Objetivo
• Comprender TDD
• Contar experiencias
• No “vender” la idea
@leomicheloni
¿Qué es TDD?
• Desarrollar a partir de los test
• Escribir primero el test, luego el código que valida el test
• Comenzar from scratch
• Crear la versión más simple del código que haga pasar el test
• Refactorizar
• Baby steps
@leomicheloni
Estructura de un test
• Setup
• Ejecución
• Validación
• Cleanup
@leomicheloni
Simples
@leomicheloni
TDD ciclo
@leomicheloni
Terminología
• Dummy
• Solo datos
• Stub
• Datos condicionales
• Mock
• Comportamiento
@leomicheloni
Mock
@leomicheloni
Algunas recomendaciones
• Keep unit small
• Reducir el debugging
• Si hay un bug, hacer un test
• El código queda “autodocumentado”
@leomicheloni
¿Qué permite TDD?
• Comenzar sin depender de otros componentes
• Mejorar la comprensión del negocio (fail fast)
• Descubrir la API
• Trabajar por iteraciones (pomodoro)
• Que emerja la arquitectura
• Detectar casos de uso
@leomicheloni
Qué requiere?
• Ciertos conocimientos “avanzado” (como IoC)
• Disciplina
• Capacidad para separar el problema
@leomicheloni
Resultado
• Pensar la solución a partir del uso
• Mayor confianza en lo entregado
• Mayor felicidad
• Mayor calidad (refactor)
• Evita el sobre-diseño
• Evolución sólida => test
@leomicheloni
Live coding
@leomicheloni
Experiencias
• Proyectos legacy (funcionalidades nuevas)
• Difícil comenzar desde cero
• Hace falta práctica
• No vale la pena en todo el código (code coverage)
• Hace falta experiencia
• Es necesario conocer ciertas herramientas
• No es simple aplicarlo a todas las áreas (UI, etc.)
• Puede dar una falsa sensación de seguridad
@leomicheloni
Grandes preguntas
• ¿Se puede hacer siempre TDD?
• ¿Cualquiera puede hacer TDD?
• ¿Se puede aplicar en toda la aplicación?
• ¿Queda el código “autodocumentado”?
• ¿La aplicación es más confiable?
• ¿Aumenta el costo de mantenimiento?
• ¿Se puede aplicar en proyectos existentes?
@leomicheloni
Preguntas
@leomicheloni
Gracias! @leomicheloni
@leomicheloni
Links útiles
• TDD Katas: http://osherove.com/tdd-kata-1/
• Fizz Buzz Kata: https://opencredo.com/blogs/tdd-fizzbuzz-junit-
theories/
• Bob Martin: https://blog.cleancoder.com/
• TDD Wars: https://www.codewars.com/
• Mi canal de Youtube:
https://www.youtube.com/channel/UCQlqd6byJpXtGuYrL4cElgw
• Mi blog: http://leomicheloni.com
@leomicheloni

Tdd desde las trincheras

  • 1.
    TDD desde lastrincheras Leonardo Micheloni @leomicheloni
  • 2.
  • 3.
    ¿Quién soy? • LeonardoMicheloni • +15 Programador • +10 años en Agile • Tokiota @leomicheloni @leomicheloni
  • 4.
    Objetivo • Comprender TDD •Contar experiencias • No “vender” la idea @leomicheloni
  • 5.
    ¿Qué es TDD? •Desarrollar a partir de los test • Escribir primero el test, luego el código que valida el test • Comenzar from scratch • Crear la versión más simple del código que haga pasar el test • Refactorizar • Baby steps @leomicheloni
  • 6.
    Estructura de untest • Setup • Ejecución • Validación • Cleanup @leomicheloni
  • 7.
  • 8.
  • 9.
    Terminología • Dummy • Solodatos • Stub • Datos condicionales • Mock • Comportamiento @leomicheloni
  • 10.
  • 11.
    Algunas recomendaciones • Keepunit small • Reducir el debugging • Si hay un bug, hacer un test • El código queda “autodocumentado” @leomicheloni
  • 12.
    ¿Qué permite TDD? •Comenzar sin depender de otros componentes • Mejorar la comprensión del negocio (fail fast) • Descubrir la API • Trabajar por iteraciones (pomodoro) • Que emerja la arquitectura • Detectar casos de uso @leomicheloni
  • 13.
    Qué requiere? • Ciertosconocimientos “avanzado” (como IoC) • Disciplina • Capacidad para separar el problema @leomicheloni
  • 14.
    Resultado • Pensar lasolución a partir del uso • Mayor confianza en lo entregado • Mayor felicidad • Mayor calidad (refactor) • Evita el sobre-diseño • Evolución sólida => test @leomicheloni
  • 15.
  • 16.
    Experiencias • Proyectos legacy(funcionalidades nuevas) • Difícil comenzar desde cero • Hace falta práctica • No vale la pena en todo el código (code coverage) • Hace falta experiencia • Es necesario conocer ciertas herramientas • No es simple aplicarlo a todas las áreas (UI, etc.) • Puede dar una falsa sensación de seguridad @leomicheloni
  • 17.
    Grandes preguntas • ¿Sepuede hacer siempre TDD? • ¿Cualquiera puede hacer TDD? • ¿Se puede aplicar en toda la aplicación? • ¿Queda el código “autodocumentado”? • ¿La aplicación es más confiable? • ¿Aumenta el costo de mantenimiento? • ¿Se puede aplicar en proyectos existentes? @leomicheloni
  • 18.
  • 19.
  • 20.
    Links útiles • TDDKatas: http://osherove.com/tdd-kata-1/ • Fizz Buzz Kata: https://opencredo.com/blogs/tdd-fizzbuzz-junit- theories/ • Bob Martin: https://blog.cleancoder.com/ • TDD Wars: https://www.codewars.com/ • Mi canal de Youtube: https://www.youtube.com/channel/UCQlqd6byJpXtGuYrL4cElgw • Mi blog: http://leomicheloni.com @leomicheloni