BDD
Helder De Oliveira
@HelderDOliveira
Waterfall
Análisis
Diseño
Desarrollo
Pruebas
Requisitos
Test First
Análisis
Diseño
Requisitos
Desarrollo Pruebas
Test-Driven Design
Análisis
Diseño
Requisitos
Desarrollo
Pruebas
Test-Driven Design
TDD se centra en pequeños pasos desde
dentro hacia fuera, en lugar de
especificaciones de negocio
pruebas fallando
prueba pasandorafactorizar
Behavior-Driven Design
Análisis
Diseño
Requisitos
Desarrollo
Pruebas
Behavior-Driven Development
BDD se centra en los mejores hábitos de
TDD:
● Va desde fuera hacia dentro
basándose en objetivos de negocio
● Usa ejemplos descriptivos
● Se centra en el lenguaje ubicuo
Modelo
Story: Returns go to stock
In order to keep track of stock
As a store owner
I want to add items back to stock when they're returned
Scenario 1: Refunded items should be returned to stock
Given a customer previously bought a black sweater from me
And I currently have three black sweaters left in stock
When he returns the sweater for a refund
Then I should have four black sweaters in stock
Scenario 2: Replaced items should be returned to stock
Given that a customer buys a blue garment
And I have two blue garments in stock
And three black garments in stock.
When he returns the garment for a replacement in black,
Then I should have three blue garments in stock
And two black garments in stock
Ej: Concordion
Especificación
en formato
HTML
Sistema a probar
Fixture que
enlaza la
especificación
con el sistema a
probar
Beneficios
● Guía precisa de conversación entre el
equipo y el product owner
● Plantillas como given-then-when son
muy cercanas a las conversaciones
diarias
● Las especificaciones son ejecutables
Herramientas
● junit: http://junit.org/
● Concordion: http://concordion.org/
● Cucumber: http://cukes.info/
● JBehave: http://jbehave.org/
● Jasmine: http://jasmine.github.io/
Proceso simplificado
pruebas unitaria
fallando
prueba unitaria
pasando
rafactorizar
prueba de aceptación
fallando
prueba de aceptación
pasando
DEMO
Demo - pom.xml - dependencia
<dependencies>
<dependency>
<groupId>org.concordion</groupId>
<artifactId>concordion</artifactId>
<version>1.4.4</version>
</dependency>
</dependencies>
Demo - pom.xml - salida
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemProperties>
<property>
<name>concordion.output.dir</name>
<value>target/concordion</value>
</property>
</systemProperties>
</configuration>
</plugin>
</plugins>
</build>
Demo - estructura
Demo - Especificación de Concordion
<html xmlns:concordion="http://www.concordion.
org/2007/concordion">
<head>
<title>Configuracion</title>
</head>
<body>
<h1>REQ-001 Config</h1>
<p>
Provee las características para sumar dos enteros. Ejemplo:
<span concordion:set="#a">2</span> mas
<span concordion:set="#b">5</span> debe dar
<span concordion:assertEquals="getTestResult(#a,#b)"
>7</span>.
</p>
</body>
</html>
Demo - Fixture de Concordion
package exampleapp.spec.config;
import exampleapp.Configuration;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
@RunWith(ConcordionRunner.class)
public class ConfigTest {
public int getTestResult(int a, int b) {
Configuration conf = new Configuration();
return conf.addTwoIntegers(a, b);
}
}
Demo - Usando tablas
<table concordion:execute="#result = getTestResult(#a,#b)">
<tr>
<th concordion:set="#a">Primer numero</th>
<th concordion:set="#b">Segundo numero</th>
<th concordion:assertEquals="#result">Resultado</th>
</tr>
<tr><td>1</td><td>1</td><td>2</td></tr>
<tr><td>2</td><td>2</td><td>4</td></tr>
<tr><td>3</td><td>4</td><td>7</td></tr>
<tr><td>4</td><td>8</td><td>12</td></tr>
<tr><td>5</td><td>16</td><td>21</td></tr>
<tr><td>6</td><td>32</td><td>38</td></tr>
</table>
Referencias
● BDD: http://guide.agilealliance.
org/guide/bdd.html
● BDD in action: http://www.manning.
com/smart/
(julio 2014)
Referencias
Diferencias entre TDD y BDD
Referencias
BDD en 5 minutos por Corey Haines
https://vimeo.com/23061155
Kata
Kata
String Calculator BDD
https://github.com/hemarque/stringcalculator-bdd
Otras
http://codekata.com/
System.exit(0);
http://www.mundoagil.es
http://about.me/helderdeoliveira

Bdd (Behavior Driven Development)