METODOLOGÍA

BDD

Behavior-Driven Development

Escribe los tests en un lenguaje que el stakeholder de negocio pueda leer. Luego haz que esos tests pasen.

Última revisión: porKevin Riedl wiki ↗

Behavior-Driven Development es TDD con el lenguaje de los tests reescrito para que lo lean no-ingenieros. Herramientas como Cucumber usan un formato Given/When/Then que un product manager puede firmar. La idea es mantener los tests alineados con el comportamiento de negocio que validan, no con la implementación que existe hoy.

Ejemplo de dónde esto de verdad paga: un producto de seguros tiene una regla por la que una reclamación de menos de 30 días con una póliza válida se aprueba automáticamente. Escrito como escenario Gherkin («Dada una póliza activa durante 30 días, Cuando se presenta una reclamación dentro de la ventana de cobertura, Entonces se aprueba automáticamente»), el product owner y el revisor de compliance pueden leerlo, confirmar que coincide con la regla real y atrapar el off-by-one antes de que se envíe. Esa verificación en lenguaje compartido es todo el valor de BDD, y vive en la capa de aceptación e integración donde la brecha entre lo que producto quiso decir y lo que ingeniería construyó es donde nacen los bugs.

Hay también un coste de mantenimiento que los equipos descubren tarde. Los escenarios Gherkin se apoyan sobre una capa de «step definitions», código pegamento que mapea cada línea en lenguaje plano a acciones de test reales. Ese pegamento es software real que hay que mantener en sincronía a medida que el producto cambia, y una suite BDD grande con step definitions descuidadas se vuelve su propia carga de mantenimiento, lenta de correr y frágil de editar. El beneficio (un stakeholder puede leer y firmar el comportamiento) solo paga ese overhead cuando un stakeholder de verdad los lee. Si el Gherkin lo escriben ingenieros, lo leen ingenieros y nadie más lo ve nunca, estás pagando por una capa de traducción sin audiencia.

El trade-off honesto y el error común: BDD no sustituye a TDD, es una capa encima, y aplicarlo en todas partes es el error. Escribir «Dados dos números, Cuando los sumo, Entonces obtengo la suma» para una función trivial es ceremonia que ningún stakeholder de negocio leerá jamás. Reserva Gherkin para los tests que un no-ingeniero genuinamente necesita firmar, y usa tests unitarios planos por debajo de esa línea. Como todas estas prácticas, BDD es una etapa dentro de un SDLC sensato y una herramienta para un problema real de comunicación, no un proceso a adoptar por sí mismo.

// FAQ

Preguntas frecuentes

No son alternativas. BDD es TDD reescrito para que lo lea negocio. Donde el producto firma criterios de aceptación, BDD ayuda. Donde el comportamiento es interno (algoritmos, servicios, infraestructura), añadir Given/When/Then es solo más ceremonia. Mezclar capas también es válido.
Cuando el PM deja de leerlo. Los escenarios Given/When/Then que nadie del lado de negocio revisa son tests normales con sintaxis verbosa y ningún beneficio. La señal: si en tres meses ningún stakeholder ha tocado los .feature, mátalo y vuelve a asserts directos.
Rara vez. Antes de tener un PM dedicado o un dominio que estabilizó vocabulario con negocio, BDD es solución buscando problema. En las tempranas, una conversación de cinco minutos sustituye la documentación que BDD codifica. Adóptalo cuando el cuello de botella sea el ancho de banda entre producto e ingeniería, no antes.