TDD: resultados empíricos

Hace poco en una code kata alguien me dijo, ... "y qué ventajas tiene esto de hacer TDD?". Le dije... en nuestro proyecto, actualmente con casi 25.000 lineas de código Python (multiplica x4 si piensas en Java), no hemos necesitado nunca bugtracker. Cuando ha aparecido algun bug, se ha corregido enseguida y vuelto a subir a producción. Podemos hacer una release a producción cada dos días y sólo con una persona de QA, que dedica 10 minutos antes de cada release. No llegamos al continuos deployment por falta de recursos pero estamos muy cerca.
Cuando tenemos que hacer un cambio, lo hacemos en cuestión de horas o minutos y podemos subir a producción con total garantía (98%) de no haber roto nada.
Cualquiera del equipo le puede meter mano a cualquier parte del proyecto.
Lógicamente no obtenemos estos resultados por la practica de TDD en exclusiva, sino por todas las practicas y valores de eXtreme Programming (recuerda que TDD/BDD es una parte de XP).
Y todavía podía seguir enumerando ventajas. Sin embargo, el código de nuestro proyecto no es open source, así que la gente tiene que creernos. Ahora, con pyDoubles, puedes ver los resultados tu mism@:

Resultados empíricos basados en pyDoubles:
En la última release del framework, la 1.2, hemos conseguido compatibilidad total con Hamcrest, el framework más conocido de matchers, para mejorar la legibilidad de los tests. Estratégicamente esto hace que pyDoubles pueda convertirse en un framework de referencia, ya que Hamcrest es muy popular y ahora ambos frameworks encajan perfectamente. Es un gran logro a nivel de negocio, teniendo en cuenta que queremos que pyDoubles sea usado.
¿Sabes cuanto nos ha costado a nivel de desarrollo? 3 horas de trabajo. Puedes ver los commits que se han hecho de la version 1.1 a la 1.2 si quieres mas datos objetivos. Nunca habiamos visto el código de Hamcrest ni habíamos desarrollado pyDoubles pensando en Hamcrest, sin embargo, hemos desarrollo siguiendo SOLID, dejando todo abierto a extensión y cerrado a modificación. El resultado es contundente. Apenas un poquito de esfuerzo para alcanzar un gran resultado.
¿Cuánto nos podía haber costado esto sin hacer bien TDD? Probablemente semanas de trabajo. Probablemente haber tirado medio framework y haberlo tenido que reescribir, con el riesgo de cargarnos por el camino las funcionalidades existentes.
En esta release 1.2 no solo hemos tardado poco, sino que estamos seguros de que no se ha roto ninguna funcionalidad.
¿Cuál es el orden de beneficio de esta forma de trabajar? Dificil de cuantificar pero la sensación es de ser 10 veces más productivos. Entonces ahora ¿es más caro o es más barato hacer un buen TDD/BDD?

No necesitamos convencer a nadie, los datos empíricos van demostrando las ventajas por su propio peso 🙂
Olvídate de convencer a tu entorno sobre las ventajas de XP, practica con el ejemplo.

Enjoyed reading this post?
Subscribe to the RSS feed and have all new posts delivered straight to you.
  • http://1poquitodtodo@blogspot.com Juan Quijano

    Buenas,

    Mi duda es cuanto de ese tiempo que te has ahorrado lo has gastado en hacer TDD.

    No digo que no esté bien utilizar TDD o SOLID, pero mirar la ventaja solamente al final es olvidar el tiempo extra que implica hacer las cosas de esa forma.

    ¿Tienes datos sobre ello?

    Para explicar mi duda pongo como ejemplo los coches eléctricos, que contaminan mucho menos si solo miras una vez puestos en marcha, pero contaminan más y de otra forma si miras su ciclo de vida completo (construcción, uso y destrucción/reciclaje).

  • http://carlosble.com Carlos Ble

    Con la complejidad que tiene el framework, sin TDD hubieramos tardado mucho mas en llegar a implementar la misma cantidad de funcionalidad. Para cada nuevo paso necesitabas que lo anterior funcionase muy bien. Es una herramienta donde el desarrollo es totalmente incremental y necesitas que lo que ya tienes sea robusto. Fijate en el numero de tests unitarios que tenemos, ya pasan los 100.

    Asi que no hemos ido mas lentos haciendo las cosas bien. Totalmente seguro de eso. Es como una carrera de fondo, donde al principio podriamos haber ido tal vez igual, pero ya en la primera release ganamos ventaja, y asi con cad
    a release.

    Cuando tienes poca experiencia con TDD, vas mucho mas lento desarrollando, pero luego al comprenderlo, te metes en la carrera de fondo y ganas por kilometros 😉

  • http://eamodeorubio.wordpress.com Enrique Amodeo

    Hola, Juan, yo creo que el movimiento se demuestra andando. Yo que tú haría lo siguiente: me leería el GOOS y practicaría un poco de TDD (tal vez alguna kata) Finalmente usaría TDD puro en algún proyecto de tamaño mediano de complejidad media, si es posible haciendo pair programming que alguien que ya sepa TDD.
    Tras probarlo en un proyecto real saca tus propias conclusiones: ¿te ha merecido la pena? ¿Has tenido buenas sensaciones? ¿Tal vez simplemente no has sabido hacer TDD (yo tardé en pillarle el truco)?

  • Néstor Salceda

    Me encanta la integración con hamcrest 😀

    Ahora a ver si te paso un par de sugerencias más, y me gustaría algún parche también, para un par de funcionalidades que creo que pueden molar un montón.

  • http://carlosble.com Carlos Ble

    Go ahead Nestor, dinos que te gustaria tener 🙂

  • http://1poquitodtodo@blogspot.com Juan Quijano

    Enrique, te equivocas de foco. El post no trata sobre mi experiencia o conocimiento en TDD. Ni siquiera de mi opinión.

    Si no sobre la experiencia en primera persona de Carlos.

    Además presupones dos cosas que no son ciertas: que no he utilizado o que no utilizo TDD en Katas o proyectos medios y que lo quiera o no utilizar..

    ¿Pero sobre el post de Carlos tienes algo que decir? Alguna experiencia propia.

  • http://anabuigues.com Ana Buigues

    En mi humilde opinión lo que me aporta aplicar TDD y tener test de las aplicaciones es la gran tranquilidad de que ante cualquier cambio si rompes algo hay un test que te avisa de ello.

  • Pingback: TDD: resultados empíricos | comunidadAgil.org()

  • http://www.kurs-jezyka-angielskiego.com.pl/kurs-angielskiego-w-domu/ kurs angielskiego

    I’ve been surfing online more than 3 hours today, yet I never found any interesting article like yours. It’s pretty worth enough for me. In my opinion, if all web owners and bloggers made good content as you did, the web will be much more useful than ever before.