SlideShare una empresa de Scribd logo
1 de 69
Descargar para leer sin conexión
BDD y Test automatizados
1
Universidad Pontificia de Salamanca
Máster Universitario en Informática Móvil
Sofía Swidarowicz Andrade
17 de Abril de 2015
2
Sofía Swidarowicz Andrade
iOS Developer en Medianet Software
www.phyline.com
Pinitos con BDD
Información: ¡Quiero compartirla!
¿De qué hablaremos hoy?
3
Historia del desarrollo ágil
- Scrum
- Kanban
- Programación Extrema
- TDD
Behaviour Driven Development
- Estructura proyecto
Historia del Desarrollo Ágil
Edward Deming
Calidad Total
Organización Procesos
Cíclo producción
Esfuerzo en Equipo
4
5
1950 - Ciclo PDCA (Plan, Do, Check,
Act). Walter A, Shewhart
Historia del Desarrollo Ágil
Kent Beck
Patrones de diseño de software
Smalltalk
Desarrollo guiado por pruebas
6
Software de programación extrema o
eXtreme Programming
Metodología Ágil
• Reconoce las distintas interacciones y cambios que
ocurren en todo desarrollo de software
• Desarrollar software no es un proceso que involucra
sólo al desarrollador (pica código) sino a todos los
participantes del ciclo
7
1995 - Scrum
Product Backlog Sprint Planning Sprint Backlog
N Weeks
Sprint
Retrospective
Finished Work
8
Stakeholders
Product Owner
Scrum Master
Team Members
9
1997 - Desarrollo guiado por
funcionalidades / Feature Driven
Development (FDD)
TDD - Test Driven Development
Primero
desarrollamos el
test,
y luego la aplicación
Realizar pruebas
unitarias
para el código que
debemos construir
10
1999 - Programación Extrema /
Extreme Programming (XP)
Historias de Usuario y
Planificación de
Releases
11
1999 - Programación Extrema /
Extreme Programming (XP)
- JUnit
- TDD
- Refactor
Integración
continua
12
2007 - Kanban para el desarrollo de software
Roles y
Procesos
13
Desarrollo guiado por comportamiento /
Behaviour Driven Development by Dan North
implementar una aplicación, o parte de
ella, mediante la descripción de su
comportamiento desde la perspectiva del
cliente
+
14
BDD - Behaviour Driven Development
Comunicación
Se usan ejemplos para ilustrar comportamientos
“The Business, Developers,
Testers,
Analysts and Managers”
15
16
Imagina que eres parte del equipo técnico (Desarrollador y
Testers) y tienes la tarea de colaborar con el equipo de
negocio (Business owners y Business Analysts).
Tienes que recabar los requerimientos de tu proyecto; estos
requerimientos serán los que el equipo de desarrollo
implementarán y los que el equipo de testing probarán.
Un ejemplo:
17
Un ejemplo:
18
Deberás añadir una característica nueva de búsqueda en tu
plataforma de E-Commerce móvil, que permitirá a los usuarios
hacer búsquedas de un producto en tu aplicación.
Esa búsqueda deberá mostrar los productos relacionados con el
patrón dado por el cliente.
1. Requisitos Funcionales
1.1 Funcionalidad de búsqueda
1.1.1 El usuario debe ser capaz de buscar un
producto.
1.1.2 Sólo los productos relacionados al string de
búsqueda deben ser mostrados.
Terminamos con:
19
BDD - Behaviour Driven Development
BDD - Behaviour Driven Development
¡Lo tenemos claro!
20
BDD - Behaviour Driven Development
Pero….
No especifican el comportamiento concreto del
sistema
Diseccionemos el primer punto:
1.1.1 El usuario debe ser capaz de buscar un producto.
21
BDD - Behaviour Driven Development
- ¿Cuál es la máxima longitud de la cadena en la
búsqueda?
Pero no especifica…
22
- ¿Cuál debería ser el resultado de la búsqueda
para un producto inválido?
- ¿Cuáles son los caracteres válidos que pueden
ser usados para la búsqueda?
BDD - Behaviour Driven Development
- Respuesta del Business Owner : La búsqueda
de productos no válidos deberían mostrar el
siguiente mensaje en el área de búsqueda:
Producto no encontrado.
Terminamos preguntando…de nuevo
23
- Pregunta al Business Owner : ¿Cuáles deberían
ser los resultados de la búsqueda si el usuario
busca un producto inválido?
BDD - Behaviour Driven Development
Interpretaciones múltiples o dudas
Problemas…
Algunos considerarán que un producto inválido
es aquel que no está presente en el inventario y
otros podrían considerarlo como un error en la
cadena de búsqueda
¿Qué es un producto inválido?
24
BDD - Behaviour Driven Development
No ofrecen más explicaciones de comportamiento
Problemas…
“Producto no encontrado”
25
¿se mostrará una nueva opción de
búsqueda al usuario?.
¿deberían mostrarse búsquedas similares/relacionadas?
BDD - Behaviour Driven Development
¿Qué concluimos?
1.- Los equipos de negocio y técnico se comunican
en dos niveles diferentes, el primero da requisitos
vagos y el segundo intenta ser muy preciso. Y ambos
obtienen resultados ambiguos.
26
2.- No se le da suficiente información al equipo de
negocio, así que no pueden generar nuevos escenarios.
Algunos detalles del proyecto se pierden en emails y
conversaciones telefónicas.
BDD - Behaviour Driven Development
¿Cómo podemos mejorar los requerimientos?
27
BDD - Behaviour Driven Development
“Cuándo el usuario busque, sin fallos de ortografía, el nombre
de un producto presente en el inventario. Todos los productos
con nombre similar deberán ser mostrados”.
Escribimos…Historias de Usuario
28
BDD - Behaviour Driven Development
Escribimos…Historias de Usuario
29
“Cuándo el usuario busque, sin fallos de ortografía, por el
nombre de un producto presente en el inventario. Los
resultados de la búsqueda deberían mostrar los
coincidentes primero y segundo los similares.”
BDD - Behaviour Driven Development
30
BDD - Behaviour Driven Development
Escribiremos los requisitos empleando
lenguaje natural (Human reading) en
inglés
Es necesario emplear un lenguaje que todo
el equipo pueda entender y exprese los
requisitos que se deben cumplir.
31
¡¡¡Entonces!!!
Requisitos
BDD - Behaviour Driven Development
criterio de
aceptación
Historias de
Usuario
32
BDD - Behaviour Driven Development
¿Cómo escribimos las Historias de Usuario?
As a [role] I want to [do] [something], so that I
[receive business benefit].
Tal que [rol] quiero [hacer] [algo], de tal forma
que [recibo beneficios].
33
BDD - Behaviour Driven Development
De manera que <suceda algo>
Escenario: <Descripción de la historia>
Como <rol>

