BDD y tests automatizados
-
Upload
sofia-swidarowicz -
Category
Software
-
view
98 -
download
7
Transcript of BDD y tests automatizados
BDD y Test automatizados
1
Universidad Pontificia de SalamancaMáster Universitario en Informática Móvil
Sofía Swidarowicz Andrade17 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 DemingCalidad Total
Organización Procesos
Cíclo producción
Esfuerzo en Equipo
4
Historia del Desarrollo ÁgilKent 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 OwnerScrum Master
Team Members
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
- RefactorIntegración
continua
12
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ónSe usan ejemplos para ilustrar comportamientos
“The Business, Developers,
Testers, Analysts and Managers”
15
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
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
“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
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!!!
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 situationGiven some preconditionAnd 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
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
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 24.- 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 24.- 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 24.- Cuando pase el test se da por bueno 5.- Done con este escenario
44
(iOS-Android)
(Android)
Selenium(Android)
50
¿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?
AndroidClient 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?
iOSAccessibilityIdentifier
UI Elements
¿Cómo identifico a los elementos con los que voy a interactuar?
55
BDD - Behaviour Driven Development
Escenarios
Feature: Login
@invalidScenario: 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
@validScenario: 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)endend
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
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