¿Qué es BDD? Behavior Driven Development

Seguro han escuchado hablar de BDD, sigla de Behaviour Driven Development, pero que es BDD testing y por qué lo querría implementar en un proyecto de testing automatizado?

Lo primero a destacar es que BDD es una extension de TDD, una metodología de desarrollo conocida como Test Driven Development donde diseñamos todos los casos de prueba antes de comenzar a escribir el código fuente.

que es bdd

¿Qué significa BDD?

BDD significa Behaviour Driven Development, o desarrollo orientado al comportamiento, y en este post te muestro ejemplos para que lo puedas utilizar.

Es una convencion que nos permite escribir el comportamiento de un sistema en lenguaje natural para que pueda ser entendido por todos los actores en juego (programadores, analistas, product owners, etc).

¿Qué son las pruebas BDD?

BDD es un proceso Agile de desarrollo de software que fomenta la colaboracion entre diferentes actores en un equipo de desarrollo. Como mencione anteriorment, estos actores pueden ser los testers, programadores, product owners, project managers, etc.

BDD se basa en utilizar lenguaje natural, algo que todos los actores en el proyecto conocen, para definir el comportamiento de una aplicación en desarrollo, respetando un determinado formato.

BDD vs TDD

BDD es una evolucion de TDD que nos permite enfocarnos en pruebas funcionales que ayuden a validar no solo la aplicacion bajo prueba desde el punto de vista de ingenieria si no que tambien ayuda a validarla desde el punto de vista del negocio. Por esta razon TDD se enfoca mas en pruebas unitarias mientras que BDD se enfoca en pruebas funcionales.

Que es Gherkins?

Gherkins es un lenguaje orientado al negocio que nos permite definir el comportamiento de un sistema de forma facil, tan solo siguiendo una convencion.

Gherkins no habla de detalles, simplemente a alto nivel nos explica que debe ocurrir frente a una serie de pasos realizada por un actor en el sistema.

Ejemplos de BDD:

BDD utiliza Gherkins, que como dije anteriorment, se basa en lenguaje natural, siguiendo ciertas convenciones, para hablar entre negocio y tecnología.

Bueno, para entender BDD, que fue introducido por Dan North en 2009, lo mejor es poner un ejemplo concreto:

Supongamos que estamos creando un sistema para una tienda y una de las funcionalidades de la aplicación es que el gerente de la tienda puede aceptar devoluciones de artículos, con lo cual se vuelven a sumar al stock.

Ejemplo de Feature File:

Título: Devolución y cambios en el inventario

Como gerente de la tienda,
Quiero poder sumar articulos devueltos al inventario
a modo de tener un control de stock correcto

Escenario 1: Los artículos devueltos deben ser agregados al inventario
Dado que un cliente devuelve un pantalón que había comprado
y en el inventario hay 5 pantalones
cuando el cliente devuelve el pantalon
entonces deberían aparecer 6 pantalones en el inventario

Como vemos en el ejemplo de arriba, tenemos ciertos elementos a destacar en el formato BDD:

  • Titulo
  • Narrativa
  • Criterio de aceptacion

Cada uno de estos elementos representa una convencion que todos los actores pueden utilizar para escribir criterios de aceptacion y para leerlos a modo de programarlos, testearlos o validarlos. También cabe destacar que la mayoria de las veces vamos a ver esto en ingles, ya que es una convencion explicita que se usa aunque el proyecto sea en espanol.

En pruebas automatizadas

La idea ahora es poner esto en practica, por lo que vamos a tomar el proyecto que teníamos en nuestro articulo como automatizar pruebas de software y aplicar BDD a uno de los casos de prueba que ahí tenemos:

@Test
 public void myFirstTest()
    {
        driver.findElement(By.className("cs-icon-search")).click();
        driver.findElement(By.className("search-field")).sendKeys("la regla de los dos minutos");
        driver.findElement(By.className("search-submit")).click();
    }

Cómo podemos ver es un test muy simple, que ingresa a El Blog de Santi, escribe una busqueda en el campo correspondiente y hace click en el icono de búsqueda. Vamos a escribir esto en BDD.

Ejemplo de escenario en BDD:

Given I enter the website www.elblogdesanti.com

When I write a text on the search box
And I click on the search Icon
Then I must see the result page

Como vemos es muy entendible ya que es lenguaje natural, por lo que cualquier persona que no sea tecnica lo va a poder entender o escribir.

Una vez que identificamos los paso, lo que debemos hacer es mapear cada uno de esos pasos descritos arriba, a un código java que haga lo indicado en cada paso, a este código java lo llamaremos Definición de pasos, o Step definition como lo vamos a ver la mayoría de las veces.

¿Cuando conviene utilizar BDD?

Como podemos ver, el desarrollo basado en comportamiento (BDD) nos permite utilizar un lenguaje natural, para definir el comportamiento de una aplicación, y poder implementar ese lenguaje en código que nos permita ejecutar lo que estamos definiendo de forma transparente para las personas no técnicas que utilizan el modelo.

Si les interesa aprender mas sobre BDD les recomiendo que aprendan a utilizar Cucumber, herramienta que permite implementar BDD en distintos lenguajes de programación y frameworks, y que cuenta con extensiones para integrar BDD con otras herramientas como Jira, Visual Studio, etc.

¿Cuales son las ventajas de BDD?

El poder utilizar BDD en test automation nos permite utilizar lenguaje natural, en nuestro propio idioma, para definir nuestro negocio y nuestros casos de prueba. De esta manera, se comparte el conocimiento de negocio en todas las etapas de desarrollo, desde la definición de requerimientos, pasando por el código hasta la escritura y automatización de casos de prueba.

Ademas de esto, hay varias ventajas de BDD que aportan valor a la hora de hacer nuestras pruebas:

  • BDD define comportamientos
  • Acorta distancias entre tecnollogía y otras áreas
  • Tiene una curva de aprendizaje mas corta
  • Se adapta bien en las metodologias ágiles
  • No deja lugar a ambiguedades

¿Cuales son los desafíos de BDD?

Los desafíos principales de utilizar BDD en test automation es la necesidad de crear pares de frases (nuestros steps, o pasos) con codigo de programación. Este codigo debe ser atado a las frases en concreto que definimos en nuestros pasos.

¿Cuales son las herramientas mas populares para behaviour driven testing?

Las herramieintas mas comunes para implementar BDD son:

  • Cucumber
  • SpecFlow
  • Behave
  • JBehave
  • JBehave Web
  • Lettuce
  • Concordion
  • Behat
  • Kahlan
  • DaSpec
  • Jasmine
  • Cucumber-js
  • Squish GUI Tester
  • Spock
  • Yadda

Conlusión

Con BDD podemos involucrar diversos actores a la hora de definir, testear y crear nuestro producto, todos compartiendo un lenguaje mas natural, no tan tecnico.

You May Also Like