Quiero <acción>

¿Cómo escribimos las Historias de Usuario?
34
BDD - Behaviour Driven Development
Given (Dado)
When (Cuando)
Then (Entonces)
And (Y), But (Pero)
Llevará al sistema a un estado conocido
antes de interactuar con el usuario
https://github.com/cucumber/cucumber/wiki/Given-When-Then
Describe la acción clave que
realiza el usuario
Salida resultados observables
relacionados al valor o beneficio
del negocio
Para separar cuando se tienen
muchos Givens o Then
35
BDD - Behaviour Driven Development
Gherkin
When some action by the actor
Feature
Background:
Scenario: Some determinable business situation
Given some precondition
And some other precondition
And some other action
And something else we can check happens too
And yet another action
Then some testable outcome is achieved
36
BDD - Behaviour Driven Development
Feature: Search for items in our mobile app
This feature is very important because it will allow users to
filter products
Scenario: When a user searches, without spelling mistake,
for a product name present in inventory. All the products
with equal name should be displayed first and second the
similar
37
BDD - Behaviour Driven Development
38
Given User is on the main page of our app
When User goes to the search bar
And searches for iPhones
Then search page should be updated with the lists of iPhone first
And show the similar next
BDD - Behaviour Driven Development
Historias de
Usuario
Escenario
+
criterio de
aceptación
39
El código debe evaluarse continuamente para asegurar
que se realizan las especificaciones del cliente
BDD - Behaviour Driven Development
¿Cómo compruebo que el proyecto avanza
de acuerdo a las especificaciones?
40
BDD - Behaviour Driven Development
…¿Y Ahora? ¿cómo implemento todo esto?
41
BDD - Behaviour Driven Development
1.- Se elige un escenario.
2.- Se implementa el código
3.- ¿Pasa la prueba?
No —> Vuelve al paso 2
4.- Cuando pase el test se da por bueno
5.- Done con este escenario
42
BDD - Behaviour Driven Development
y vuelvo a evaluar.
Evolutivo
1.- Se hace una modificación.
2. Se pasa un test: ERROR
A: Si escenario correcto, he metido un bug.
B: Si la prueba no se ajusta al código, modifico la prueba
C: Si la especificación a cambiado, desecho la prueba
43
BDD - Behaviour Driven Development
1.- Se elige un escenario.
2.- Se implementa el código
3.- ¿Pasa la prueba?
No —> Vuelve al paso 2
4.- Cuando pase el test se da por bueno
5.- Done con este escenario
1.- Se elige un escenario.
2.- Se implementa el código
3.- ¿Pasa la prueba?
No —> Vuelve al paso 2
4.- Cuando pase el test se da por bueno
5.- Done con este escenario
1.- Se elige un escenario.
2.- Se implementa el código
3.- ¿Pasa la prueba?
No —> Vuelve al paso 2
4.- Cuando pase el test se da por bueno
5.- Done con este escenario
44
BDD - Behaviour Driven Development
Automatización
45
BDD - Behaviour Driven Development
Gherkin
+
46
BDD - Behaviour Driven Development
47
¿Cómo se comunica Cucumber con las diferentes
plataformas?
Cedar
48
iCuke
Kiwi
KIF
Robospock
Robotium
49
¿Cómo se comunica Cucumber con las diferentes
plataformas?
Espresso
(iOS-Android)
(Android)
Selenium
(Android)
50
¿Cómo se comunica Cucumber con las diferentes
plataformas?
¿Cómo se comunica Cucumber con las diferentes
plataformas?
Gestos: tocar, swipes, escribir
Aserciones: comprobar que el elemento existe
o posee cierta información
Screenshots: captura de pantalla del estado del
dispositivo
52
¿Cómo se comunica Cucumber con las diferentes
plataformas?
Conjunto de librerías que permiten probar la
funcionalidad de aplicaciones nativas o híbridas
iOS
Client Computer
Calabash ruby client
library
Calabash
http Server
Device / Simulator
UIAutomator
Your App
Calabash
Framework
Features
http://blog.lesspainful.com/2012/03/07/Calabash/
53
¿Cómo se comunica Calabash con las diferentes
plataformas?
Android
Client Computer
Calabash ruby client
library
Calabash
http Server
Device / Simulator
Instrumentation
Features
http://blog.lesspainful.com/2012/03/07/Calabash/
Your App
54
¿Cómo se comunica Calabash con las diferentes
plataformas?
iOS
AccessibilityIdentifier
UI Elements
¿Cómo identifico a los elementos con los que voy a
interactuar?
55
Android
id UI elements
56
¿Cómo identifico a los elementos con los que voy a
interactuar?
Web
css elements
id elements
57
¿Cómo identifico a los elementos con los que voy a
interactuar?
BDD - Behaviour Driven Development
Escenarios
Feature: Login
@invalid

