SlideShare una empresa de Scribd logo
1 de 29
Behavior Driven
Development
Na prática: Cucumber + Selenium + Java
Agenda
•   Objetivos
•   Conceitos
         Processo tradicional (Sem BDD)
         Problemas do processo tradicional
    Motivos e história
    Alternativa: BDD
    Conhecendo BDD
    Comparação - BDD vs tradicional
    Obstáculos para adoção de BDD
•   Prática
    Ferramentas utilizadas
    cucumber-jvm
    Estudo de caso 1: Teste unitário (Oi mundo)
    Selenium
    Estudo de caso 2: busca de projeto no github com Selenium
Objetivos
•   Apresentar BDD e comparativo com modelo tradicional
    de desenvolvimento


•   Apresentar CUCUMBER como framework para BDD


•   Como Cucumber-jvm pode ser usado para implementar
    BDD com Java


•   Testes de ponta-a-ponta com Selenium
Conceitos - Processo
tradicional (sem BDD)
Modelo em cascata
Conceitos - Processo
tradicional (sem BDD)
Modelo RUP
Conceitos - Processo
tradicional (sem BDD)
•   Formalização de escopo com usuário chave por meio
    de especificações funcionais e técnicas


•   Qualidade é garantida com testes manuais


•   Casos de teste criados a partir de especificações
    funcionais e técnicas


•   Desenvolvedor faz teste unitário antes do caso de teste
    estar pronto
Conceitos - Problemas do
processo tradicional
•   Gasta-se esforço para criar especificação funcional e
    mais esforço para criar casos de teste


•   Desenvolvedores normalmente não conhecem tanto o
    negócio, há uma barreira com o usuário


•   Especificação normalmente insuficiente - usuário
    sempre esquece alguma coisa


•   Foco em padronização e não no que agrega valor para
    o negócio
Conceitos - Motivos e
História
•   Fábrica de Software - modelo proveniente da primeira
    revolução industrial - Fordismo, padronização de
    saídas, padronização de processos de trabalho


•   Software - um é diferente do outro - trabalho braçal feito
    pelo compilador


•   Programa = especificação


•   Necessidade de documentação: formalização com o
    usuário
Conceitos - Alternativa:
BDD
•   BDD = Behavior Driven Development


•   Se opõe ao modelo tradicional, seguindo conceitos de
    desenvolvimento ágil


•   Parte da premissa que cada software é diferente um do
    outro


•   Foco no que agrega valor ao negócio
Conceitos - Conhecendo
BDD
•   Modelo ágil de desenvolvimento de segunda geração, surgindo a partir do TDD (Test Driven
    Development) e do DDD (Domain Driven Design)



•   Criador do BDD: Dan North



•   Testes = Requisitos



•   Todos participam da definição dos cenários: usuário, analistas de negócio, testadores,
    desenvolvedores



•   Todos devem ter um entendimento comum sobre o que será desenvolvido



•   A definição deve ser direta e objetiva, tendo só o necessário
Conceitos - Conhecendo
BDD
•   Story: Account Holder withdraws cash
•
•   As an Account Holder
•   I want to withdraw cash from an ATM
•   So that I can get money when the bank is closed
•
•   Scenario 1: Account has sufficient funds
•   Given the account balance is $100
•   And the card is valid
•   And the machine contains enough money
•   When the Account Holder requests $20
•   Then the ATM should dispense $20
•   And the account balance should be $80
•   And the card should be returned
•
•   Scenario 2: Account has insufficient funds
•   Given the account balance is $10
•   And the card is valid
•   And the machine contains enough money
•   When the Account Holder requests $20
•   Then the ATM should not dispense any money
Conceitos - Conhecendo
BDD
•   Narrativa (estória):
     o Deve ter um título bem definido
     o Composta de cenários
     o Deve definir um papel, um feature e um benefício (“As a [role] I want
        [feature] so that [benefit]“ )
