BDD - TDD en forma de BDD

En TDD, el término "Pruebas de aceptación" es engañoso. Las pruebas de aceptación realmente representan el comportamiento esperado del sistema. En las prácticas ágiles, se enfatiza la colaboración de todo el equipo y las interacciones con el cliente y otras partes interesadas. Esto ha dado lugar a la necesidad de utilizar términos que sean fácilmente comprensibles para todos los involucrados en el proyecto.

TDD te hace pensar en lo necesario Behavior y por lo tanto el término 'Comportamiento' es más útil que el término ‘Test’. BDD es un desarrollo basado en pruebas con un vocabulario que se centra en el comportamiento y no en las pruebas.

En palabras de Dan North, "Encontré el cambio de pensar en las pruebas a pensar en el comportamiento tan profundo que comencé a referirme a TDD como BDD, o desarrollo impulsado por el comportamiento". TDD se centra en cómo funcionará algo, BDD se centra en por qué lo construimos.

BDD responde a las siguientes preguntas a las que a menudo se enfrentan los desarrolladores:

Pregunta Responder
¿Donde empezar? de fuera hacia dentro
¿Qué probar? Historias del usuario
¿Qué no probar? Algo más

Estas respuestas dan como resultado el marco de la historia de la siguiente manera:

Story Framework

Como un [Role]

quiero [Feature]

así que eso [Benefit]

Esto significa, 'Cuando un Feature se ejecuta, el resultado Benefit es para la persona que juega el Role.'

BDD responde además a las siguientes preguntas:

Pregunta Responder
¿Cuánto probar de una vez? muy poco enfocado
¿Cómo llamar a sus pruebas? plantilla de oración
Cómo entender por qué falla una prueba documentación

Estas respuestas dan como resultado el marco de ejemplo de la siguiente manera:

Example Framework

Given algún contexto inicial,

When ocurre un evento,

Then asegurar algunos resultados.

Esto significa, 'Comenzando con el contexto inicial, cuando ocurre un evento en particular, sabemos cuáles son los resultados should be.

Así, el ejemplo muestra el comportamiento esperado del sistema. Los ejemplos se utilizan para ilustrar diferentes escenarios del sistema.

Historia y escenarios

Consideremos la siguiente ilustración de Dan North sobre un sistema de cajeros automáticos.

Historia

As a cliente,

I want retirar efectivo de un cajero automático,

so that No tengo que hacer cola en el banco.

Escenarios

Hay dos escenarios posibles para esta historia.

Scenario 1 - La cuenta está en crédito

Given la cuenta está en crédito

And la tarjeta es válida

And el dispensador contiene efectivo

When el cliente solicita efectivo

Then asegúrese de que la cuenta esté cargada

And asegúrese de que se distribuya efectivo

And asegúrese de que la tarjeta sea devuelta

Scenario 2 - La cuenta está sobregirada más allá del límite de sobregiro

Given la cuenta está sobregirada

And la tarjeta es válida

When el cliente solicita efectivo

Then asegúrese de que se muestre un mensaje de rechazo

And asegúrese de que no se dispensa efectivo

And asegúrese de que la tarjeta sea devuelta

El evento es el mismo en ambos escenarios, pero el contexto es diferente. Por tanto, los resultados son diferentes.

Ciclo de desarrollo

El ciclo de desarrollo de BDD es un outside-in Acercarse.

Step 1- Escriba un ejemplo de valor comercial de alto nivel (externo) (utilizando Pepino o RSpec / Carpincho) que se ponga rojo. (RSpec produce un marco BDD en el lenguaje Ruby)

Step 2 - Escriba un ejemplo de RSpec de nivel inferior (interior) para el primer paso de implementación que se pone rojo.

Step 3 - Implementar el código mínimo para pasar ese ejemplo de nivel inferior, ver cómo se vuelve verde.

Step 4 - Escriba el siguiente ejemplo de RSpec de nivel inferior presionando para pasar el Paso 1 que se pone rojo.

Step 5 - Repita los pasos del Paso 3 y el Paso 4 hasta que el ejemplo de alto nivel del Paso 1 se vuelva verde.

Note - Deben tenerse en cuenta los siguientes puntos:

  • Red/green estado es un estado de permiso.

  • Cuando sus pruebas de bajo nivel son verdes, tiene permiso para escribir nuevos ejemplos o refactorizar la implementación existente. No debe, en el contexto de la refactorización, agregar nueva funcionalidad / flexibilidad.

  • Cuando sus pruebas de bajo nivel son rojas, tiene permiso para escribir o cambiar el código de implementación solo para que las pruebas existentes se vuelvan verdes. Debe resistir la tentación de escribir el código para aprobar su próxima prueba, que no existe, o implementar características que pueda pensar que son buenas (el cliente no lo habría pedido).