Scenario: Add site - Invalid login
Given I am about to login
When I enter invalid credentials
Then I am presented with an error message to correct credentials
@valid

Scenario: Add site
Given I am about to login
When I enter valid credentials
Then I am successfully authenticated
And I can see posts for the site
Tags
Tags
58
BDD - Behaviour Driven Development
Given(/^I am about to login$/) do
@current_page = page(LoginPage).wait_for_element(timeout: 30)
@current_page.self_hosted_site
end
When(/^I enter invalid credentials$/) do
user = CREDENTIALS[:invalid_user]
@current_page = @current_page.login(user[:username], user[:password],
CREDENTIALS[:site])
end
Then(/^I am presented with an error message to correct credentials$/) do
#TODO
end
Steps
59
BDD - Behaviour Driven Development
Page Objects / Screen Objects
class LoginPage
elementLabel : {
:iOS => (“UILabel id:’labelTitle’ ”);
:android => (“com.myapp.label id:’labelTitle’ ”)
}
elementButton : {
:iOS => (“UIButton id:’btnLogin’ ”);
:android => (“com.myapp.buttonLogin id:’btnLogin’ ”)
}
elementUser : {
:iOS => (“UITextField id:’txtUser’ ”);
:android => (“com.myapp.textField id:’txtPassword’ ”)
}
def wait_for_element(timeout)
wait(elementLabel, timeout: 30)
end
def login(user, password)
fill(elementUser, user)
fill(elementUser, password)
touch(elementButton)
end
end
60
BDD - Behaviour Driven Development
Estructura de un proyecto en Cucumber
config
├ features <- Dónde irán las features

│ ├ android <- Definiciones concretas para Android
│ │ ├ pages <- Screen Objects para Android

│ │ ├ support <- Soporte para Android

│ ├ ios

│ │ ├ pages <- Definiciones concretas para iOS

│ │ ├ support <- Screen Objects para iOS

│ ├ step_definitions <- Definición de los steps

│ ├ support <- Soporte genérico

├ apps <- Guardaremos los binarios de las apps
61
<- Guardaremos la config genérica

BDD - Behaviour Driven Development
VAMOS A PRACTICARRRRRR!!!!!
62
BDD - Behaviour Driven Development
63
Debo ser un usuario con credenciales válidas
Quiero realizar una app que liste a mis superheroes
favoritos
¿Qué haremos?
Debo poder registrarme
Debo poder ver el detalle de mis superheroes
ETC, vamos a crear nuevos escenarios
BDD - Behaviour Driven Development
64
Given I am in login screen
Then I’m inside my application
Scenario: I want to access Superheroes app
When I fill valid“username” and “password” information
And try to log in successfully
Imperativo
And I see my superheroes list
BDD - Behaviour Driven Development
65
Given I am an unauthenticated guest
And I have a valid user account
When I log in
Then I’m inside my application
Scenario: I want to access Superheroes app
When I try to access restricted area
Declarativo
And I see my superheroes list
BDD - Behaviour Driven Development
66
https://github.com/phynet/BDD-CALABASH-Example
Descargar:
https://github.com/phynet/Heroes-iOS-Calabash-Example
https://github.com/phynet/Heroes-Android-Calabash-Example
Proyecto BDD:
Binary iOS:
Binary Android:
Enlaces de interés
https://groups.google.com/forum/#!forum/calabash-ios
67
Calabash-ios groups foro
https://groups.google.com/forum/#!forum/calabash-
android
Calabash-android groups foro
Enlaces de interés
http://developer.xamarin.com/guides/testcloud/calabash/
68
Xamarin calabash
http://developer.xamarin.com/guides/testcloud/calabash/
calabash-query-syntax/#Touching
Xamarin query
Enlaces de interés
https://github.com/calabash/calabash-ios
69
Calabash-ios github
https://github.com/calabash/calabash-android
Calabash-android github

Más contenido relacionado

La actualidad más candente

40 Agile Methods in 40 Minutes
40 Agile Methods in 40 Minutes40 Agile Methods in 40 Minutes
40 Agile Methods in 40 MinutesCraig Smith
 
Agile methodology
Agile methodologyAgile methodology
Agile methodologyTyler Rose
 
Agile2013 sustainable change
Agile2013 sustainable changeAgile2013 sustainable change
Agile2013 sustainable changeDennis Stevens
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub ActionsKnoldus Inc.
 
Understand regression testing
Understand regression testingUnderstand regression testing
Understand regression testinggaoliang641
 
Mulesoft: Plataforma empesarial de integraciones
Mulesoft: Plataforma empesarial de integracionesMulesoft: Plataforma empesarial de integraciones
Mulesoft: Plataforma empesarial de integracionesLarry Magallanes
 
Automation for JIRA - The Simplest Way to Automate Your Team and Project
Automation for JIRA - The Simplest Way to Automate Your Team and ProjectAutomation for JIRA - The Simplest Way to Automate Your Team and Project
Automation for JIRA - The Simplest Way to Automate Your Team and ProjectBosnia Agile
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvcleopp
 
Introduction to Gitlab
Introduction to GitlabIntroduction to Gitlab
Introduction to GitlabJulien Pivotto
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...Rodrigo Oliveira, Msc, PMP
 

