¿Por qué el código no funciona si el negocio dijo "todo correcto"?
\n\n¿Alguna vez se ha encontrado en esta situación: el gerente afirma que la tarea está resuelta, las pruebas pasan en verde, pero el usuario sigue insatisfecho? Un clásico. El problema no está en el código, está en la comunicación. Hablamos idiomas diferentes: el negocio opera con escenarios, y los desarrolladores con métodos y clases. Aquí es donde viene al rescate el BDD (Behaviour-Driven Development) — el desarrollo guiado por el comportamiento. Y sí, en PHP funciona de maravilla.
\n\nEn este artículo, analizaremos cómo BDD en PHP ayuda a convertir los vagos "deseos" en pruebas comprensibles que tanto el gerente como el programador entienden. Aprenderá en qué se diferencia BDD del TDD tradicional, cómo escribir escenarios en Gherkin y qué herramientas (Behat, PHPSpec) realmente simplifican la vida.
\n\n¿Qué es BDD en palabras sencillas?
\n\nBDD (Behaviour-Driven Development) es una evolución de TDD. Si TDD se centra en "cómo probar el código", BDD responde a la pregunta "qué debe hacer el código para que el negocio esté contento".
\n\nImagine que está escribiendo una tienda online. En lugar de una prueba abstracta como "el método applyDiscount() debe reducir el precio", escribe un escenario:
\n\n- \n
- Dado: hay un producto en el carrito por 1000 rublos \n
- Cuando: el usuario introduce el código promocional "SALE10" \n
- Entonces: el total del carrito pasa a ser 900 rublos \n
Cualquier persona puede leer este escenario, desde un especialista en marketing hasta un líder de equipo. Sin magia, solo el comportamiento del sistema.
\n\nBDD vs TDD: ¿cuál es la diferencia?
\n\nMuchos confunden estos conceptos. Aclaremos las cosas:
\n\n- \n
- TDD — escribimos la prueba, luego el código, luego refactorizamos. Las pruebas las escribe un desarrollador para un desarrollador. \n
- BDD — primero escribimos el escenario de comportamiento en lenguaje natural, luego lo automatizamos. Los escenarios se escriben en diálogo con el negocio. \n
BDD no reemplaza a TDD, lo complementa. Todavía escribe pruebas unitarias, pero ahora tiene una "documentación viva" en forma de escenarios.
\n\nHerramientas BDD para PHP: eligiendo el arma
\n\nEl ecosistema PHP ofrece dos herramientas principales para el desarrollo guiado por el comportamiento: Behat y PHPSpec. Resuelven diferentes tareas.
\n\nBehat — el soldado universal
\n\nBehat es un framework para pruebas de aceptación. Funciona con el lenguaje Gherkin (el famoso "Dado-Cuando-Entonces"). Behat es ideal para pruebas de integración, verificación de API, interfaces web y lógica de negocio de alto nivel.
\n\nPHPSpec — el microscopio del desarrollador
\n\nPHPSpec es una herramienta para la especificación de clases. Está más cerca de TDD, pero con la filosofía de BDD: describe el comportamiento de un objeto, no su interior. PHPSpec es excelente para pruebas unitarias de la lógica de dominio.
\n\nEn este artículo, nos centraremos en Behat, ya que ilustra mejor el behaviour-driven development en PHP.
\n\nEscribiendo nuestro primer escenario BDD en PHP con Behat
\n\nVamos a crear un ejemplo real. Supongamos que estamos desarrollando un sistema de fidelización. El cliente recibe un 10% de descuento si el total del pedido supera los 5000 rublos.
\n\nPaso 1: Instalación de Behat
\n\ncomposer require --dev behat/behat\n\nLuego inicializamos el proyecto:
\n\nvendor/bin/behat --init\n\nLa estructura será la siguiente:
\n\nfeatures/\n bootstrap/\n FeatureContext.php\n discount.feature\n\nPaso 2: Escribimos el archivo feature en Gherkin
\n\nCreamos el archivo features/discount.feature:
Feature: Cálculo de descuento para clientes fieles\n As a gerente de ventas\n I want to otorgar un 10% de descuento en pedidos desde 5000 rublos\n So that incentivar compras grandes\n\n Scenario: El pedido supera el umbral de descuento\n Given hay productos en el carrito por un total de 6000 rublos\n When solicito el costo total\n Then el costo total debe ser