¿Qué es TDD?

Este es el primer artículo de una serie en la explicaremos la base para hacer BDD y la herramienta mas extendida para hacer BDD: Cucumber. Para poder explicar qué es BDD, lo mejor es empezar por la base, y un pequeño repaso de qué es TDD, que es de lo que nos ocuparemos en este artículo.

Según la wikipedia:

Desarrollo guiado por pruebas de software, o Test-driven development (TDD) es una práctica de ingeniería de software que involucra otras dos prácticas: Escribir las pruebas primero (Test First Development) y Refactorización (Refactoring).

Básicamente se trata de seguir un flujo de trabajo siguiente:

  1. Se escoje una funcionalidad.
  2. Se implementa un pequeño test que pruebe dicha funcionalidad y que, en ese momento, fallará.
  3. Se escribe el código que hace que ese test funcione, y sólo el código que hace que ese test funcione.
  4. Finalmente, se refactoriza el código, una vez funcione el test.

Se suele representar como RED -> GREEN -> REFACTOR

Ciclo TDD

Ciclo TDD

Hay varios puntos a tener en cuenta, y que, bajo mi punto de vista, son imprescindibles:

  • Dar pasos muy pequeños (lo que en inglés llaman “baby steps”)
  • Dejar a un lado la sobreingeniería. Déjate de añadir cosas “por si acaso”. Cuando las necesites, y sólo cuando las necesites, las incorporas.
  • No intentes saltar pasos o correr, mucho. Aquí no funciona.
  • Los tests que generas, no necesariamente serán los tests de tu aplicativo en producción. Muchos de los tests sirven únicamente para el desarrollo.
  • También hay que refactorizar los tests.

El resultado empírico que yo obtengo de utilizar esta técnica es un diseño super simple y muy claro. Para mi, TDD es una herramienta de diseño.

Y ahora entramos en un terreno bastante farragoso… ¿Merece la pena hacer TDD? Lo que es indudable es la utilidad de hacer tests. Como dice un colega:

Si tiras un par de líneas de código, tienes un bug.

Si tiras un par de líneas de código y funcionan, tienes dos problemas: Tienes un bug y no sabes que lo tienes.

Hay férreos defensores del TDD, y gente que dice que ha muerto. Yo creo que ni una cosa ni la otra. Es una herramienta útil para lo que es útil, y utilizada correctamente es muy potente, pero no digo que todo el mundo deba usarla (usada sin conocimiento es como dar a un mono dos pistolas), ni la uso yo mismo en todos mis proyectos.

Más adelante, seguramente dedicaré una serie de artículos al TDD, pero si alguien quiere profundizar en el tema, hay un montón de recursos que merecen mucho la pena:

  • Diseño ágil con TDD de Carlos Ble (@carlosble). Es el único libro que he leido en castellano sobre TDD. Esta todo muy bien explicado. Hice un curso de TDD con él y conoce muy bien el tema que explica.
  • Test Driven Development: By Example de Kent Beck (@KentBeck). Es “la biblia” de TDD. Hasta donde yo se, no está traducido (ni falta que hace, pero sigue habiendo técnicos a los que “da pereza” leer en inglés)
  • Hay un curso cojonudo de  JB Rainsberger (@jbrains). Podéis acceder aquí.
  • Hay unos screencasts bastante buenos de Kent Beck (@KentBeck) para Pragmatic Programmer.
  • En los screencasts de Uncle Bob (@unclebobmartin) CleanCoders hay algunos dedicados a TDD.

En los últimos años ha habido una serie de “enganchones” online entre gurús sobre el valor o no de hacer TDD. A lo largo del tiempo, Joel Spolsky(@spolsky) se posicionó en contra y le contestó Bob Martin(@unclebobmartin). Podéis leer un resumen aquí. Mas adelante se repitió la jugada: David Hainemeier(@dhh) se posicionó en contra y se montó un revuelo bastante grande, contestando entre otros @unclebobmartin aquí.

No me voy a posicionar ni en un lado ni en el otro, porque creo que en este tema no se puede ser radical. Al final lo único que importa es desarrollar software de calidad, y las herramientas que se emplee para hacerlo, son circunstanciales.

La semana que viene seguiremos con el siguiente artículo, en el que explicaremos, muy someramente que es BDD y las diferencias que hay con TDD.

One thought on “¿Qué es TDD?

  1. Pingback: Vuelta a la vida del blog | cdiezgil

Deja un comentario