•   Componentes de um cenário:
     o Given - pré-condição do teste
     o When - Teste propriamente dito
     o Then - Resultado esperado



•   O que seriam condições de um caso de uso passam a ser cenários
    diferentes
Conceitos - Conhecendo
BDD
•   Exemplo de processo BDD
Conceitos - Comparação -
BDD vs tradicional
  Tradicional           BDD

    Gasto de          Gasto de
    esforço =         esforço =
  levantamento      levantamento
 de requisitos +    de cenários +
análise & design   desenvolviment
   + criação de           o
     testes +
 execução dos
     testes +
desenvolviment
         o

   Durante o       Maior facilidade
   projeto em      por todos para
  andamento,       enxergar o que
 normalmente            será
     alguém         desenvolvido
 esqueceu de
       algo
Conceitos - Obstáculos
para adoção de BDD
•   Cultura organizacional - quebra de paradigma -
    resistência por falta de conhecimento


•   Envolve mudanças na relação com o cliente / usuário
    chave


•   Elaboração de cenários errada pode levar a adoção ao
    fracasso


•   Nem todo teste é automatizável
Prática - Ferramentas
utilizadas
•   Cucumber JVM => BDD com Java


•   Selenium => Automatização de navegação WEB


•   JUnit ou ANT Task => Execução dos testes / geração
    de relatórios


•   Ferramentas específicas dependendo do teste.
    Exemplo: jaxws para testar webservices.
Prática - Ferramentas
utilizadas - Cucumber JVM
•  Cucumber = Framework para BDD originalmente
   desenvolvido para Ruby
•  URL: https://github.com/cucumber
Licença: MIT


•   Cucumber-JVM = versão java do Cucumber


•   O que faz:
    o Lê texto e acha o método java correspondente
    o Gera relatórios
    o Provê integração com JUnit/ANT
Prática - Estudo de caso
1: teste unitário
•     Queremos desenvolver um aplicativo "Oi mundo"
•     Temos o seguinte teste (helloworld.feature):

Feature: Oi mundo



 Scenario: Diga oi
  Given Minha saudacao e "Oi"
  When Eu executo minha aplicacao
  Then Ela deveria responder com "Oi mundo"
Prática - Estudo de caso
1: teste unitário
 •    Código inicial:



public class Hello {



      public Hello(String greeting) {



      }



      public String sayHi() {
            return "";
      }
Prática - Estudo de caso
1: teste unitário
 •      Automatização dos passos:
public class HelloStepdefs {
        private Hello hello;
        private String hi;




