BDD tiende un puente para que los expertos del negocio y los informáticos se entiendan sin fisuras. BDD alienta la colaboración, construye compresión compartida sobre el comportamiento esperado del sistema, produce documentación que guía el desarrollo y permite validar el comportamiento del sistema de forma automática.
Trabajando en rápidos y pequeños ciclos mejora la retroalimentación y el flujo de valor. Hacer BDD es hacer tres cosas una y otra vez: se toma una pequeña funcionalidad y se conversa sobre los detalles de cómo se espera que el sistema se comporte usando ejemplos concretos, luego se documentan esos ejemplos en una forma en la cual se pueden automatizar y se corrobora que hay acuerdo, para terminar se codifica con lenguaje Guerkin el comportamiento descrito en cada ejemplo. A estas tres actividades se las llama: Descubrir, formular y automatizar.
La idea es hacer cada nueva funcionalidad en partes muy pequeñas (ejemplos) e iterar rápidamente. Cada vez que se implementa un ejemplo se añade algo valioso al sistema y se está en disposición de responder a posibles cambios como resultado de la retroalimentación recogida de los expertos en el negocio. Los ejemplos documentados guían el desarrollo y permiten al equipo tener confianza y progresar en la construcción del sistema. A la documentación que se va construyendo se le llama “documentación viva” porque el código representa la documentación y la documentación refleja el conocimiento compartido del equipo sobre lo que el código hace. Cucumber es una herramienta que sirve para hacer BDD y se va a usar a continuación para mostrar un ejemplo de lo explicado hasta aquí.
El ejemplo está basado en el curso online que suministran en Escuela Cucumber de forma gratuita, sólo hay que registrarse. El ejemplo tiene la siguiente estructura.
El contenido de Belly.feature es la codificación del ejemplo en Guerkin. La idea expresada es que si comes menos de 42 galletas y pasa más de una hora vas a estar hambriento y tu estómago va a gruñir, pero si has tomado más de 42 galletas no gruñirá.
La implementación del ejemplo para que la librería de Cucumber pueda ejecutar la prueba escrita en Guerkin en Belly.feature está en StepsBelly.java.
La funcionalidad del negocio está en Belly.java, esta aplicación determina si la barriga(belly) está llena o no después de haber transcurrido una hora y haber consumido una determinada cantidad de galletas.
Resumen
Estos tres ficheros son una pequeña muestra de lo que BDD, Guerkin y Cucumber pueden hacer para mejorar el desarrollo de software.
- Belly.Feature está escrito en un lenguaje entendible por el usuario y expresa lo que él espera que el sistema haga.
- StepsBelly.java es la implementación en java de Belly.Feature, cuando se ejecuta valida lo que se espera que haga la aplicación. Hay que tener en cuenta que lo que se espera que haga la aplicación lo ha escrito el experto en el negocio.
- Belly.java es la aplicación cuya funcionalidad se comprueba automáticamente con StepsBelly.java que se ejecuta con Cucumber.
No hay fisuras posibles entre lo que quiere el experto en el negocio y lo que codifica el desarrollador. Bueno hay que estudiar cómo usar todo esto en el mundo real, pero eso es otra historia…..