El BDD o Behavior Driven Development se traduce como Desarrollo Orientado al Comportamiento. Se trata de una metodología ágil para el desarrollo de software, en la que se hace un seguimiento de la experiencia de los usuarios con aquel, y a partir de ahí, se adapta el diseño. Puesto que hoy en día, dicha experiencia se ha convertido en el epicentro de cualquier proyecto, esta filosofía tiene cada vez más importancia.
En este artículo, veremos en detalle en qué consiste y cuáles son los principios que sigue. También algunas herramientas y las ventajas que ofrece.
El BDD testing tiene como objetivo principal solucionar una problemática común que aparece en el entorno del diseño de software. Y es que los desarrolladores utilizan un lenguaje en particular, que puede resultar incomprensible para otras partes implicadas. Por ejemplo, quienes gestionan el proyecto o el equipo del negocio en sí.
El Desarrollo Guiado por Comportamiento parte del TDD o Desarrollo Guiado por Pruebas (Testing Driven Development). Sin embargo, este último se basa en las funcionalidades, pero con el BDD el foco se pone en el comportamiento del sistema y en cómo se relaciona un usuario con este.
Para que haya una comprensión entre todas las partes, se utiliza un lenguaje natural común, en vez de códigos. Es decir, que a medida que se van realizando los análisis del software, tanto el equipo de desarrollo como el del cliente podrán hacer sus aportaciones. Y en función de cuáles sean estas y la experiencia del usuario, se irá adaptando todo el ciclo de vida del software; desde el diseño y el desarrollo hasta llegar al producto final.
Como veremos más adelante, para utilizar BDD se necesitan herramientas que sean capaces de traducir las órdenes que se quieren dar al software en un lenguaje que sea comprensible para este. Esto es, programación.
No obstante, el lenguaje común estructurado que se emplea para los casos de prueba es el Gherkin, y se basa en los principios de Given-When-Then (GWT). El funcionamiento de la metodología sería algo así:
1. Primero, se analizan cuáles son los requisitos que tiene el software. Aquí entrarían los objetivos y las funciones que queremos que desempeñe.
2. En segundo lugar, se crearán varios escenarios para poder describir las funciones. Lo que queremos es observar cómo reacciona nuestro software ante cada situación.
3. Tercero, el software responde. Aquí se analiza su estado y la acción que ha realizado.
Estas tres fases son una síntesis de los elementos Given-When-Then cuando se quiere desarrollar una funcionalidad (Feature). Para que se dé esta, se necesita una serie de características (Scenario), pero habrá que dar un contexto o hacer predicciones para que se ejecuten las acciones necesarias (Given). Además, habrá unas condiciones a la hora de ejecutarlas (When). Finalmente, se obtendrá un resultado determinado (Then).
También se puede usar el patrón Role-Feature-Reason para desarrollar la parte de la funcionalidad o Feature. Consistiría en especificar el cómo o tipo de usuario de la acción; lo que se quiere, que serían las necesidades del usuario, y el para qué, que es el objetivo a cumplir.
Gracias a esta estructura, tanto el equipo de desarrollo como la parte de gestión del proyecto y el cliente podrán participar en la definición del software y en las distintas revisiones que se vayan llevando a cabo.
La estructura que sigue el BDD se sigue mediante el uso de distintas herramientas. Cada una tiene sus propias características y funcionamiento, pero ofrecen los frameworks necesarios para escribir, gestionar y ejecutar los escenarios. Las más conocidas son estas:
- Cucumber. Es la más empleada, ya que usa el lenguaje Gherkin para escribir los escenarios a través de la creación de un usuario real y después ejecutarlos como pruebas unitarias automatizadas. Funciona con Java, JavaScript, Ruby y Kotlin.
- SpecFlow. Es parecida a la anterior, pero su diseño es específico para el entorno .NET. Por tanto, permite la integración con las herramientas de Microsoft.
- Behat. Esta herramienta de BDD es para PHP, que también usa la filosofía del lenguaje natural para definir los diferentes escenarios.
- Gauge. Es un framework de gran versatilidad porque trabaja con varios lenguajes, como JavaScript, C#, Java, Python y Ruby.
- Tricentis Tosca. No requiere secuencias de comandos. Se usa para automatizar pruebas de API e interfaces gráficas de usuario o GUI.
- Jasmine. Se especializa en pruebas de JavaScript. Es fácil de usar y se emplea para aplicaciones web.
Usar esta metodología mejora la comunicación dentro de los equipos y se facilita que todas las personas integrantes puedan avanzar en la misma dirección y con sus opiniones tenidas en cuenta. Más allá de la mejora del software, también se incrementa la participación y la motivación, que repercute directamente en el desarrollo final y, por ende, en la experiencia del usuario.
Para seguir aprendiendo sobre diferentes metodologías y procesos de desarrollo de software, consulta nuestra oferta formativa.