Una vez escuchado el discurso del cliente y habiendo decidido que lo primero a implementar en los primeros sprints será el motor de juego de la aritmética básica, nos disponemos a formular los criterios de aceptación para que el cliente los valide. Tal como dijimos en el capítulo sobre ATDD, los tests de aceptación (o de cliente) son frases cortas y precisas escritas con el lenguaje del dominio de negocio. Son tan sencillas que al verlas el cliente sólo tiene que decir si son afirmaciones correctas o no. Son ejemplos. Los ejemplos evitan la ambigüedad que se puede inmiscuir en la descripción de una tarea.
Sabemos que es muy peligroso dar por sentado cuestiones referentes a la lógica de negocio, que debemos ceñirnos exclusivamente a la funcionalidad que se requiere. El motor de juego para aritmética implica muchos ejemplos a poco que nos pongamos a pensar. ¿Qué pasa si el profesor no ha añadido suficientes expresiones a un nivel como para alcanzar la puntuación que permite pasar el nivel siguiente? ¿se pueden eliminar expresiones de un nivel? ¿se pueden añadir o modificar? ¿cómo afecta eso a las puntuaciones? ¿y si hay jugadores en medio del nivel? ¿se puede trasladar una expresión de un nivel a otro?.
Cada preguntase resolvería con varios ejemplos. Tenemos por delante un buen trabajo de análisis. Sin embargo, por fines docentes, empezaremos abordando cuestiones más simples como el propio funcionamiento de la calculadora. Los tests de aceptación iniciales son:
"2 + 2", devuelve 4 "5 + 4 * 2 / 2", devuelve 9 "3 / 2", produce el mensaje ERROR "* * 4 - 2": produce el mensaje ERROR "* 4 5 - 2": produce el mensaje ERROR "* 4 5 - 2 -": produce el mensaje ERROR "*45-2-": produce el mensaje ERROR
Estos ejemplos de funcionamiento parecen una chorrada pero si no estuvieran ahí, podríamos haber pensado que se requerían paréntesis para definir la precedencia de los operadores o que la notación de los comandos era polaca inversa. A través de los ejemplos queda claro que los diferentes elementos del comando se operan según la precedencia, donde la multiplicación y la división se operan antes que la suma y la resta.
Y también sabemos que un resultado con decimales, no se permite porque nuestra aritmética básica trabaja únicamente con enteros. Otra cosa que queda clara es que los operadores y operandos de la expresión se separan por un espacio o sea, que las expresiones son cadenas de texto.
Lógicamente hay más ejemplos pero vamos a empezar la implementación ya para no dilatar más el análisis. Así de paso vemos el caso en que descubrimos nuevos requisitos de negocio cuando ya estamos implementando código, algo que sucede la gran mayoría de las veces. Manos a la obra.