        @Given("^Minha saudacao e "([^"]*)"$")
        public void I_have_a_hello_app_with(String greeting) {
                 hello = new Hello(greeting);
        }




        @When("^Eu executo minha aplicacao$")
        public void I_ask_it_to_say_hi() {
                 hi = hello.sayHi();
        }




        @Then("^Ela deveria responder com "([^"]*)"$")
Prática - Estudo de caso
1: teste unitário
 •    Classe JUnit:

import cucumber.junit.Cucumber;
import org.junit.runner.RunWith;



@RunWith(Cucumber.class)
@Cucumber.Options(format = { "pretty", "html:target/cucumber-html-report" })
public class RunCukesTest {
}
Prática - Estudo de caso
1: teste unitário
•   Relatório inicial:
Prática - Estudo de caso
1: teste unitário
 •     Implementação do código:

package cucumber.examples.java.helloworld;



public class Hello {
  private final String greeting;



  public Hello(String greeting) {
      this.greeting = greeting;
  }



  public String sayHi() {
       return greeting + " mundo";
Prática - Estudo de caso
1: teste unitário
•   Relatório final:
Prática - Ferramentas
utilizadas - Selenium
•   Selenium = Framework Open Source Java para
    automatização de navegação internet a partir do java =
    correspondente java do rspec
•   URL: http://seleniumhq.org/
•   Diversas APIs e ferramentas associadas, tudo com
    licença Apache 2.0
•   Plugin para firefox que grava testes e exporta código
    java


•   O que faz:
    o Abre browser web
Prática - Estudo de caso
2: busca de projeto no
github
•    Temos o seguinte teste (github.feature):

Feature: Busca Github



 Scenario: Busca por usuario
  Given Eu estou no site "http://github.com"
  When Eu procuro por "cucumber"
  And Eu clico no link com descricao "cucumber"
  Then Eu deveria encontrar um link com descricao "cucumber-jvm"


 Scenario: Busca por projeto
  Given Eu estou no site "http://github.com"
  When Eu procuro por "cucumber"
  Then Eu deveria encontrar um link com descricao "cucumber / cucumber"
Prática - Estudo de caso
2: busca de projeto no
github
    •        Automatização:
public class GithubStepdefs {

             private WebDriver driver;

             @Given("^Eu estou no site "([^"]*)"$")

             public void eu_estou_no_site(String site) throws Exception {

                           driver = new FirefoxDriver();

                           driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

                           driver.get(site);

             }

             @When("^Eu procuro por "([^"]*)"$")

             public void eu_procuro_por (String searchText) throws Exception {

                           driver.findElement(By.name("q")).clear();

                           driver.findElement(By.name("q")).sendKeys(searchText + "n");

             }

             @When("^Eu clico no link com descricao "([^"]*)"$")

             public void eu_clico_no_link_com_descricao (String expectedLinkText) throws Exception {

                           driver.findElement(By.linkText(expectedLinkText)).click();

             }

             @Then("^Eu deveria encontrar um link com descricao "([^"]*)"$")

             public void eu_deveria_encontrar_um_link_com_descricao (String expectedLinkText) throws Exception {

                           Assert.assertNotNull(driver.findElement(By

                                          .linkText(expectedLinkText)));

                                          driver.quit();

             }

}
Prática - Estudo de caso
2: busca de projeto no
github
•   Execução:
Prática - Estudo de caso
2: busca de projeto no
github
•   Relatório:

Más contenido relacionado

La actualidad más candente

Terraform Tips and Tricks - LAOUC 2022
Terraform Tips and Tricks - LAOUC 2022Terraform Tips and Tricks - LAOUC 2022
Terraform Tips and Tricks - LAOUC 2022Nelson Calero
 
Driving containerd operations with gRPC
Driving containerd operations with gRPCDriving containerd operations with gRPC
Driving containerd operations with gRPCDocker, Inc.
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Operator Framework Overview
Operator Framework OverviewOperator Framework Overview
Operator Framework OverviewRob Szumski
 
Troubleshooting and Best Practices with WSO2 Enterprise Integrator
Troubleshooting and Best Practices with WSO2 Enterprise IntegratorTroubleshooting and Best Practices with WSO2 Enterprise Integrator
Troubleshooting and Best Practices with WSO2 Enterprise IntegratorWSO2
 
WSO2 Enterprise Integrator 101
WSO2 Enterprise Integrator 101WSO2 Enterprise Integrator 101
WSO2 Enterprise Integrator 101WSO2
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南Shengyou Fan
 
Advanced debugging  techniques in different environments
Advanced debugging  techniques in different environmentsAdvanced debugging  techniques in different environments
Advanced debugging  techniques in different environmentsAndrii Soldatenko
 
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....Denis Gundarev
 
GitHub Actions with Node.js
GitHub Actions with Node.jsGitHub Actions with Node.js
GitHub Actions with Node.jsStefan Stölzle
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어NHN FORWARD
 
Introduction to jenkins
Introduction to jenkinsIntroduction to jenkins
Introduction to jenkinsAbe Diaz
 
Introduction to Docker Compose | Docker Intermediate Workshop
Introduction to Docker Compose | Docker Intermediate WorkshopIntroduction to Docker Compose | Docker Intermediate Workshop
Introduction to Docker Compose | Docker Intermediate WorkshopAjeet Singh Raina
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
containerD
containerDcontainerD
containerDstrikr .
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 rockplace
 

La actualidad más candente (20)

Terraform Tips and Tricks - LAOUC 2022
Terraform Tips and Tricks - LAOUC 2022Terraform Tips and Tricks - LAOUC 2022
Terraform Tips and Tricks - LAOUC 2022
 
Driving containerd operations with gRPC
Driving containerd operations with gRPCDriving containerd operations with gRPC
Driving containerd operations with gRPC
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Operator Framework Overview
Operator Framework OverviewOperator Framework Overview
Operator Framework Overview
 
Troubleshooting and Best Practices with WSO2 Enterprise Integrator
Troubleshooting and Best Practices with WSO2 Enterprise IntegratorTroubleshooting and Best Practices with WSO2 Enterprise Integrator
Troubleshooting and Best Practices with WSO2 Enterprise Integrator
 
WSO2 Enterprise Integrator 101
WSO2 Enterprise Integrator 101WSO2 Enterprise Integrator 101
WSO2 Enterprise Integrator 101
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
 
Golang workshop
Golang workshopGolang workshop
Golang workshop
 
Advanced debugging  techniques in different environments
Advanced debugging  techniques in different environmentsAdvanced debugging  techniques in different environments
Advanced debugging  techniques in different environments
 
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
How to hack Citrix (So, You Just Inherited Someone Else's Citrix Environment....
 
GitHub Actions with Node.js
GitHub Actions with Node.jsGitHub Actions with Node.js
GitHub Actions with Node.js
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
[2018] NHN 모니터링의 현재와 미래 for 인프라 엔지니어
 
Introduction to jenkins
Introduction to jenkinsIntroduction to jenkins
Introduction to jenkins
 
Docker swarm
Docker swarmDocker swarm
Docker swarm
 
Introduction to Docker Compose | Docker Intermediate Workshop
Introduction to Docker Compose | Docker Intermediate WorkshopIntroduction to Docker Compose | Docker Intermediate Workshop
Introduction to Docker Compose | Docker Intermediate Workshop
 
Using Qt under LGPLv3
Using Qt under LGPLv3Using Qt under LGPLv3
Using Qt under LGPLv3
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
containerD
containerDcontainerD
containerD
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성
 

Destacado

Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber FuncionaLaís Berlatto
 
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade - BDD - Behavior-Driven Development - ITAJefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade - BDD - Behavior-Driven Development - ITAJefferson Andrade
 
Integration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + SeleniumIntegration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + Seleniumtka
 
BDD on Java Concordion and Selenium
BDD on Java Concordion and SeleniumBDD on Java Concordion and Selenium
BDD on Java Concordion and Seleniumspringbyexample
 
Testes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverTestes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverMaurício Linhares
 
Aula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAislan Rafael
 
Embedded software, hardware design and automation software
Embedded software, hardware design and automation softwareEmbedded software, hardware design and automation software
Embedded software, hardware design and automation softwarePaul Dao
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08André Phillip Bertoletti
 
Nasdanika WebTest - Modular functional testing of Web and Mobile Applications
Nasdanika WebTest - Modular functional testing of Web and Mobile ApplicationsNasdanika WebTest - Modular functional testing of Web and Mobile Applications
Nasdanika WebTest - Modular functional testing of Web and Mobile ApplicationsPavel Vlasov
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosDanilo Sato
 
Testes automatizados (2)
Testes automatizados (2)Testes automatizados (2)
Testes automatizados (2)cesarvianna
 

Destacado (20)

Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade - BDD - Behavior-Driven Development - ITAJefferson Andrade - BDD - Behavior-Driven Development - ITA
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Gherkin
Gherkin   Gherkin
Gherkin
 
Integration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + SeleniumIntegration Test Cucumber + Webrat + Selenium
Integration Test Cucumber + Webrat + Selenium
 
BDD on Java Concordion and Selenium
BDD on Java Concordion and SeleniumBDD on Java Concordion and Selenium
BDD on Java Concordion and Selenium
 
Testes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverTestes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E Webdriver
 
Aula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro Código
 
Geek night-2015
Geek night-2015Geek night-2015
Geek night-2015
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
BDD - aula
BDD - aulaBDD - aula
BDD - aula
 
Embedded software, hardware design and automation software
Embedded software, hardware design and automation softwareEmbedded software, hardware design and automation software
Embedded software, hardware design and automation software
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08
 
Nasdanika WebTest - Modular functional testing of Web and Mobile Applications
Nasdanika WebTest - Modular functional testing of Web and Mobile ApplicationsNasdanika WebTest - Modular functional testing of Web and Mobile Applications
Nasdanika WebTest - Modular functional testing of Web and Mobile Applications
 
selenium-cucumber
selenium-cucumberselenium-cucumber
selenium-cucumber
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
 
Testes automatizados (2)
Testes automatizados (2)Testes automatizados (2)
Testes automatizados (2)
 
P 101 ep 1-d
P 101 ep 1-dP 101 ep 1-d
P 101 ep 1-d
 
Selenium and Cucumber Automation Services
Selenium and Cucumber Automation ServicesSelenium and Cucumber Automation Services
Selenium and Cucumber Automation Services
 

Similar a BDD: Cucumber + Selenium + Java

Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018Karla Silva
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDDDextra
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3tchandy
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery appsDavidson Fellipe
 
BDD em Testes de Serviço
BDD em Testes de ServiçoBDD em Testes de Serviço
BDD em Testes de ServiçoRafael Lima
 
Conhecendo os Padrões De Projetos
Conhecendo os Padrões De ProjetosConhecendo os Padrões De Projetos
Conhecendo os Padrões De Projetoscejug
 
Testes Funcionais Orientado a Imagem - Sikuli
Testes Funcionais Orientado a Imagem - SikuliTestes Funcionais Orientado a Imagem - Sikuli
Testes Funcionais Orientado a Imagem - SikuliVanilton Pinheiro
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheirasLambda 3
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018Larissa Soares
 

Similar a BDD: Cucumber + Selenium + Java (20)

Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Agile Brazil 2018
Agile Brazil 2018Agile Brazil 2018
Agile Brazil 2018
 
Android: testes automatizados e TDD
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery apps
 
BDD em Testes de Serviço
BDD em Testes de ServiçoBDD em Testes de Serviço
BDD em Testes de Serviço
 
jQuery
jQueryjQuery
jQuery
 
jQuery
jQueryjQuery
jQuery
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Conhecendo os Padrões De Projetos
Conhecendo os Padrões De ProjetosConhecendo os Padrões De Projetos
Conhecendo os Padrões De Projetos
 
Testes Funcionais Orientado a Imagem - Sikuli
Testes Funcionais Orientado a Imagem - SikuliTestes Funcionais Orientado a Imagem - Sikuli
Testes Funcionais Orientado a Imagem - Sikuli
 
Backbone.js nas trincheiras
Backbone.js nas trincheirasBackbone.js nas trincheiras
Backbone.js nas trincheiras
 
[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018[Karla e Larissa] Agile Brazil 2018
[Karla e Larissa] Agile Brazil 2018
 

Más de Cesar Augusto Nogueira

Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021Cesar Augusto Nogueira
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...Cesar Augusto Nogueira
 
Minando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidadeMinando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidadeCesar Augusto Nogueira
 
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017Cesar Augusto Nogueira
 
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...Cesar Augusto Nogueira
 
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016Cesar Augusto Nogueira
 
OpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDKOpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDKCesar Augusto Nogueira
 
Android Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsAndroid Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsCesar Augusto Nogueira
 
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SPCertificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SPCesar Augusto Nogueira
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogCesar Augusto Nogueira
 
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCertificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCesar Augusto Nogueira
 
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto NogueiraCertificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto NogueiraCesar Augusto Nogueira
 
First Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting IntroductionFirst Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting IntroductionCesar Augusto Nogueira
 
Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014Cesar Augusto Nogueira
 
[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program descriptionCesar Augusto Nogueira
 
Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014Cesar Augusto Nogueira
 

Más de Cesar Augusto Nogueira (20)

TI para o Sucesso nos Negócios
TI para o Sucesso nos NegóciosTI para o Sucesso nos Negócios
TI para o Sucesso nos Negócios
 
Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021Programa LeadingMyself - Accenture 2021
Programa LeadingMyself - Accenture 2021
 
Professional Google Cloud Architect
Professional Google Cloud ArchitectProfessional Google Cloud Architect
Professional Google Cloud Architect
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
 
Minando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidadeMinando dados de sua cidade para sua comunidade
Minando dados de sua cidade para sua comunidade
 
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
Se tornando um desenvolvedor Java Ninja - Trilha Java - TDC2017
 
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
Treinamento: SAP Management 4.0 (Fundamentos em SAP nas principais transações...
 
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
Palestrante OpenSource Java na Semana de Tecnologia da Informação da UFLA 2016
 
OpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDKOpenSource Java - Adopt a JDK e OpenJDK
OpenSource Java - Adopt a JDK e OpenJDK
 
Android Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcpsAndroid Wear - Workshop por @cesarnogcps
Android Wear - Workshop por @cesarnogcps
 
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SPCertificado de participação - Trilha Python - The Developers Conference 2016 SP
Certificado de participação - Trilha Python - The Developers Conference 2016 SP
 
Docker e suas tecnologias
Docker e suas tecnologiasDocker e suas tecnologias
Docker e suas tecnologias
 
Docker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnogDocker e suas tecnologias por @cesarnog
Docker e suas tecnologias por @cesarnog
 
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCertificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
 
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto NogueiraCertificado_Python_Brasil_11_Cesar Augusto Nogueira
Certificado_Python_Brasil_11_Cesar Augusto Nogueira
 
First Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting IntroductionFirst Steps with Android - An Exciting Introduction
First Steps with Android - An Exciting Introduction
 
Introduction to RDF Data Model
Introduction to RDF Data ModelIntroduction to RDF Data Model
Introduction to RDF Data Model
 
Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014Brazil Scientific Mobility Program guide 2013/2014
Brazil Scientific Mobility Program guide 2013/2014
 
[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description[BRAZIL] Science without Borders program description
[BRAZIL] Science without Borders program description
 
Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014Colégio Técnico de Campinas (COTUCA) 2013/2014
Colégio Técnico de Campinas (COTUCA) 2013/2014
 

BDD: Cucumber + Selenium + Java

  • 1. Behavior Driven Development Na prática: Cucumber + Selenium + Java
  • 2. Agenda • Objetivos • Conceitos Processo tradicional (Sem BDD) Problemas do processo tradicional Motivos e história Alternativa: BDD Conhecendo BDD Comparação - BDD vs tradicional Obstáculos para adoção de BDD • Prática Ferramentas utilizadas cucumber-jvm Estudo de caso 1: Teste unitário (Oi mundo) Selenium Estudo de caso 2: busca de projeto no github com Selenium
  • 3. Objetivos • Apresentar BDD e comparativo com modelo tradicional de desenvolvimento • Apresentar CUCUMBER como framework para BDD • Como Cucumber-jvm pode ser usado para implementar BDD com Java • Testes de ponta-a-ponta com Selenium
  • 4. Conceitos - Processo tradicional (sem BDD) Modelo em cascata
  • 5. Conceitos - Processo tradicional (sem BDD) Modelo RUP
  • 6. Conceitos - Processo tradicional (sem BDD) • Formalização de escopo com usuário chave por meio de especificações funcionais e técnicas • Qualidade é garantida com testes manuais • Casos de teste criados a partir de especificações funcionais e técnicas • Desenvolvedor faz teste unitário antes do caso de teste estar pronto
  • 7. Conceitos - Problemas do processo tradicional • Gasta-se esforço para criar especificação funcional e mais esforço para criar casos de teste • Desenvolvedores normalmente não conhecem tanto o negócio, há uma barreira com o usuário • Especificação normalmente insuficiente - usuário sempre esquece alguma coisa • Foco em padronização e não no que agrega valor para o negócio
  • 8. Conceitos - Motivos e História • Fábrica de Software - modelo proveniente da primeira revolução industrial - Fordismo, padronização de saídas, padronização de processos de trabalho • Software - um é diferente do outro - trabalho braçal feito pelo compilador • Programa = especificação • Necessidade de documentação: formalização com o usuário
  • 9. Conceitos - Alternativa: BDD • BDD = Behavior Driven Development • Se opõe ao modelo tradicional, seguindo conceitos de desenvolvimento ágil • Parte da premissa que cada software é diferente um do outro • Foco no que agrega valor ao negócio
  • 10. Conceitos - Conhecendo BDD • Modelo ágil de desenvolvimento de segunda geração, surgindo a partir do TDD (Test Driven Development) e do DDD (Domain Driven Design) • Criador do BDD: Dan North • Testes = Requisitos • Todos participam da definição dos cenários: usuário, analistas de negócio, testadores, desenvolvedores • Todos devem ter um entendimento comum sobre o que será desenvolvido • A definição deve ser direta e objetiva, tendo só o necessário
  • 11. Conceitos - Conhecendo BDD • Story: Account Holder withdraws cash • • As an Account Holder • I want to withdraw cash from an ATM • So that I can get money when the bank is closed • • Scenario 1: Account has sufficient funds • Given the account balance is $100 • And the card is valid • And the machine contains enough money • When the Account Holder requests $20 • Then the ATM should dispense $20 • And the account balance should be $80 • And the card should be returned • • Scenario 2: Account has insufficient funds • Given the account balance is $10 • And the card is valid • And the machine contains enough money • When the Account Holder requests $20 • Then the ATM should not dispense any money
  • 12. Conceitos - Conhecendo BDD • Narrativa (estória): o Deve ter um título bem definido o Composta de cenários o Deve definir um papel, um feature e um benefício (“As a [role] I want [feature] so that [benefit]“ ) • Componentes de um cenário: o Given - pré-condição do teste o When - Teste propriamente dito o Then - Resultado esperado • O que seriam condições de um caso de uso passam a ser cenários diferentes
  • 13. Conceitos - Conhecendo BDD • Exemplo de processo BDD
  • 14. Conceitos - Comparação - BDD vs tradicional Tradicional BDD Gasto de Gasto de esforço = esforço = levantamento levantamento de requisitos + de cenários + análise & design desenvolviment + criação de o testes + execução dos testes + desenvolviment o Durante o Maior facilidade projeto em por todos para andamento, enxergar o que normalmente será alguém desenvolvido esqueceu de algo
  • 15. Conceitos - Obstáculos para adoção de BDD • Cultura organizacional - quebra de paradigma - resistência por falta de conhecimento • Envolve mudanças na relação com o cliente / usuário chave • Elaboração de cenários errada pode levar a adoção ao fracasso • Nem todo teste é automatizável
  • 16. Prática - Ferramentas utilizadas • Cucumber JVM => BDD com Java • Selenium => Automatização de navegação WEB • JUnit ou ANT Task => Execução dos testes / geração de relatórios • Ferramentas específicas dependendo do teste. Exemplo: jaxws para testar webservices.
  • 17. Prática - Ferramentas utilizadas - Cucumber JVM • Cucumber = Framework para BDD originalmente desenvolvido para Ruby • URL: https://github.com/cucumber Licença: MIT • Cucumber-JVM = versão java do Cucumber • O que faz: o Lê texto e acha o método java correspondente o Gera relatórios o Provê integração com JUnit/ANT
  • 18. Prática - Estudo de caso 1: teste unitário • Queremos desenvolver um aplicativo "Oi mundo" • Temos o seguinte teste (helloworld.feature): Feature: Oi mundo Scenario: Diga oi Given Minha saudacao e "Oi" When Eu executo minha aplicacao Then Ela deveria responder com "Oi mundo"
  • 19. Prática - Estudo de caso 1: teste unitário • Código inicial: public class Hello { public Hello(String greeting) { } public String sayHi() { return ""; }
  • 20. Prática - Estudo de caso 1: teste unitário • Automatização dos passos: public class HelloStepdefs { private Hello hello; private String hi; @Given("^Minha saudacao e "([^"]*)"$") public void I_have_a_hello_app_with(String greeting) { hello = new Hello(greeting); } @When("^Eu executo minha aplicacao$") public void I_ask_it_to_say_hi() { hi = hello.sayHi(); } @Then("^Ela deveria responder com "([^"]*)"$")
  • 21. Prática - Estudo de caso 1: teste unitário • Classe JUnit: import cucumber.junit.Cucumber; import org.junit.runner.RunWith; @RunWith(Cucumber.class) @Cucumber.Options(format = { "pretty", "html:target/cucumber-html-report" }) public class RunCukesTest { }
  • 22. Prática - Estudo de caso 1: teste unitário • Relatório inicial:
  • 23. Prática - Estudo de caso 1: teste unitário • Implementação do código: package cucumber.examples.java.helloworld; public class Hello { private final String greeting; public Hello(String greeting) { this.greeting = greeting; } public String sayHi() { return greeting + " mundo";
  • 24. Prática - Estudo de caso 1: teste unitário • Relatório final:
  • 25. Prática - Ferramentas utilizadas - Selenium • Selenium = Framework Open Source Java para automatização de navegação internet a partir do java = correspondente java do rspec • URL: http://seleniumhq.org/ • Diversas APIs e ferramentas associadas, tudo com licença Apache 2.0 • Plugin para firefox que grava testes e exporta código java • O que faz: o Abre browser web
  • 26. Prática - Estudo de caso 2: busca de projeto no github • Temos o seguinte teste (github.feature): Feature: Busca Github Scenario: Busca por usuario Given Eu estou no site "http://github.com" When Eu procuro por "cucumber" And Eu clico no link com descricao "cucumber" Then Eu deveria encontrar um link com descricao "cucumber-jvm" Scenario: Busca por projeto Given Eu estou no site "http://github.com" When Eu procuro por "cucumber" Then Eu deveria encontrar um link com descricao "cucumber / cucumber"
  • 27. Prática - Estudo de caso 2: busca de projeto no github • Automatização: public class GithubStepdefs { private WebDriver driver; @Given("^Eu estou no site "([^"]*)"$") public void eu_estou_no_site(String site) throws Exception { driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); driver.get(site); } @When("^Eu procuro por "([^"]*)"$") public void eu_procuro_por (String searchText) throws Exception { driver.findElement(By.name("q")).clear(); driver.findElement(By.name("q")).sendKeys(searchText + "n"); } @When("^Eu clico no link com descricao "([^"]*)"$") public void eu_clico_no_link_com_descricao (String expectedLinkText) throws Exception { driver.findElement(By.linkText(expectedLinkText)).click(); } @Then("^Eu deveria encontrar um link com descricao "([^"]*)"$") public void eu_deveria_encontrar_um_link_com_descricao (String expectedLinkText) throws Exception { Assert.assertNotNull(driver.findElement(By .linkText(expectedLinkText))); driver.quit(); } }
  • 28. Prática - Estudo de caso 2: busca de projeto no github • Execução:
  • 29. Prática - Estudo de caso 2: busca de projeto no github • Relatório: