TestingUn estudio publicado por la Empirical Software Engineering demuestra que TDD puede ser aplicado en distintos dominios y puede reducir de forma significativa la cantidad de defectos del software sin reducir la productividad de los equipos de desarrollo. El estudio compara a 4 proyectos en IBM y Microsoft que usaron TDD contra proyectos similares que no no usaron TDD.

El informe incluye 1 caso de estudio de IBM y 3 de Microsoft. Cada uno de estos casos de estudio comparan dos proyectos que trabajan en el mismo producto, usando los mismos lenguajes de programación y tecnologías, bajo la misma gerencia y dirección, y sólo uno de los equipos usaba Test-Driven Development (TDD). Ningún equipo sabía que estaba siendo parte de un estudio. El caso de estudio de IBM siguió a un equipo que desarrollaba un controlador de dispositivos. Los casos de Microsoft siguieron a equipos que trabajaron en Windows, MSN y Visual Studio.

El informe describe las prácticas de TDD que usaron los equipos, destacando los workflows minuto-a-minuto y los workflows a nivel de tarea.

Workflow minuto-a-minuto

  • Escribir una pequeña cantidad de pruebas nuevas.
  • Ejecutar las pruebas y comprobar que fallan.
  • Implementar el código para satisfacer las pruebas.
  • Volver a ejecutar los casos de prueba para comprobar que ahora pasan.

Workflow a nivel de tarea

  • Integrar código nuevo y pruebas dentro de la base de código existente.
  • Volver a ejecutar todas las pruebas para comprobar que el código nuevo no rompió nada.
  • Realizar un refactor de la implementación o del código de pruebas.
  • Volver a ejecutar todas las pruebas para comprobar que el refactor no rompió nada.

Los resultados

La densidad de defectos en las pre-entregas de los cuatro productos, medida como defectos cada mil líneas de código, disminuyó entre un 40% y un 90% relativo a los proyectos que no usaron TDD. Las gerencias de los equipos informaron un incremento subjetivo del 15-35% en el tiempo de desarrollo inicial para los equipos que usaron TDD, pero todos estuvieron de acuerdo que esto se cubría por los menores costos de mantenimiento.

Se pueden comparar estos resultados con otro informe publicado en 2006. En este otro informe se resumen los resultados de otros 13 casos de estudio sobre TDD, incluyendo investigaciones en contextos industriales, semi-industriales y académicos. Entre las conclusiones del informe se destaca: 

"Basándonos en los descubrimientos de estos estudios, se puede concluir que TDD parece mejorar la calidad de software, especialmente cuando se aplica en un contexto industrial. Esto no resultó tan obvio en los contextos semi-industriales o académicos, pero tampoco se vio una disminución de calidad. Los efectos de productividad de TDD no fueron obvios, y los resultados varian de acuerdo al contexto del estudio. Sin embargo, hay fuertes indicios de que TDD no disminuye la productividad de los desarrolladores ni extiende la duración del proyecto: en algunos casos, hubo incrementos significativos de productividad usando TDD, mientras que sólo 2 de los 13 casos de estudio mostraron una disminución productividad. Sin embargo, en ambos de estos estudios se mejoró la calidad."

Y vos, ¿qué esperás para hacer TDD?

Basado en Empirical study shows Test-Driven Development improves quality.

Inspiración.

"Si tú tienes una manzana y yo tengo una manzana e intercambiamos las manzanas, entonces tanto tú como yo seguiremos teniendo una manzana cada uno. Pero si tú tienes una idea y yo tengo una idea, e intercambiamos las ideas, entonces ambos tendremos dos ideas"

Bernard Shaw