bdd y tests automatizados

69
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

Upload: sofia-swidarowicz

Post on 26-Jul-2015

99 views

Category:

Software


7 download

TRANSCRIPT

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

5

1950 - Ciclo PDCA (Plan, Do, Check, Act). Walter A, Shewhart

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

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

- RefactorIntegració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ónSe 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 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

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 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

BDD - Behaviour Driven Development

Automatización45

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?

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

Androidid 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

@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

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