bdd-cucumber-talk



bdd-cucumber-talk

0 0


bdd-cucumber-talk

BDD and Cucumber slide presentation with reveal.js

On Github Graion / bdd-cucumber-talk

# Behaviour Driven Development
BDD > Definición
### *Metodología* de desarrollo de software en el que *se especifica y diseña* una aplicación *mediante la descripción de su comportamiento* para un observador externo.

BDD es TDD sin que sea necesario que todo el equipo del proyecto tenga conocimientos de programación

BDD > Definición > En pocas palabras
### **Usar ejemplos** en múltiples niveles para crear un **entendimiento compartido** para entregar **software de valor**
BDD
# Beneficios en su aplicación
BDD > Beneficios en su aplicación
## Es acerca de compartir comportamientos esperados entre todos los miembros del proyecto
## Guía el desarrollo
## Focaliza el esfuerzo en comprender las reglas del negocio
## Mejora el entendimiento de los requerimientos (incluso para el cliente)
## *Build the right software*
## Releases más confiables
BDD
# Desafíos para su aplicación
BDD > Desafíos para su aplicación
## Requiere compromiso y colaboración de Stakeholders, BA y/o Product Owner
## Escribir escenarios útiles requiere práctica
BDD

Usar ejemplos en múltiples niveles para crear un entendimiento compartido para entregar software de valor

BDD > Usando ejemplos
## Ventajas * Exploramos los requerimientos * Descubrimos lo que no sabemos * Clarificamos ambigüedades * Identificamos asunciones y desentendidos
#### Ejemplo 1 - Escenarios del Piedra, Papel o Tijera ```text Scenario: PIEDRA vs PAPEL Given jugadorUno juega PIEDRA When jugadorDos juega PAPEL Then gana jugadorDos ``` También se puede generalizar ```text Scenario Outline: jugadorUno vs jugadorDos Given jugadorUno juega <elementoUno> When jugadorDos juega <elementoDos> Then <resultado> Examples: | elementoUno | elementoDos | resultado | | PIEDRA | PAPEL | gana jugadorDos | | PIEDRA | PIEDRA | hay empate | | PAPEL | PIEDRA | gana jugadorUno | ```
#### Ejemplo 2 - Escenarios del Frequent Flyer ```text Scenario: New members should start out as Bronze members Given Jill Smith is not a Frequent Flyer member When she registers on the Frequent Flyer program Then she should have a status of Bronze ``` ```text Scenario Outline: Members should get status updates based on status points earned Given a member has a status of <initialStatus> And he has <initialStatusPoints> status points When he earns <extraPoints> extra status points Then he should have a status of <finalStatus> Examples: | initialStatus | initialStatusPoints | extraPoints | finalStatus | | Bronze | 0 | 300 | Silver | | Silver | 0 | 700 | Gold | | Gold | 0 | 150 | Platinum | ```
#### Ejemplo 3 - Escenarios del conversor de monedas ```text Scenario Outline: Comprador cambia pesos por dolares Given comprador paga <pesos> pesos When el tipo de cambio es <cambio> Then comprador adquiere <dolares> dólares Examples: | pesos | cambio | dolares | | 150 | 10.7 | 1605 | | 300 | 9.5 | 2850 | | 590 | 9.9 | 5841 | ```
BDD

Usar ejemplos en múltiples niveles para crear un entendimiento compartido para entregar software de valor

BDD > Entendimiento compartido
![](assets/classical_teams.png) ### Muchos equipos contruyen software de esta manera
![](assets/agile_teams.png) ### _Three amigos_
BDD

Usar ejemplos en múltiples niveles para crear un entendimiento compartido para entregar software de valor

BDD > Software de valor
![](assets/right_software_01.png) ### Comenzamos con un objetivo de negocio
![](assets/right_software_02.png) ### ¿Qué _features_ nos permitirán lograr este objetivo?
![](assets/right_software_03.png) ### Usamos _conversaciones_ en torno a ejemplos para construir nuestro entendimiento sobre los _features_
![](assets/right_software_04.png) ### Podemos automatizar estos ejemplos en forma de _especificaciones ejecutables_
![](assets/right_software_05.png) ### Usamos de BDD a bajo nivel o TDD para definir el comportamiento de los componentes
# Cucumber
Cucumber
## Describe comportamiento en texto plano
## Es un framework de BDD
## Genera documentación del comportamiento de la aplicación
Cucumber
## Implementaciones
Cucumber > Implementaciones
* ### Ruby * ### Java * ### Groovy * ### JavaScript * ### .NET * ### PHP * ### C++
Cucumber
## Componentes
Cucumber > Componentes
![](assets/components.png)
![](assets/components_declarative_vs_imperative.png)
Cucumber
## Mandamientos
Cucumber > Mandamientos
## Los escenarios deben conducir la implementación, no reflejarla
## Los escenarios deben ser escritos antes que el código que implementan dichos _features_
Cucumber
## Componentes de un .feature
Cucumber > Componentes de un .feature
## FEATURE ### Describe brevemente el comportamiento esperado
## BACKGROUND ### Indican uno o más pasos que se ejecutarán antes de cada escenario
## SCENARIO ### Es un caso particular de prueba
## SCENARIO OUTLINE ### Es un template para realizar un conjunto de pruebas generalizadas
## GIVEN ### Indica el cumplimiento de una precondición determinada
## WHEN ### Indica el suceso de un evento determinado
## THEN ### Indica una consecuencia determinada
## No importa el orden `;)`
## Caso de estudio
Caso de estudio
## Shopbeam
Caso de estudio > Shopbeam
## Herramientas
Caso de estudio > Shopbeam > Herramientas
## Capybara + Watir (u otro) * ### Es un framework que ayuda a realizar tests de aceptación sobre aplicaciones web, simulando como un usuario real interactua con ella (web automation) * ### Es agnostico acerca del motor que estamos utilizando para correr los tests * ### WATIR = Web Application Testing in Ruby
## FactoryGirl * ### Es una librería que permite definir objetos (en Ruby) para utilizar como información para nuestros tests * ### Permite tener fixtures de los cuales valernos para los tests que tenemos definidos
Caso de estudio > Shopbeam
## Demo
## ¿Preguntas?
## ¡Muchas gracias!