Demoiselle Behave - Parte 1

  • Published on
    06-Jun-2015

  • View
    2.320

  • Download
    2

Embed Size (px)

DESCRIPTION

Treinamento da ferramenta de automao de testes de software Demoiselle Behave (http://demoiselle.github.io/behave/). Parte 1: Apresenta conceitos essenciais do BDD e da ferramenta DBehave, alm de propor um exerccio prtico de uso com foco em construo de histrias.

Transcript

  • 1. Treinamento:Treinamento: AutomaoAutomao de Testesde Testes Mdulo 01 - HistriasMdulo 01 - Histrias

2. Mdulo 1 Histrias 2 IntroduoIntroduo Demoiselle BehaveDemoiselle Behave O que ? um framework de integrao para tcnicas de Desenvolvimento Orientadas a Comportamento Behaviour Driven Development (BDD). mais que uma ferramenta BDD: Abstrao para ferramentas de BDD; Abstrao para ferramentas de automao de testes; Abstrao para ferramentas de gesto de testes. um subprojeto do Framework Demoiselle: (http://www.frameworkdemoiselle.gov.br/). 3. Mdulo 1 Histrias 3 Viso GeralViso Geral 6) acessar sistema 5) selecionar motor de execuo 1) iniciar teste 3) ler histrias 4) ler mapeamentos de tela 7) registrar resultados 2) selecionar motor BDD Alvo doAlvo do Mdulo 1Mdulo 1 4. Mdulo 1 Histrias 4 IntroduoIntroduo BDD - Behaviour Driven DevelopmentBDD - Behaviour Driven Development Processo de desenvolvimento de software criado por Dan North que combina tcnicas e princpios do Test Driver Development TDD. Problemas encontrados no TDD: Onde comea o processo? O que testar e o que no testar? O que chamamos de teste? Como analisar falhas? 5. Mdulo 1 Histrias 5 IntroduoIntroduo BDDBDD Essncia: Repensar a abordagem de testes unitrios e de aceitao: Testes unitrios iniciados com o prefixo should. Testes de aceitao escritos como histrias de usurios. Como um [papel] Eu quero [recurso], para que [benefcios] Dado [contexto inicial], quando [evento ocorre], ento [garantir alguns resultados] Os critrios de aceitao escritos como cenrios: 6. Mdulo 1 Histrias 6 IntroduoIntroduo BDDBDD A partir destes princpios, North propos um framework BDD para um ambiente de colaborao entre desenvolvedores e outros papis no tcnicos, de um projeto de software. Durante o Agile specifications, BDD and Testing eXchange em 2009 Dan North definiu: BDD is a second-generation, outside-in, pull-based,BDD is a second-generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-automation,multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactionsagile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the deliverywith well-defined outputs, resulting in the delivery of working, tested software that matters.of working, tested software that matters. 7. Mdulo 1 Histrias 7 IntroduoIntroduo BDDBDD Second Generation Processo gil que auxilia o time a entregar software de alta qualidade, respondendo questes at ento em aberto pelos processos geis iniciais, tais como documentao e testes. Outside-in and pull-based Permite que o software seja construdo com foco nos resultados esperados do sistema, assegurando que estes resultados sejam alcanados. Possvel pela colaborao das especificaes de forma ilustrativa. As histrias so criadas apenas quando necessrias. 8. Mdulo 1 Histrias 8 IntroduoIntroduo BDDBDD Multiple-stakeholder BDD ajuda a eliminar a ideia de um usurio sem forma reconhecendo que diferentes grupos de pessoas sero afetadas com o software de diferentes maneiras. Na Gesto de Qualidade de Software, Gerald Weinberg escreveu: "Qualidade um valor para uma pessoa. BDD permite entender e definir a qualidade, especificando para quais pessoas o software trar algum valor e quo necessrio ser para elas. Agile BDD funciona melhor com iteraes curtas de trabalho, onde o time especifica, implementa e entrega pequenas partes do software. Requer equipes multifuncionais para colaborar com as especificaes e testes. 9. Mdulo 1 Histrias 9 IntroduoIntroduo BDDBDD High-automation Quando a qualidade da soluo definida, o time precisa verificar as funcionalidades do sistema com frequncia, comparando-as com os resultados esperados. Para fazer esta verificao eficaz, ele tem de ser automatizado. BDD depende fortemente de automao e especificaes executveis. A automao da definio BDD no nvel mais alto feita com uso de ferramentas como o JBehave. 10. Mdulo 1 Histrias 10 IntroduoIntroduo Especificao de ComportamentoEspecificao de Comportamento Um dos grandes riscos na construo de um software no entender exatamente o que ele deve fazer. Uma alternativa para reduzir essa dificuldade fazer uso de exemplos concretos para ilustrar o que se deseja do software. Cenrios de uso so mais eficientes na comunicao do que descries, por mais detalhadas que sejam. Utilizar exemplos reais para descrever o comportamento desejado de um sistema, nos mantm conectados com a viso dos nossos stakeholders. 11. Mdulo 1 Histrias 11 IntroduoIntroduo Especificao de ComportamentoEspecificao de Comportamento Quando nos comunicamos usando cenrios de uso reais conseguimos fazer que nossos clientes visualizem a soluo em uso. Dessa forma, conseguimos obter feedbacks teis e, at algumas boas ideias, antes de escrever qualquer linha de cdigo. 12. Mdulo 1 Histrias 12 IntroduoIntroduo Linguagem GherkinLinguagem Gherkin uma Business Readable Domain Specific Language (DSL). Uma linguagem simples para especificao de domnio de negcio. uma linguagem semiformal para construo de testes que avaliam o comportamento da aplicao. Permite a colaborao de mltiplos atores para a especificao do software. That said, I do think that the greatest potential benefit of DSLs comes when business people participate directly in the writing of the DSL code Martin Fowler That said, I do think that the greatest potential benefit of DSLs comes when business people participate directly in the writing of the DSL code Martin Fowler 13. Mdulo 1 Histrias 13 IntroduoIntroduo Especificao FormalEspecificao Formal Especificao FormalEspecificao Formal Funcionalidade: Acessa ao Sistema Cenrio: Acessa sistema com usurio vlido Dado que vou para a tela "Tela de Login" Quando informo "joao" no campo "Usurio" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Ento estou autenticado Especificao TestvelEspecificao Testvel transcrio WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Linguagem de ProgramaoLinguagem de Programao transcrio 14. Mdulo 1 Histrias 14 IntroduoIntroduo WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.click(); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.clear(); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Funcionalidade: Acessa ao Sistema Cenrio: Acessa sistema com usurio vlido Dado que vou para a tela "Tela de Login" Quando informo "joao" no campo "Usurio" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Ento estou autenticado BenefciosBenefcios CustoCusto ManutenoManuteno AprendizagemAprendizagem ProdutividadeProdutividade 15. Mdulo 1 Histrias 15 IntroduoIntroduo WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.click(); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.clear(); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Funcionalidade: Acessa ao Sistema Cenrio: Acessa sistema com usurio vlido Dado que vou para a tela "Tela de Login" Quando informo "joao" no campo "Usurio" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Ento estou autenticado BenefciosBenefcios ColaboraoColaborao 16. Mdulo 1 Histrias 16 IntroduoIntroduo Linguagem EstruturaLinguagem Estrutura Dado: Descreve uma situao Dado que um cliente desistiu da compra Quando: Descreve uma certa ao Quando solicito a excluso de um produto Ento: Descreve os resultados esperados Ento o sistema apresentar uma mensagem de erro E: Repete o ltimo termo Ento a lista de usurios apresentada E uma mensagem apresentada 17. Mdulo 1 Histrias 17 IntroduoIntroduo Arquitetura dbehaveArquitetura dbehave Core Parser Runner Integration TECNOLOGIAS JBehave Concordion Cucumber TECNOLOGIAS Selenium FEST TECNOLOGIAS ALM - RQM 18. Mdulo 1 Histrias 18 IntroduoIntroduo Arquitetura dbehaveArquitetura dbehave Parser Camada responsvel pelo carregamento das histrias. Usa como implementao de referncia a linguagem Gherkin e o framework Jbehave. Pode ser extensvel para outras linguagens. Fornece o recurso para Reuso de Histrias. Parser TECNOLOGIAS JBehave Concordion Cucumber 19. Mdulo 1 Histrias 19 IntroduoIntroduo Arquitetura dbehaveArquitetura dbehave Parser Reuso de Histrias Funcionalidade:AcessoaoSistema Comoum:operadordosistema Euquero:serautenticadopormeiodesenha Demodoque:oacessoaosistemasejadadoapenasaosoperadores Cadastrados Cenrio:Acessarosistemacomousurio"{usurio}"esenha"{senha}" Dadoquevouparaatela"TeladeLogin" Quandoinformo"{usurio}"nocampo"CampoUsurio" Einformo"{senha}"nocampo"CampoSenha" Quandoclicoem"Entrar" Entoserexibido"Sejabemvindo" Cenrio:AcessaroSistemaXPTO Acessarosistemacomousurio"06762344887"esenha"188542" 20. Mdulo 1 Histrias 20 Exerccio 1Exerccio 1 ObjetivosObjetivos Construir uma soluo de Controle de Estoque utilizando a tcnica de BDD. Criar as histrias do sistema utilizando os termos: Dado, Quando e Ento. Criar um projeto utilizando os modelos de projeto do Demoiselle Behave. Entender a tcnica de reuso de cenrios. 21. Mdulo 1 Histrias 21 Exerccio 1Exerccio 1 Configurao do seu AmbienteConfigurao do seu Ambiente Espera-se que o ambiente de treinamento contenha os seguintes softwares instalados: Software Verso Objetivo Site Compilador Java (JDK) 1.6 ou superior Compilao dos projetos http://www.oracle.com/technetwork/java/javase /downloads/index.html Eclipse IDE for Java EE Developers Luna IDE para desenvolvimento dos projetos https://www.eclipse.org/downloads/packages/e clipse-standard-432/keplersr2 JBehave Eclipse Plugin 1.0.0.201 40605- 0717 Integrao com projetos Maven http://jbehave.org/eclipse-integration.html Navegador Firefox 17 ou superior Navegador padro para os exerccios https://www.mozilla.org/pt-BR/firefox/ Navegador Google Chrome 33 ou superior Navegador para o exerccio do mdulo 2 http://www.google.com/intl/pt- BR/chrome/browser/ 22. Mdulo 1 Histrias 22 Exerccio 1Exerccio 1 Dvidas?Dvidas? Caso encontre algum problema ou dificuldade durante seu treinamento abra uma questo no GitHub: https://github.com/demoiselle/behave/issues Agradecemos seu feedback!Agradecemos seu feedback! 23. Mdulo 1 Histrias 23 Exerccio 1Exerccio 1 Material para DownloadMaterial para Download http://sourceforge.net/projects/demoiselle/files/tools/behave/ Arquivo com os trechos de cdigo para realizao dos exerccios Aplicao de treinamento para realizar os testes sugeridos pelos exerccios 24. Mdulo 1 Histrias 24 Exerccio 1Exerccio 1 Configurao dos Arqutipos do DemoiselleConfigurao dos Arqutipos do Demoiselle Abra o eclipse. Acione o menu: Window Preferences Maven Archetypes Boto: Add Remote Catalog... Informe na tela com o ttulo Remote Archetype Catalog: Catalog File: http://demoiselle.sourceforge.net/repository/archetype-catalog.xml Description: Demoiselle Behave Confirme e feche as janelas de preferncias do Window 25. Mdulo 1 Histrias 25 Exerccio 1Exerccio 1 Configurao dos Snippets do TreinamentoConfigurao dos Snippets do Treinamento Os snippets so estruturas de texto pr-definidas utilizadas para agilizar a implementao de alguns trechos de cdigo ao longo de todos os laboratrios. 26. Mdulo 1 Histrias 26 Exerccio 1Exerccio 1 Configurao dos Snippets do TreinamentoConfigurao dos Snippets do Treinamento Abra a janela de Snippets por meio do menu: Window Show View Other... General Snippets: Clique com o boto direito sobre o Snippet, selecione o menu Customize.... Na sequencia clique no boto Import e importe o arquivo snippets-exercicios.xml, localizado no material do treinamento. 27. Mdulo 1 Histrias 27 Exerccio 1Exerccio 1 Configurao Plugin JBehaveConfigurao Plugin JBehave Para que os arquivos de histrias tenham o recurso de autocompletar configure o plugin do JBehave: Menu: Window Preferences JBehave Project Settings Altere a lngua para portugus: pt 28. Mdulo 1 Histrias 28 HistriasHistrias Criando Projeto 01Criando Projeto 01 Menu: File : New : Maven Project; V para a prxima tela (next); Selecione o Catlogo: Demoiselle Behave. 29. Mdulo 1 Histrias 29 HistriasHistrias Criando Projeto 01Criando Projeto 01 Selecione a ltima verso do jbehave-junit-archetype: 30. Mdulo 1 Histrias 30 HistriasHistrias Criando Projeto 01Criando Projeto 01 Informe o Group Id: br.gov.serpro.behave; Informe o Artifact Id: projeto01; Clique em Finish. 31. Mdulo 1 Histrias 31 HistriasHistrias Criando Projeto 01Criando Projeto 01 A pasta stories contm os arquivos de histrias BDD do seu projeto. Recomenda-se criar uma estrutura de subpastas para organizar os arquivos de histrias, conforme as necessidades do projeto. 32. Mdulo 1 Histrias 32 Exerccio 1Exerccio 1 Criao da Classe EstoqueCriao da Classe Estoque No pacote br.gov.serpro.behave.projeto01 da pasta src/main/java, crie uma classe Java chamada Produto; Substitua o contedo da classe Produto pelo snippet 01 Classe Produto; Crie uma classe Java chamada Estoque; Substitua o contedo da classe Estoque pelo snippet 02 Classe Estoque. 33. Mdulo 1 Histrias 33 Exerccio 1Exerccio 1 Classe ProdutoClasse Produto public class Produto implements Comparable { private String nome; private int quantidade; ... @Override public int compareTo(Produto produto) { return nome.compareTo(produto.getNome()); } } Atributos Necessrio para ordenao 34. Mdulo 1 Histrias 34 Exerccio 1Exerccio 1 Classe EstoqueClasse Estoque public class Estoque { public static Estoque conectar() { } public void submeter() { } public void funcao(String funcao) { } private void buscarProduto(String nome) {} private void adicionarEstoque(Produto produto) { } private void removerEstoque(Produto produto) { } private ArrayList listarEstoque() { } private void adicionarProduto(Produto produto) { } public void limparEstoque() { } public String ultimaMensagem() { } } Obtm a lt...