BDD (desarrollo guiado por comportamiento, por behaviour-driven development) es una forma de escribir pruebas describiendo el comportamiento esperado del sistema en un lenguaje que hasta quien no programa puede leer. Ese lenguaje es Gherkin, con una estructura fija: Feature (la funcionalidad), Scenario (un caso concreto) y los pasos Given/When/Then (Dado un contexto, Cuando ocurre una acción, Entonces se espera un resultado). Cucumber es la herramienta que conecta cada paso escrito en Gherkin con una definición de paso (step definition): el código que efectivamente ejecuta ese paso. Así, el escenario legible se convierte en una prueba automática real. Su gran promesa es alinear a todo el equipo —negocio, desarrollo y QA leen y acuerdan los mismos escenarios—. Su riesgo, y hay que decirlo: si nadie de negocio lee los escenarios, BDD se vuelve una capa extra que solo agrega trabajo. Conviene cuando la colaboración entre roles es real, no como envoltorio de pruebas técnicas.
Ver índice de contenidos
Qué es BDD
El desarrollo guiado por comportamiento nació como una evolución de otra práctica y con una idea central: describir qué debe hacer el sistema en términos de comportamiento observable, en un lenguaje compartido por todo el equipo, antes de programarlo. Ese lenguaje sirve a la vez como especificación, como documentación y como prueba automática.
La promesa de BDD
Un mismo texto que todos pueden leer y acordar: quien define el negocio confirma que describe lo que quiere, quien desarrolla sabe qué construir, y quien prueba tiene el criterio de aceptación ya escrito. Es un lenguaje común entre roles que normalmente hablan idiomas distintos. Cuando esa conversación ocurre de verdad, BDD reduce malentendidos; cuando no, solo queda la sintaxis, que es la parte menos valiosa.
Los escenarios de BDD son, en el fondo, criterios de aceptación escritos en un formato ejecutable: el puente entre lo que el negocio pide y la prueba que lo verifica.
Gherkin: el idioma común
Gherkin es el lenguaje estructurado de BDD. Tiene pocas palabras clave, y con ellas se escribe un escenario que se lee casi como prosa:
Feature: Aplicar cupón de descuento
Para pagar menos por mi compra
Como cliente
Quiero aplicar un cupón válido
Scenario: Cupón válido reduce el subtotal
Given un carrito con un subtotal de 100
And un cupón válido de 10% de descuento
When aplico el cupón
Then el subtotal pasa a ser 90
Scenario: Cupón vencido se rechaza
Given un carrito con un subtotal de 100
And un cupón vencido
When aplico el cupón
Then veo un aviso de cupón no válido
And el subtotal sigue siendo 100Las palabras clave, según la referencia de Cucumber, tienen cada una su papel: Feature describe la funcionalidad y agrupa escenarios; Scenario es un caso concreto; Given pone el sistema en un estado conocido; When describe la acción; Then especifica el resultado esperado (y debe usar una comprobación); y And / But encadenan pasos del mismo tipo para que se lea fluido. Hay además Background para pasos compartidos por varios escenarios y Scenario Outline con una tabla de Examples para correr el mismo escenario con distintos datos.
Cucumber conecta con el código
El texto de Gherkin, por sí solo, no hace nada: es una descripción. Cucumber es la herramienta que lo vuelve ejecutable, conectando cada paso con una definición de paso: un bloque de código que hace de verdad lo que el paso describe. La conexión se establece por coincidencia de texto —un patrón asociado a cada bloque—, y, según la documentación, las palabras clave no participan de esa coincidencia: solo el texto que las sigue.
// Definiciones de paso: el código que ejecuta cada línea del escenario.
import { Given, When, Then } from '@cucumber/cucumber';
import assert from 'node:assert';
Given('un carrito con un subtotal de {int}', function (monto) {
this.carrito = { subtotal: monto };
});
When('aplico el cupón', function () {
this.carrito = aplicarCupon(this.carrito, this.cupon);
});
Then('el subtotal pasa a ser {int}', function (esperado) {
assert.strictEqual(this.carrito.subtotal, esperado);
});Cucumber lee el escenario, busca para cada paso su definición y la ejecuta en orden. El paso «Given un carrito con un subtotal de 100» dispara la función asociada con monto = 100. Por debajo, esa función usa una herramienta de automatización real —Playwright, Cypress o Selenium para una app web, o llamadas a una API— para hacer lo que describe. Gherkin es la cara legible; la definición de paso es el motor.
Reutilizar y parametrizar pasos
La potencia de Cucumber está en que las definiciones de paso se reutilizan. El paso «Given un carrito con un subtotal de {int}» sirve para cualquier monto: el {int} es un parámetro que captura el número y lo pasa a la función. Escribís la definición una vez y la usan todos los escenarios que la mencionen.
Eso permite construir un vocabulario de pasos —iniciar sesión, tener tal carrito, aplicar tal acción— que se combina para describir escenarios nuevos sin escribir código nuevo. Cuando el vocabulario está bien diseñado, agregar un escenario es solo escribir Gherkin con pasos que ya existen. Y para probar el mismo comportamiento con muchos datos, el Scenario Outline con su tabla de Examples corre el escenario una vez por fila, lo que conecta con las técnicas de cobertura por valores.
Cuándo conviene y cuándo no
Esta es la parte que las guías entusiastas suelen omitir. BDD tiene un costo —una capa de traducción entre el Gherkin y el código— y ese costo solo se paga si aporta su beneficio, que es la colaboración entre roles.
| Conviene cuando… | No conviene cuando… |
|---|---|
| Negocio, desarrollo y QA colaboran de verdad | Solo el equipo técnico escribe y lee los escenarios |
| Los escenarios se acuerdan antes de programar | Se escriben después, para «documentar» pruebas ya hechas |
| El comportamiento del negocio es central y complejo | Son pruebas técnicas sin lectura de negocio |
| Los escenarios sirven de documentación viva | La capa Gherkin solo agrega mantenimiento |
Usar Gherkin como envoltorio de pruebas puramente técnicas, que ninguna persona de negocio va a leer nunca. En ese caso se paga todo el costo de BDD —mantener los pasos, la traducción, la sintaxis— sin recibir su único beneficio real. Si nadie fuera del equipo técnico lee los escenarios, casi siempre es mejor escribir las pruebas directamente con la herramienta de automatización, sin la capa de Gherkin.
Errores frecuentes
- Usar BDD sin colaboración de negocio. Sin alguien que lea los escenarios, es costo sin beneficio.
- Escribir los escenarios después de programar. BDD vale antes, como acuerdo; después es solo decoración.
- Meter detalles técnicos en el Gherkin. «Hago clic en el botón con id x» rompe la legibilidad; el Gherkin describe comportamiento, no implementación.
- No reutilizar pasos. Un paso casi igual repetido veinte veces vuelve inmantenible la suite.
- Escenarios enormes. Un escenario con veinte pasos ya no describe un caso: mejor varios cortos.
- Confundir Gherkin con la prueba. Gherkin describe; la definición de paso ejecuta. Sin esta última, no hay prueba.
- Adoptarlo por moda. BDD es una herramienta para un problema concreto —alinear roles—, no un objetivo en sí.
Preguntas frecuentes
¿Qué es BDD y en qué se diferencia de escribir pruebas normales?
El desarrollo guiado por comportamiento es una forma de trabajar en la que se describe qué debe hacer el sistema, en términos de comportamiento observable y en un lenguaje que todo el equipo puede leer, antes de programarlo. La diferencia con escribir pruebas normales no está tanto en la herramienta como en el propósito y el momento: una prueba normal la escribe y la lee el equipo técnico para verificar código, mientras que un escenario de BDD está pensado para que también lo lean y acuerden las personas de negocio, y sirve a la vez de especificación, documentación y prueba. Ese mismo texto se convierte después en una prueba automática. La clave es que BDD aporta cuando esa conversación entre roles ocurre de verdad; si el escenario solo lo lee el equipo técnico, la diferencia con una prueba normal se reduce a sintaxis extra.
¿Qué son Gherkin y Cucumber, y cómo se relacionan?
Son dos piezas complementarias. Gherkin es el lenguaje: un formato estructurado con pocas palabras clave —Feature, Scenario, Given, When, Then y algunas más— con el que se escribe un escenario legible que describe un comportamiento, casi como prosa. Por sí solo, ese texto no ejecuta nada: es una descripción. Cucumber es la herramienta que lo vuelve ejecutable, conectando cada paso escrito en Gherkin con una definición de paso, que es el bloque de código que hace realmente lo que el paso dice. Cucumber lee el escenario, encuentra para cada paso su definición correspondiente por coincidencia de texto, y la ejecuta en orden, convirtiendo el escenario legible en una prueba automática real. En resumen, Gherkin describe el comportamiento y Cucumber lo une con el código que lo ejecuta.
¿Qué significa la estructura Given, When, Then?
Es la estructura de tres partes con la que se escribe cada escenario en Gherkin, y sigue la lógica natural de una prueba. Given, que se traduce como «dado», pone el sistema en un estado conocido antes de que empiece la interacción: describe el contexto inicial, como un carrito con cierto subtotal y un cupón válido. When, «cuando», describe la acción o el evento que ocurre, como aplicar el cupón. Y Then, «entonces», especifica el resultado esperado y debe apoyarse en una comprobación que compare lo que realmente pasó con lo que se esperaba, como que el subtotal quede reducido. Las palabras And y But permiten encadenar pasos adicionales del mismo tipo para que el escenario se lea con fluidez. Esta estructura obliga a pensar cada caso como contexto, acción y resultado, que es justamente la anatomía de una buena prueba.
¿BDD reemplaza a herramientas como Playwright o Selenium?
No, funciona por encima de ellas. Cucumber y Gherkin se ocupan de la capa de descripción legible y de conectarla con el código, pero la acción concreta de abrir un navegador, hacer clic o comprobar un resultado la sigue haciendo una herramienta de automatización real. En la práctica, dentro de las definiciones de paso —el código que ejecuta cada línea del escenario— se usa Playwright, Cypress o Selenium para una aplicación web, o llamadas directas a una API si lo que se prueba es un servicio. Es decir, BDD no compite con esas herramientas sino que las envuelve en una capa de lenguaje común. Por eso adoptar BDD implica sumar una capa sobre la automatización que ya se tiene, y esa capa solo vale la pena si aporta la colaboración entre roles que justifica su costo.
¿Cuándo conviene usar BDD y cuándo no?
Conviene cuando la colaboración entre roles es real: cuando las personas de negocio, desarrollo y QA se sientan a acordar los escenarios antes de programar, cuando el comportamiento del negocio es central y complejo, y cuando esos escenarios van a servir de documentación viva que la gente lee. En esos casos BDD reduce malentendidos y alinea a todo el equipo alrededor de un mismo texto. No conviene cuando solo el equipo técnico escribe y lee los escenarios, cuando se escriben después de programar para «documentar» pruebas ya hechas, o cuando son pruebas puramente técnicas sin ninguna lectura de negocio. En esos casos se paga todo el costo de mantener la capa de Gherkin sin recibir su único beneficio real, y suele ser mejor escribir las pruebas directamente con la herramienta de automatización.
¿Cuál es el error más común al adoptar BDD?
Usar Gherkin como un simple envoltorio de pruebas técnicas que ninguna persona de negocio va a leer jamás. Es el antipatrón más frecuente y el que hace que muchos equipos abandonen BDD decepcionados. Cuando ocurre, el equipo mantiene toda la maquinaria —los escenarios, las definiciones de paso, la traducción entre ambos— pero no obtiene el beneficio que justifica ese trabajo, que es la conversación y el acuerdo entre roles distintos. El síntoma es claro: si al preguntar quién lee los escenarios la respuesta es «solo nosotros, el equipo técnico», entonces la capa de Gherkin está agregando costo sin aportar nada, y casi siempre es mejor escribir las pruebas directamente. BDD es una herramienta para un problema concreto, alinear a personas que hablan idiomas distintos, no un objetivo en sí mismo ni una moda que haya que adoptar.
Fuentes
Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.
Aportes de la comunidad Underc0de
- Underc0de, foro. Sección QA (Quality Assurance). Consultas sobre BDD, automatización y colaboración entre roles.
- Underc0de, foro. Sección Programación. Definiciones de paso y automatización de pruebas.
Documentación oficial
- Cucumber. Gherkin Reference. Las palabras clave —Feature, Scenario, Given, When, Then— y su significado, citados en la guía.
- Cucumber. Step Definitions. Cómo se conecta cada paso de Gherkin con el código que lo ejecuta.
- Cucumber. Behaviour-Driven Development. Qué es BDD y de dónde viene.
- Agile Alliance. Behavior-Driven Development. El origen del método y su relación con las prácticas ágiles.