Ir al contenido
wannacode

Qué, no cómo

En resumen: Un escenario dice qué hace el sistema, no cómo se hace clic por la pantalla. «Haz clic en el botón Pedir» se rompe con cada cambio de diseño aunque la regla siga igual. Un escenario comprueba un comportamiento: un solo «Cuando». Las palabras son las del negocio: carrito, pedido, envío, no tablas ni URL.

Problema

Cuarenta escenarios y un botón

La tienda cambia el diseño del carrito. El botón «Pedir» pasa a ser «Ir al pago» y se mueve a otra línea. En las reglas no ha cambiado nada.

A la mañana siguiente fallan 40 escenarios. Todos son sobre el envío, y todos empiezan así:

# language: es
Característica: Envío gratis
Escenario: Envío por debajo del límite
Dado que abro el sitio web de la tienda
Y pongo una taza de 49,99 € en el carrito
Y abro el carrito
Cuando hago clic en el botón «Pedir»
Entonces en la parte inferior de la pantalla dice «Envío: 4,90 €»

El dueño tampoco puede leerlos. Busca la regla del envío y ve botones.

La idea

Qué, no cómo

Este escenario dice cómo hacer clic por la pantalla. Por eso se llama imperativo: una serie de órdenes. El mismo ejemplo, contado como qué hace el sistema, es declarativo:

# language: es
Característica: Envío gratis
Escenario: Pedido justo por debajo del límite
Dado un carrito de 49,99 €
Cuando hago el pedido
Entonces el envío es de 4,90 €

Tres líneas en lugar de cinco, y ninguna sabe de botones. Si mañana el pedido se hace por voz o desde la aplicación móvil, el escenario sigue igual. La regla no ha cambiado, así que el escenario tampoco debería cambiar.

El «cómo» no desaparece. Se traslada al código que enlaza el paso «Cuando hago el pedido» con el sistema. Allí se corrige una línea para el botón nuevo, no 40 escenarios.

Pruébalo

¿Qué o cómo?

1. ¿Qué paso es declarativo?
2. ¿Qué paso es declarativo?
3. ¿Qué paso es declarativo?

Ejercicio

Reescríbelo

1. Sin botones. El editor contiene el escenario del principio de la lección.

Reescribe el escenario en el lenguaje del vocabulario: sin sitio web, botones ni pantalla. Añade también un ejemplo justo en el límite, para que se cacen los dos errores.

GherkinEnvío gratis

La idea

Un comportamiento por escenario

Aquí hay otra cosa que parece ahorradora:

# language: es
Característica: Envío gratis
Escenario: Envío
Dado un carrito de 49,99 €
Cuando hago el pedido
Entonces el envío es de 4,90 €
Dado un carrito de 50,00 €
Cuando hago el pedido
Entonces el envío es gratis

Son dos escenarios en uno. Si falla, tienes que leer las líneas para averiguar qué comportamiento está roto. Y si falla la primera mitad, la segunda ni siquiera se ejecuta.

La regla es un comportamiento por escenario: un solo «Cuando», y el nombre expresa ese comportamiento. Si necesitas una «y» en el nombre («cancelar y reembolsar»), hay dos comportamientos.

Ejercicio

Divídelo

2. Dos en uno. En esta tarea, dos pasos «Cuando» en un escenario son un error.

Divide el escenario en dos: cada uno con un comportamiento y un nombre que lo exprese.

GherkinEnvío gratis

La idea

El idioma del negocio

Las palabras de un escenario son las del dueño y el cliente: carrito, pedido, envío, código promocional. Las mismas que en la historia y en el tablero del Example Mapping. Si el negocio dice «pedido», el escenario no dice «solicitud», y el código no dice cart_submission.

No escribimos:

  • nombres de tablas y campos (orders.delivery_fee);
  • URL y respuestas del servidor (POST /api/orders, 200);
  • nombres de funciones (calcDelivery(4999)).

Son decisiones del equipo y cambian, mientras la regla se queda. Un escenario que las contiene se rompe por ellas, y quien conoce la regla no puede leerlo.

Más precisamente, para curiosos

La documentación de Cucumber («Writing better Gherkin») dice lo mismo: un escenario describe el comportamiento del sistema, no cómo está construido; es decir, el qué, no el cómo. No prohíbe el estilo imperativo: en algunos contextos los detalles importan, pero esos escenarios cuestan más de mantener.

¿Cuándo es el «cómo» el propio requisito? Cuando compruebas la accesibilidad del formulario de pago, el teclado y las etiquetas son el comportamiento. Entonces el escenario los dice. Pero la regla del envío no depende de un botón.

La idea de un lenguaje común para el negocio y el equipo tiene nombre en el diseño de software: el lenguaje ubicuo (ubiquitous language) del Domain-Driven Design de Eric Evans (2003). Las palabras de la conversación, del escenario y del código son las mismas.

Test

Ponte a prueba

1. ¿Por qué «haz clic en el botón Pedir» es un mal paso en un escenario del envío?
2. Un escenario tiene dos pasos «Cuando». ¿Qué haces?
3. El nombre de un escenario: «Cancelar y reembolsar». ¿Qué sugiere?
4. ¿Qué escenario habla el idioma del negocio?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·