La actualidad más candente (20)

Agile
AgileAgile
Agile
 
40 Agile Methods in 40 Minutes
40 Agile Methods in 40 Minutes40 Agile Methods in 40 Minutes
40 Agile Methods in 40 Minutes
 
Agile methodology
Agile methodologyAgile methodology
Agile methodology
 
Agile2013 sustainable change
Agile2013 sustainable changeAgile2013 sustainable change
Agile2013 sustainable change
 
Advanced agile scrum- Demo PPT
Advanced agile scrum- Demo PPTAdvanced agile scrum- Demo PPT
Advanced agile scrum- Demo PPT
 
Git / Guía Básica
Git / Guía BásicaGit / Guía Básica
Git / Guía Básica
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Understand regression testing
Understand regression testingUnderstand regression testing
Understand regression testing
 
Mulesoft: Plataforma empesarial de integraciones
Mulesoft: Plataforma empesarial de integracionesMulesoft: Plataforma empesarial de integraciones
Mulesoft: Plataforma empesarial de integraciones
 
Tdd and bdd
Tdd and bddTdd and bdd
Tdd and bdd
 
Automation for JIRA - The Simplest Way to Automate Your Team and Project
Automation for JIRA - The Simplest Way to Automate Your Team and ProjectAutomation for JIRA - The Simplest Way to Automate Your Team and Project
Automation for JIRA - The Simplest Way to Automate Your Team and Project
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvc
 
Introduction to Gitlab
Introduction to GitlabIntroduction to Gitlab
Introduction to Gitlab
 
Git hub
Git hubGit hub
Git hub
 
Git hooks
Git hooksGit hooks
Git hooks
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...
 
Introducción a git y git hub
Introducción a git y git hubIntroducción a git y git hub
Introducción a git y git hub
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Why Microservices
Why MicroservicesWhy Microservices
Why Microservices
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
 

Destacado

BDD en 5 minutos
BDD en 5 minutosBDD en 5 minutos
BDD en 5 minutosAdrian Moya
 
BDD - Configuración de un proyecto móvil (iOS - Android)
BDD - Configuración de un proyecto móvil (iOS - Android)BDD - Configuración de un proyecto móvil (iOS - Android)
BDD - Configuración de un proyecto móvil (iOS - Android)Sofia Swidarowicz
 
Introducción a Behaviour Driven Development
Introducción a Behaviour Driven DevelopmentIntroducción a Behaviour Driven Development
Introducción a Behaviour Driven DevelopmentRicardo Markiewicz
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Agustin Ramos
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoAgustin Ramos
 
Eliminando la brecha entre clientes y desarrolladores mediante BDD
Eliminando la brecha entre clientes y desarrolladores mediante BDDEliminando la brecha entre clientes y desarrolladores mediante BDD
Eliminando la brecha entre clientes y desarrolladores mediante BDDJorge Gamba
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven DevelopmentAlberto Perdomo
 
Ej 2.3 empresa
Ej 2.3 empresaEj 2.3 empresa
Ej 2.3 empresalitri6692
 
Investigación 3 pres. 1 dinero electronico
Investigación 3 pres. 1 dinero electronicoInvestigación 3 pres. 1 dinero electronico
Investigación 3 pres. 1 dinero electronicoElsa de López
 
Las brujas[1]
Las brujas[1]Las brujas[1]
Las brujas[1]titi3
 

Destacado (20)

BDD en 5 minutos
BDD en 5 minutosBDD en 5 minutos
BDD en 5 minutos
 
BDD - Configuración de un proyecto móvil (iOS - Android)
BDD - Configuración de un proyecto móvil (iOS - Android)BDD - Configuración de un proyecto móvil (iOS - Android)
BDD - Configuración de un proyecto móvil (iOS - Android)
 
BDD en practica (seminario)
BDD en practica (seminario)BDD en practica (seminario)
BDD en practica (seminario)
 
Introducción a Behaviour Driven Development
Introducción a Behaviour Driven DevelopmentIntroducción a Behaviour Driven Development
Introducción a Behaviour Driven Development
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamiento
 
Tests de aceptación con cucumber
Tests de aceptación con cucumberTests de aceptación con cucumber
Tests de aceptación con cucumber
 
BDD para la mejora de la calidad software
BDD para la mejora de la calidad softwareBDD para la mejora de la calidad software
BDD para la mejora de la calidad software
 
Eliminando la brecha entre clientes y desarrolladores mediante BDD
Eliminando la brecha entre clientes y desarrolladores mediante BDDEliminando la brecha entre clientes y desarrolladores mediante BDD
Eliminando la brecha entre clientes y desarrolladores mediante BDD
 
BDD TDD ATDD
BDD TDD ATDDBDD TDD ATDD
BDD TDD ATDD
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Selenium
SeleniumSelenium
Selenium
 
Ej 2.3 empresa
Ej 2.3 empresaEj 2.3 empresa
Ej 2.3 empresa
 
Unitking
UnitkingUnitking
Unitking
 
E
EE
E
 
Investigación 3 pres. 1 dinero electronico
Investigación 3 pres. 1 dinero electronicoInvestigación 3 pres. 1 dinero electronico
Investigación 3 pres. 1 dinero electronico
 
Las brujas[1]
Las brujas[1]Las brujas[1]
Las brujas[1]
 
Sharingtrip
SharingtripSharingtrip
Sharingtrip
 
Poliedros
PoliedrosPoliedros
Poliedros
 
Catalunya i la Revolució del Coneixement - Moment Zero 25/11/2014
Catalunya i la Revolució del Coneixement - Moment Zero 25/11/2014Catalunya i la Revolució del Coneixement - Moment Zero 25/11/2014
Catalunya i la Revolució del Coneixement - Moment Zero 25/11/2014
 

Similar a BDD y tests automatizados

Meetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderMeetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderEduardo Riol
 
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoBdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoRoberto Andres Remonda
 
Sesión 2: El proceso del software
Sesión 2: El proceso del softwareSesión 2: El proceso del software
Sesión 2: El proceso del softwareLuis Fernández
 
Modelo de desarrollo de software
Modelo de desarrollo de softwareModelo de desarrollo de software
Modelo de desarrollo de softwareYaskelly Yedra
 
Personal Software Process / Sesion 03
Personal Software Process / Sesion 03Personal Software Process / Sesion 03
Personal Software Process / Sesion 03andres hurtado
 
Sesión 2: Visión General. El proceso del software
Sesión 2: Visión General. El proceso del softwareSesión 2: Visión General. El proceso del software
Sesión 2: Visión General. El proceso del softwareCoesi Consultoria
 
15 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 200915 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 2009Pepe
 
Tech day#7 – especificaciones_ejecutables_y_BDD_con_cucumber_y_selenium
Tech day#7 – especificaciones_ejecutables_y_BDD_con_cucumber_y_seleniumTech day#7 – especificaciones_ejecutables_y_BDD_con_cucumber_y_selenium
Tech day#7 – especificaciones_ejecutables_y_BDD_con_cucumber_y_seleniumEduardo Riol
 
Si la gestión y desarrollo de requisitos es tan importante... ¿Por qué no la...
Si la gestión y desarrollo de requisitos es tan importante...  ¿Por qué no la...Si la gestión y desarrollo de requisitos es tan importante...  ¿Por qué no la...
Si la gestión y desarrollo de requisitos es tan importante... ¿Por qué no la...Pepe
 
Vision práctica del BDD (Behaviour Driven Design) para agilizar el proceso de...
Vision práctica del BDD (Behaviour Driven Design) para agilizar el proceso de...Vision práctica del BDD (Behaviour Driven Design) para agilizar el proceso de...
Vision práctica del BDD (Behaviour Driven Design) para agilizar el proceso de...Software Guru
 
Shift Left: En busca del éxito del software
Shift Left: En busca del éxito del softwareShift Left: En busca del éxito del software
Shift Left: En busca del éxito del softwareMarco Avendaño
 
Paco Ramirez - M.E.A.T. - Make Enviroment Android Tools [rooted2019]
Paco Ramirez - M.E.A.T. - Make Enviroment Android Tools [rooted2019]Paco Ramirez - M.E.A.T. - Make Enviroment Android Tools [rooted2019]
Paco Ramirez - M.E.A.T. - Make Enviroment Android Tools [rooted2019]RootedCON
 
Resumen ejecutivo modelo_evaluación_producto_v3
Resumen ejecutivo modelo_evaluación_producto_v3Resumen ejecutivo modelo_evaluación_producto_v3
Resumen ejecutivo modelo_evaluación_producto_v3BancoEstado
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurancewill2294
 

Similar a BDD y tests automatizados (20)

Meetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderMeetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poder
 
Calidad en Agile - EducacionIT
Calidad en Agile - EducacionITCalidad en Agile - EducacionIT
Calidad en Agile - EducacionIT
 
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoBdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
 
2. El proceso del software
2. El proceso del software2. El proceso del software
2. El proceso del software
 
Sesión 2: El proceso del software
Sesión 2: El proceso del softwareSesión 2: El proceso del software
Sesión 2: El proceso del software
 
Modelo de desarrollo de software
Modelo de desarrollo de softwareModelo de desarrollo de software
Modelo de desarrollo de software
 
Personal Software Process / Sesion 03
Personal Software Process / Sesion 03Personal Software Process / Sesion 03
Personal Software Process / Sesion 03
 
Sesión 2: Visión General. El proceso del software
Sesión 2: Visión General. El proceso del softwareSesión 2: Visión General. El proceso del software
Sesión 2: Visión General. El proceso del software
 
15 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 200915 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 2009
 
Desarrollo ágil enfocado en ux 1 0 0
Desarrollo ágil enfocado en ux 1 0 0Desarrollo ágil enfocado en ux 1 0 0
Desarrollo ágil enfocado en ux 1 0 0
 
Tech day#7 – especificaciones_ejecutables_y_BDD_con_cucumber_y_selenium
Tech day#7 – especificaciones_ejecutables_y_BDD_con_cucumber_y_seleniumTech day#7 – especificaciones_ejecutables_y_BDD_con_cucumber_y_selenium
Tech day#7 – especificaciones_ejecutables_y_BDD_con_cucumber_y_selenium
 
Si la gestión y desarrollo de requisitos es tan importante... ¿Por qué no la...
Si la gestión y desarrollo de requisitos es tan importante...  ¿Por qué no la...Si la gestión y desarrollo de requisitos es tan importante...  ¿Por qué no la...
Si la gestión y desarrollo de requisitos es tan importante... ¿Por qué no la...
 
Vision práctica del BDD (Behaviour Driven Design) para agilizar el proceso de...
Vision práctica del BDD (Behaviour Driven Design) para agilizar el proceso de...Vision práctica del BDD (Behaviour Driven Design) para agilizar el proceso de...
Vision práctica del BDD (Behaviour Driven Design) para agilizar el proceso de...
 
Shift Left: En busca del éxito del software
Shift Left: En busca del éxito del softwareShift Left: En busca del éxito del software
Shift Left: En busca del éxito del software
 
Ingenieria de softwrae vol1 v4 2
Ingenieria de softwrae vol1 v4 2Ingenieria de softwrae vol1 v4 2
Ingenieria de softwrae vol1 v4 2
 
Ingenieria de softwrae vol1 v4 2
Ingenieria de softwrae vol1 v4 2Ingenieria de softwrae vol1 v4 2
Ingenieria de softwrae vol1 v4 2
 
Paco Ramirez - M.E.A.T. - Make Enviroment Android Tools [rooted2019]
Paco Ramirez - M.E.A.T. - Make Enviroment Android Tools [rooted2019]Paco Ramirez - M.E.A.T. - Make Enviroment Android Tools [rooted2019]
Paco Ramirez - M.E.A.T. - Make Enviroment Android Tools [rooted2019]
 
Resumen ejecutivo modelo_evaluación_producto_v3
Resumen ejecutivo modelo_evaluación_producto_v3Resumen ejecutivo modelo_evaluación_producto_v3
Resumen ejecutivo modelo_evaluación_producto_v3
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 
DevOps on AZURE
DevOps on AZUREDevOps on AZURE
DevOps on AZURE
 

BDD y tests automatizados

  • 1. BDD y Test automatizados 1 Universidad Pontificia de Salamanca Máster Universitario en Informática Móvil Sofía Swidarowicz Andrade 17 de Abril de 2015
  • 2. 2 Sofía Swidarowicz Andrade iOS Developer en Medianet Software www.phyline.com Pinitos con BDD Información: ¡Quiero compartirla!
  • 3. ¿De qué hablaremos hoy? 3 Historia del desarrollo ágil - Scrum - Kanban - Programación Extrema - TDD Behaviour Driven Development - Estructura proyecto
  • 4. Historia del Desarrollo Ágil Edward Deming Calidad Total Organización Procesos Cíclo producción Esfuerzo en Equipo 4
  • 5. 5 1950 - Ciclo PDCA (Plan, Do, Check, Act). Walter A, Shewhart
  • 6. Historia del Desarrollo Ágil Kent Beck Patrones de diseño de software Smalltalk Desarrollo guiado por pruebas 6 Software de programación extrema o eXtreme Programming
  • 7. Metodología Ágil • Reconoce las distintas interacciones y cambios que ocurren en todo desarrollo de software • Desarrollar software no es un proceso que involucra sólo al desarrollador (pica código) sino a todos los participantes del ciclo 7
  • 8. 1995 - Scrum Product Backlog Sprint Planning Sprint Backlog N Weeks Sprint Retrospective Finished Work 8 Stakeholders Product Owner Scrum Master Team Members
  • 9. 9 1997 - Desarrollo guiado por funcionalidades / Feature Driven Development (FDD)
  • 10. TDD - Test Driven Development Primero desarrollamos el test, y luego la aplicación Realizar pruebas unitarias para el código que debemos construir 10
  • 11. 1999 - Programación Extrema / Extreme Programming (XP) Historias de Usuario y Planificación de Releases 11
  • 12. 1999 - Programación Extrema / Extreme Programming (XP) - JUnit - TDD - Refactor Integración continua 12
  • 13. 2007 - Kanban para el desarrollo de software Roles y Procesos 13
  • 14. Desarrollo guiado por comportamiento / Behaviour Driven Development by Dan North implementar una aplicación, o parte de ella, mediante la descripción de su comportamiento desde la perspectiva del cliente + 14
  • 15. BDD - Behaviour Driven Development Comunicación Se usan ejemplos para ilustrar comportamientos “The Business, Developers, Testers, Analysts and Managers” 15
  • 16. 16
  • 17. Imagina que eres parte del equipo técnico (Desarrollador y Testers) y tienes la tarea de colaborar con el equipo de negocio (Business owners y Business Analysts). Tienes que recabar los requerimientos de tu proyecto; estos requerimientos serán los que el equipo de desarrollo implementarán y los que el equipo de testing probarán. Un ejemplo: 17
  • 18. Un ejemplo: 18 Deberás añadir una característica nueva de búsqueda en tu plataforma de E-Commerce móvil, que permitirá a los usuarios hacer búsquedas de un producto en tu aplicación. Esa búsqueda deberá mostrar los productos relacionados con el patrón dado por el cliente.
  • 19. 1. Requisitos Funcionales 1.1 Funcionalidad de búsqueda 1.1.1 El usuario debe ser capaz de buscar un producto. 1.1.2 Sólo los productos relacionados al string de búsqueda deben ser mostrados. Terminamos con: 19 BDD - Behaviour Driven Development
  • 20. BDD - Behaviour Driven Development ¡Lo tenemos claro! 20
  • 21. BDD - Behaviour Driven Development Pero…. No especifican el comportamiento concreto del sistema Diseccionemos el primer punto: 1.1.1 El usuario debe ser capaz de buscar un producto. 21
  • 22. BDD - Behaviour Driven Development - ¿Cuál es la máxima longitud de la cadena en la búsqueda? Pero no especifica… 22 - ¿Cuál debería ser el resultado de la búsqueda para un producto inválido? - ¿Cuáles son los caracteres válidos que pueden ser usados para la búsqueda?
  • 23. BDD - Behaviour Driven Development - Respuesta del Business Owner : La búsqueda de productos no válidos deberían mostrar el siguiente mensaje en el área de búsqueda: Producto no encontrado. Terminamos preguntando…de nuevo 23 - Pregunta al Business Owner : ¿Cuáles deberían ser los resultados de la búsqueda si el usuario busca un producto inválido?
  • 24. BDD - Behaviour Driven Development Interpretaciones múltiples o dudas Problemas… Algunos considerarán que un producto inválido es aquel que no está presente en el inventario y otros podrían considerarlo como un error en la cadena de búsqueda ¿Qué es un producto inválido? 24
  • 25. BDD - Behaviour Driven Development No ofrecen más explicaciones de comportamiento Problemas… “Producto no encontrado” 25 ¿se mostrará una nueva opción de búsqueda al usuario?. ¿deberían mostrarse búsquedas similares/relacionadas?
  • 26. BDD - Behaviour Driven Development ¿Qué concluimos? 1.- Los equipos de negocio y técnico se comunican en dos niveles diferentes, el primero da requisitos vagos y el segundo intenta ser muy preciso. Y ambos obtienen resultados ambiguos. 26 2.- No se le da suficiente información al equipo de negocio, así que no pueden generar nuevos escenarios. Algunos detalles del proyecto se pierden en emails y conversaciones telefónicas.
  • 27. BDD - Behaviour Driven Development ¿Cómo podemos mejorar los requerimientos? 27
  • 28. BDD - Behaviour Driven Development “Cuándo el usuario busque, sin fallos de ortografía, el nombre de un producto presente en el inventario. Todos los productos con nombre similar deberán ser mostrados”. Escribimos…Historias de Usuario 28
  • 29. BDD - Behaviour Driven Development Escribimos…Historias de Usuario 29 “Cuándo el usuario busque, sin fallos de ortografía, por el nombre de un producto presente en el inventario. Los resultados de la búsqueda deberían mostrar los coincidentes primero y segundo los similares.”
  • 30. BDD - Behaviour Driven Development 30
  • 31. BDD - Behaviour Driven Development Escribiremos los requisitos empleando lenguaje natural (Human reading) en inglés Es necesario emplear un lenguaje que todo el equipo pueda entender y exprese los requisitos que se deben cumplir. 31 ¡¡¡Entonces!!!
  • 32. Requisitos BDD - Behaviour Driven Development criterio de aceptación Historias de Usuario 32
  • 33. BDD - Behaviour Driven Development ¿Cómo escribimos las Historias de Usuario? As a [role] I want to [do] [something], so that I [receive business benefit]. Tal que [rol] quiero [hacer] [algo], de tal forma que [recibo beneficios]. 33
  • 34. BDD - Behaviour Driven Development De manera que <suceda algo> Escenario: <Descripción de la historia> Como <rol>
 Quiero <acción>
 ¿Cómo escribimos las Historias de Usuario? 34
  • 35. BDD - Behaviour Driven Development Given (Dado) When (Cuando) Then (Entonces) And (Y), But (Pero) Llevará al sistema a un estado conocido antes de interactuar con el usuario https://github.com/cucumber/cucumber/wiki/Given-When-Then Describe la acción clave que realiza el usuario Salida resultados observables relacionados al valor o beneficio del negocio Para separar cuando se tienen muchos Givens o Then 35
  • 36. BDD - Behaviour Driven Development Gherkin When some action by the actor Feature Background: Scenario: Some determinable business situation Given some precondition And some other precondition And some other action And something else we can check happens too And yet another action Then some testable outcome is achieved 36
  • 37. BDD - Behaviour Driven Development Feature: Search for items in our mobile app This feature is very important because it will allow users to filter products Scenario: When a user searches, without spelling mistake, for a product name present in inventory. All the products with equal name should be displayed first and second the similar 37
  • 38. BDD - Behaviour Driven Development 38 Given User is on the main page of our app When User goes to the search bar And searches for iPhones Then search page should be updated with the lists of iPhone first And show the similar next
  • 39. BDD - Behaviour Driven Development Historias de Usuario Escenario + criterio de aceptación 39
  • 40. El código debe evaluarse continuamente para asegurar que se realizan las especificaciones del cliente BDD - Behaviour Driven Development ¿Cómo compruebo que el proyecto avanza de acuerdo a las especificaciones? 40
  • 41. BDD - Behaviour Driven Development …¿Y Ahora? ¿cómo implemento todo esto? 41
  • 42. BDD - Behaviour Driven Development 1.- Se elige un escenario. 2.- Se implementa el código 3.- ¿Pasa la prueba? No —> Vuelve al paso 2 4.- Cuando pase el test se da por bueno 5.- Done con este escenario 42
  • 43. BDD - Behaviour Driven Development y vuelvo a evaluar. Evolutivo 1.- Se hace una modificación. 2. Se pasa un test: ERROR A: Si escenario correcto, he metido un bug. B: Si la prueba no se ajusta al código, modifico la prueba C: Si la especificación a cambiado, desecho la prueba 43
  • 44. BDD - Behaviour Driven Development 1.- Se elige un escenario. 2.- Se implementa el código 3.- ¿Pasa la prueba? No —> Vuelve al paso 2 4.- Cuando pase el test se da por bueno 5.- Done con este escenario 1.- Se elige un escenario. 2.- Se implementa el código 3.- ¿Pasa la prueba? No —> Vuelve al paso 2 4.- Cuando pase el test se da por bueno 5.- Done con este escenario 1.- Se elige un escenario. 2.- Se implementa el código 3.- ¿Pasa la prueba? No —> Vuelve al paso 2 4.- Cuando pase el test se da por bueno 5.- Done con este escenario 44
  • 45. BDD - Behaviour Driven Development Automatización 45
  • 46. BDD - Behaviour Driven Development Gherkin + 46
  • 47. BDD - Behaviour Driven Development 47
  • 48. ¿Cómo se comunica Cucumber con las diferentes plataformas? Cedar 48 iCuke Kiwi KIF
  • 49. Robospock Robotium 49 ¿Cómo se comunica Cucumber con las diferentes plataformas? Espresso
  • 50. (iOS-Android) (Android) Selenium (Android) 50 ¿Cómo se comunica Cucumber con las diferentes plataformas?
  • 51. ¿Cómo se comunica Cucumber con las diferentes plataformas?
  • 52. Gestos: tocar, swipes, escribir Aserciones: comprobar que el elemento existe o posee cierta información Screenshots: captura de pantalla del estado del dispositivo 52 ¿Cómo se comunica Cucumber con las diferentes plataformas? Conjunto de librerías que permiten probar la funcionalidad de aplicaciones nativas o híbridas
  • 53. iOS Client Computer Calabash ruby client library Calabash http Server Device / Simulator UIAutomator Your App Calabash Framework Features http://blog.lesspainful.com/2012/03/07/Calabash/ 53 ¿Cómo se comunica Calabash con las diferentes plataformas?
  • 54. Android Client Computer Calabash ruby client library Calabash http Server Device / Simulator Instrumentation Features http://blog.lesspainful.com/2012/03/07/Calabash/ Your App 54 ¿Cómo se comunica Calabash con las diferentes plataformas?
  • 55. iOS AccessibilityIdentifier UI Elements ¿Cómo identifico a los elementos con los que voy a interactuar? 55
  • 56. Android id UI elements 56 ¿Cómo identifico a los elementos con los que voy a interactuar?
  • 57. Web css elements id elements 57 ¿Cómo identifico a los elementos con los que voy a interactuar?
  • 58. BDD - Behaviour Driven Development Escenarios Feature: Login @invalid
 Scenario: Add site - Invalid login Given I am about to login When I enter invalid credentials Then I am presented with an error message to correct credentials @valid
 Scenario: Add site Given I am about to login When I enter valid credentials Then I am successfully authenticated And I can see posts for the site Tags Tags 58
  • 59. BDD - Behaviour Driven Development Given(/^I am about to login$/) do @current_page = page(LoginPage).wait_for_element(timeout: 30) @current_page.self_hosted_site end When(/^I enter invalid credentials$/) do user = CREDENTIALS[:invalid_user] @current_page = @current_page.login(user[:username], user[:password], CREDENTIALS[:site]) end Then(/^I am presented with an error message to correct credentials$/) do #TODO end Steps 59
  • 60. BDD - Behaviour Driven Development Page Objects / Screen Objects class LoginPage elementLabel : { :iOS => (“UILabel id:’labelTitle’ ”); :android => (“com.myapp.label id:’labelTitle’ ”) } elementButton : { :iOS => (“UIButton id:’btnLogin’ ”); :android => (“com.myapp.buttonLogin id:’btnLogin’ ”) } elementUser : { :iOS => (“UITextField id:’txtUser’ ”); :android => (“com.myapp.textField id:’txtPassword’ ”) } def wait_for_element(timeout) wait(elementLabel, timeout: 30) end def login(user, password) fill(elementUser, user) fill(elementUser, password) touch(elementButton) end end 60
  • 61. BDD - Behaviour Driven Development Estructura de un proyecto en Cucumber config ├ features <- Dónde irán las features
 │ ├ android <- Definiciones concretas para Android │ │ ├ pages <- Screen Objects para Android
 │ │ ├ support <- Soporte para Android
 │ ├ ios
 │ │ ├ pages <- Definiciones concretas para iOS
 │ │ ├ support <- Screen Objects para iOS
 │ ├ step_definitions <- Definición de los steps
 │ ├ support <- Soporte genérico
 ├ apps <- Guardaremos los binarios de las apps 61 <- Guardaremos la config genérica

  • 62. BDD - Behaviour Driven Development VAMOS A PRACTICARRRRRR!!!!! 62
  • 63. BDD - Behaviour Driven Development 63 Debo ser un usuario con credenciales válidas Quiero realizar una app que liste a mis superheroes favoritos ¿Qué haremos? Debo poder registrarme Debo poder ver el detalle de mis superheroes ETC, vamos a crear nuevos escenarios
  • 64. BDD - Behaviour Driven Development 64 Given I am in login screen Then I’m inside my application Scenario: I want to access Superheroes app When I fill valid“username” and “password” information And try to log in successfully Imperativo And I see my superheroes list
  • 65. BDD - Behaviour Driven Development 65 Given I am an unauthenticated guest And I have a valid user account When I log in Then I’m inside my application Scenario: I want to access Superheroes app When I try to access restricted area Declarativo And I see my superheroes list
  • 66. BDD - Behaviour Driven Development 66 https://github.com/phynet/BDD-CALABASH-Example Descargar: https://github.com/phynet/Heroes-iOS-Calabash-Example https://github.com/phynet/Heroes-Android-Calabash-Example Proyecto BDD: Binary iOS: Binary Android:
  • 67. Enlaces de interés https://groups.google.com/forum/#!forum/calabash-ios 67 Calabash-ios groups foro https://groups.google.com/forum/#!forum/calabash- android Calabash-android groups foro
  • 68. Enlaces de interés http://developer.xamarin.com/guides/testcloud/calabash/ 68 Xamarin calabash http://developer.xamarin.com/guides/testcloud/calabash/ calabash-query-syntax/#Touching Xamarin query
  • 69. Enlaces de interés https://github.com/calabash/calabash-ios 69 Calabash-ios github https://github.com/calabash/calabash-android Calabash-android github