SlideShare uma empresa Scribd logo
Behaviour-DrivenDevelopment, com JbehaveRioJUG, reunião de Janeiro/2011
Apresentação	Marcelo Zeferino (marceloczeferino@gmail.com):Formado em análise de sistemas, atua com TI desde 1999 e já participou de projetos para grandes organizações como Fundação BioRio/Johns Hopkins Schoolof Medicine, Oi, Sul América e Fundação Roberto Marinho. Já atuou pela IBM Brasil e atualmente é Líder Técnico na Lumis Tecnologia, consultor e instrutor Java em cursos de extensão oferecidos pela UERJ. Mantém o blog continuepensando.wordpress.com, com idéias sobre desenvolvimento de software.
AgendaConceitos por trás do BDD;Ciclo de desenvolvimento com BDD;BDD versus TDD;BDD + TDD;BDD + DDD;JBehave (2.5.9);Um exemplo prático;
Primeiro, vamos pensar em um problema:O Cliente possui as regras de algo que deseja implementar e, após lhe explicar, você modela, escreve e o apresenta para validação.Cliente: Ok, acho que entendeu bem;Você: Oh, beleza, vamos implementar dessa forma então!
Alguém já viu essa história antes?
Após algum tempo...Cliente: Argh, não foi isso que eu pedi!Você: Mas foi o que lhe passei e você aprovou!
Duas soluções (dentre várias outras)Métodos ágeis ajudam muito, mas mesmo com iterações pequenas ainda podemos ter alguns problemas de entendimentoDocumentar todo entendimento e cobrar aprovação do Clienteprocesso muito formal e muito trabalho adicional, para no final o cliente poder renegar até o que ele mesmo aprovou
Mudança é natural em projetos de softwareMesmo que as regras estejam entendidas por todos, elas mudarão!Mudanças de regras podem salvar um negócio;As coisas precisam evoluir e software precisa seguir e se adaptar;A cada mudança, o que existia antes precisa continuar funcionando!
Uma boa ajuda, do pacote AgileBehaviour-DrivenDevelopment (BDD):Dan North, +- em 2003, pensando em uma forma de melhorar a legibilidade e utilidade de testes baseados em TDD;“Behaviour” is a more useful word than “test”
BDD, algumas característicasTest-first;Guiado pelo comportamento esperado;Foco no que deve ser feito, não em como será feito;Baseado na linguagem do negócio, não na linguagem técnica (Linguagem Onipresente);Maior colaboração entre equipe técnica e de negócio;
BDD, algumas vantagensRequisitos mais claros;Especificações executáveis com resultados legíveis para todos;Propagação da UbiquitousLanguage;Especificações servem como documentação (muito mais viva, que outras formas)
BDD, algumas desvantagensFoco no “o que” contribui pouco com o design interno;Mudanças no código devem ser refletidas nas especificações (quando não estão diretamente no código);
O Ciclo de Desenvolvimento, com BDDBasicamente o mesmo de TDD, trocando o “Teste” por “Especificação”
BDD versus TDDTDD é mais íntimo da implementação/design enquanto BDD está preocupado com o comportamento;BDD utiliza linguagem comum a várias audiências enquanto TDD é expressivo apenas para desenvolvedores;
BDD versus TDDCom TDD: Test Code (ao longo das mudanças). Essa relação pode ser menor com BDD;Apesar relacionadas, não são excludentes;Podem ser perfeitamente complementares;
BDD versus TDDjbehave.org/philosophy:These two practices are equally important but address different concerns and should be complementary in best development practices.BDD should talk the language of the business domain and not the language of the development technology, which on the other hand is “spoken” by TDD.BDD : (…) concerned primarily with the specification of the behaviour of the system under test as a whole (…)TDD: (…) concerned primarily with the testing of a component as a unit (…)
BDD + TDDBDDTDDhttp://msdn.microsoft.com/en-us/magazine/gg490346.aspx
BDD + TDD, a pirâmide dos testesTesting Pyramid for Web Apps, by Jason Huggins (inventor of Selenium) and Mike Cohn
BDD + DDDDan North, em: http://www.infoq.com/presentations/bdd-and-ddd
BDD + DDD“DDD enables the use of BDD effectively creating software and BDD helps structure the conversations for DDD.” Dan North, em: http://www.infoq.com/presentations/bdd-and-ddd
E surge o JBehaveCriado pelo próprio North, em 2003;Foi reescrito na versão 2.0, com base em características do RSpec, usando Java 5 e JUnit 4;Atualmente na versão 3;Utiliza JUnit para rodar cenários escritos em texto puro, apresentando a barra verde e vermelha;Pode ser automatizado com Maven ou Ant;
JBehavephilosophyhttp://jbehave.org/philosophy/
VocabulárioTitle (one line describing the story) Narrative:As a [role]I want [feature]So that [benefit] Acceptance Criteria: (presented as Scenarios) Scenario 1: TitleGiven [context]  And [some more context]...When  [event]Then  [outcome]  And [another outcome]... Scenario 2: ...Advantages of the “As a user, I want” user story template, by Mike CohnCenáriosdescrevendooscomportamentosesperados.
Um exemplo de cenárioStory: Account Holder withdraws cash As an Account HolderI want to withdraw cash from an ATMSo that I can get money when the bank is closed Scenario 1: Account has sufficient fundsGiven the account balance is \$100 And the card is valid And the machine contains enough moneyWhen the Account Holder requests \$20Then the ATM should dispense \$20 And the account balance should be \$80 And the card should be returned Scenario 2: Account has insufficient fundsGiven the account balance is \$10 And the card is valid And the machine contains enough moneyWhen the Account Holder requests \$20Then the ATM should not dispense any money And the ATM should say there are insufficient funds And the account balance should be \$20 And the card should be returned Scenario 3: Card has been disabledGiven the card is disabledWhen the Account Holder requests \$20Then the ATM should retain the cardAnd the ATM should say the card has been retained
Mas, não parece com um “Caso de Uso”?Sim, mas apenas se comparar com bons Casos de Uso...Por exemplo, seguindo as dicas de AlistairCockburn...
Como os cenários são executados?Utilização das palavras chave dos cenários em texto puro;Criação classes para mapear os passos (Steps);Criação de classes para rodar os cenários, chamando os steps necessários;OBS: Utilizando o Jbehave 2.5.9!
Palavras-chave dos cenáriosScenario: Validar nova senhaGiven Um usuário de nome: <nome> e login: <login> e a senha: <senha>When verifico se a senha é seguraThen Deve retornar a mensagem: <mensagem>
Lista de palavras-chave disponíveisScenarioNarrativeInOrderToAsAIWantToGivenScenariosExamplesTableExamplesTableRowGivenWhenThenAndPendingNotPerformedFailedIgnorableDryRun
Criação de Steps (Jbehave 2.5.9)Classes que estendem “Steps” do JBehave;Utilizam métodos (como testes no Junit) com mapeamento de palavras chave;Contém asserção para confirmação do comportamento.
Criação de Steps (Jbehave 2.5.9)
Criação de runners para CenáriosEstendem de JUnitScenario;Inicialização (que pode ser feito por uma superclasse, facilitando as coisas – Ver exemplo com utilizaçao do PtBR);Adição dos Steps que serão executados;
Criação dos Cenários
Executando um cenárioMesma forma que um JUnittest;Resultados apresentados com barra verde e vermelha;Descrição de execução no console;Texto do console pode ser utilizado como “extrato da execução” dos testes;
Resultado da execução do cenário (step não implementado)
Resultado da execução do cenário (sucesso)
Resultado da execução do cenário (falha)
Utilização de Tabela de ExemplosSimplifica a criação de cenários;Permite criar um único cenário e definir diversas linhas com entradas e saídas esperadas no teste do comportamento;São executados testes para cada linha da tabela de exemplo, independentemente;Várias linhas e colunas separadas por “|” (no início e fim da coluna);
Tabela de Exemplos - SintaxeTitleRecadastramento de SenhaNarrative:As a UsuarioI wantrecadastrar minha senhaSothat continue tendo acesso ao sistema, com outra senhaScenario: Validar nova senhaGivenUm usuário de nome: <nome> e login: <login> e a senha: <senha>Whenverifico se a senha é seguraThenDeve retornar a mensagem: <mensagem> Examples:|nome|login|senha|mensagem||Marcelo Zeferino|zeferino|1234|A senha deve conter ao menos 5 caracteres.||Kurt Cobain|kurt|12345| |UserStoryDefinição do CenárioTabela de Exemplos
Resultado de Execução com Tabela de Exemplos
Tudo bem, mas...Inglês e Português ao mesmo tempo ?!TitleRecadastramento de SenhaNarrative:As a UsuarioI wantrecadastrar minha senhaSothatcontinue tendo acesso ao sistema, com outra senhaScenario: Validar nova senhaGivenUm usuário de nome: <nome> e login: <login> e a senha: <senha>Whenverifico se a senha é seguraThenDeve retornar a mensagem: <mensagem> Examples:|nome|login|senha|mensagem||Marcelo Zeferino|zeferino|1234|A senha deve conter ao menos 5 caracteres.||Kurt Cobain|kurt|12345| |
Configuração de LinguagemÉ possível configurar para que as palavras-chaves sejam traduzidas;Todas palavras precisam ser mapeadas para novo dialeto;Steps e Cenários precisam ser inicializados com o novo Locale e configuração;
Mapeamento de palavras-chaveScenario=Cenário:Narrative=Narrativa:InOrderTo=Para queAsA=Como umIWantTo=Eu desejoGivenScenarios=DadoCenários:ExamplesTable=Exemplos:ExamplesTableRow=LinhaTabelaExemplo:Given=DadoWhen=QuandoThen=EntãoAnd="E"Pending=PENDENTENotPerformed=Não ExecutadoFailed=FALHAIgnorable=IgnorávelDryRun=DryRunkeywords_pt.properties
Configuração de classe Step
Novos Steps herdam de StepsPtBR
Configuração de classe Cenário
Novos cenários herdam de ScenarioPtBRBem menores que antes, já que a inicialização está na SuperClasse:
Cuidados especiais com os keywordsAs frases dos cenários sofrem um parse para fazer os mapeamentos;Given->Dado;When ->Quando;Then -> Então;And -> E  --- Ops,”E” é muito comum nos cenários quando ocorre o parse pode ser identificado e mapeado como “And”, gerando erro;
SoluçãoUtilizar tradução de keywords com aspas(...)Then=EntãoAnd="E"Pending=PENDENTE(...)
Agora o output é em português
Considerações finaisHá um trabalho inicial de setup do framework (como todos);As novas versões têm mudado a forma de utilizar o framework (como Scenarios -> Story, na mudança de 2.x para 3.0);Utilizar cenários para definir as conversas sobre os requisitos é muito útil;BDD e JBehave podem ser utilizados com TDD e JUnit sem problemas (se complementam, como sugerido por Dan North);
Dúvidas, Dívidas, Sugestões?
Linkshttp://behaviour-driven.org/http://dannorth.net/;http://jbehave.org/;http://jbehave.org/reference/stable/migration-paths.html;https://github.com/jbehave;http://www.infoq.com/presentations/bdd-and-ddd;
Contatomarceloczeferino@gmail.com;http://continuepensando.wordpress.com/;http://www.linkedin.com/in/marcelozeferino;http://twitter.com/marcelozeferino;https://github.com/marcelozeferino;

Mais conteúdo relacionado

PPT
Código limpo
PPTX
DDD linguagem ubiqua + codigo expressivo
PPT
Boas praticas em_desenvolvimento_de_software
PPTX
ZeroBugsProject - Técnicas de programação efetivas
PDF
Qualidade em Testes de Software
PPTX
Code Smells
PPT
DDD > Experiências
PPT
Seja Um Programador Pragmatico
Código limpo
DDD linguagem ubiqua + codigo expressivo
Boas praticas em_desenvolvimento_de_software
ZeroBugsProject - Técnicas de programação efetivas
Qualidade em Testes de Software
Code Smells
DDD > Experiências
Seja Um Programador Pragmatico

Mais procurados (20)

PDF
TDD para "meros mortais"
PDF
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
PDF
Treinamento TDD - Atech
PDF
Behaviour-Driven Development com Ruby
PPTX
TDD: Técnicas, Benefícios e Limitação
PPT
Introdução a BDD
PDF
O programador pragmático
PDF
Codigo limpo
PDF
O Programador Pragmático
PPTX
Clean code @rogeriofontes-techfriday-everis
PDF
Programação Orientada a Gambiarra
PPTX
Clean code em C#
PDF
Refinamento e boas práticas de programação
PDF
PHPZEIRO: Adote um framework
PDF
Dicas para sua carreira de Desenvolvedor PHP
ODP
Filtro de SPAM
KEY
Clean code
PDF
Java com Excelência
PDF
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
PDF
Clean Code
TDD para "meros mortais"
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Treinamento TDD - Atech
Behaviour-Driven Development com Ruby
TDD: Técnicas, Benefícios e Limitação
Introdução a BDD
O programador pragmático
Codigo limpo
O Programador Pragmático
Clean code @rogeriofontes-techfriday-everis
Programação Orientada a Gambiarra
Clean code em C#
Refinamento e boas práticas de programação
PHPZEIRO: Adote um framework
Dicas para sua carreira de Desenvolvedor PHP
Filtro de SPAM
Clean code
Java com Excelência
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Clean Code
Anúncio

Semelhante a Behaviour driven development, com jbehave (20)

PPT
BDD JBehave
PDF
Demoiselle Behave - Parte 1
PPTX
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
PPTX
BDD com specflow e selenium webdriver
PPTX
Behavior-Driven Development (BDD) - DevOps Summit 2016
PDF
BDD em Ação
PPTX
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
PPT
BDD: Cucumber + Selenium + Java
PDF
Não deixe para testar depois o que você pode testar antes.
PPTX
Workshop de Introdução ao BDD
PDF
QArentena 21: BDD - com Fábio Araújo
PPTX
Introdução ao BDD com BDD Warriors
PPTX
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
PPTX
[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development
PPTX
Todas as abordagens de testes dentro do ágil
PPTX
UFSC - Utilizando BDD para análise de negócio e desenvolvimento de projetos
PDF
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
PDF
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
PDF
Behavior Driven Development - Unificando propostas de negócio com testes e có...
BDD JBehave
Demoiselle Behave - Parte 1
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
BDD com specflow e selenium webdriver
Behavior-Driven Development (BDD) - DevOps Summit 2016
BDD em Ação
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
BDD: Cucumber + Selenium + Java
Não deixe para testar depois o que você pode testar antes.
Workshop de Introdução ao BDD
QArentena 21: BDD - com Fábio Araújo
Introdução ao BDD com BDD Warriors
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
[GUTS-RS] Workshop de Introdução ao Behaviour-Driven Development
Todas as abordagens de testes dentro do ágil
UFSC - Utilizando BDD para análise de negócio e desenvolvimento de projetos
Jefferson Andrade - BDD - Behavior-Driven Development - ITA
BDD - JBehave + SeleniumHQ + PhantomJS + Fixture Factory
Behavior Driven Development - Unificando propostas de negócio com testes e có...
Anúncio

Último (19)

PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Aula 18 - Manipulacao De Arquivos python
Processos na gestão de transportes, TM100 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Apple Pippin Uma breve introdução. - David Glotz
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
COBITxITIL-Entenda as diferença em uso governança TI
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Aula04-Academia Heri- Tecnologia Geral 2025
Custos e liquidação no SAP Transportation Management, TM130 Col18
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx

Behaviour driven development, com jbehave

  • 2. Apresentação Marcelo Zeferino (marceloczeferino@gmail.com):Formado em análise de sistemas, atua com TI desde 1999 e já participou de projetos para grandes organizações como Fundação BioRio/Johns Hopkins Schoolof Medicine, Oi, Sul América e Fundação Roberto Marinho. Já atuou pela IBM Brasil e atualmente é Líder Técnico na Lumis Tecnologia, consultor e instrutor Java em cursos de extensão oferecidos pela UERJ. Mantém o blog continuepensando.wordpress.com, com idéias sobre desenvolvimento de software.
  • 3. AgendaConceitos por trás do BDD;Ciclo de desenvolvimento com BDD;BDD versus TDD;BDD + TDD;BDD + DDD;JBehave (2.5.9);Um exemplo prático;
  • 4. Primeiro, vamos pensar em um problema:O Cliente possui as regras de algo que deseja implementar e, após lhe explicar, você modela, escreve e o apresenta para validação.Cliente: Ok, acho que entendeu bem;Você: Oh, beleza, vamos implementar dessa forma então!
  • 5. Alguém já viu essa história antes?
  • 6. Após algum tempo...Cliente: Argh, não foi isso que eu pedi!Você: Mas foi o que lhe passei e você aprovou!
  • 7. Duas soluções (dentre várias outras)Métodos ágeis ajudam muito, mas mesmo com iterações pequenas ainda podemos ter alguns problemas de entendimentoDocumentar todo entendimento e cobrar aprovação do Clienteprocesso muito formal e muito trabalho adicional, para no final o cliente poder renegar até o que ele mesmo aprovou
  • 8. Mudança é natural em projetos de softwareMesmo que as regras estejam entendidas por todos, elas mudarão!Mudanças de regras podem salvar um negócio;As coisas precisam evoluir e software precisa seguir e se adaptar;A cada mudança, o que existia antes precisa continuar funcionando!
  • 9. Uma boa ajuda, do pacote AgileBehaviour-DrivenDevelopment (BDD):Dan North, +- em 2003, pensando em uma forma de melhorar a legibilidade e utilidade de testes baseados em TDD;“Behaviour” is a more useful word than “test”
  • 10. BDD, algumas característicasTest-first;Guiado pelo comportamento esperado;Foco no que deve ser feito, não em como será feito;Baseado na linguagem do negócio, não na linguagem técnica (Linguagem Onipresente);Maior colaboração entre equipe técnica e de negócio;
  • 11. BDD, algumas vantagensRequisitos mais claros;Especificações executáveis com resultados legíveis para todos;Propagação da UbiquitousLanguage;Especificações servem como documentação (muito mais viva, que outras formas)
  • 12. BDD, algumas desvantagensFoco no “o que” contribui pouco com o design interno;Mudanças no código devem ser refletidas nas especificações (quando não estão diretamente no código);
  • 13. O Ciclo de Desenvolvimento, com BDDBasicamente o mesmo de TDD, trocando o “Teste” por “Especificação”
  • 14. BDD versus TDDTDD é mais íntimo da implementação/design enquanto BDD está preocupado com o comportamento;BDD utiliza linguagem comum a várias audiências enquanto TDD é expressivo apenas para desenvolvedores;
  • 15. BDD versus TDDCom TDD: Test Code (ao longo das mudanças). Essa relação pode ser menor com BDD;Apesar relacionadas, não são excludentes;Podem ser perfeitamente complementares;
  • 16. BDD versus TDDjbehave.org/philosophy:These two practices are equally important but address different concerns and should be complementary in best development practices.BDD should talk the language of the business domain and not the language of the development technology, which on the other hand is “spoken” by TDD.BDD : (…) concerned primarily with the specification of the behaviour of the system under test as a whole (…)TDD: (…) concerned primarily with the testing of a component as a unit (…)
  • 18. BDD + TDD, a pirâmide dos testesTesting Pyramid for Web Apps, by Jason Huggins (inventor of Selenium) and Mike Cohn
  • 19. BDD + DDDDan North, em: http://www.infoq.com/presentations/bdd-and-ddd
  • 20. BDD + DDD“DDD enables the use of BDD effectively creating software and BDD helps structure the conversations for DDD.” Dan North, em: http://www.infoq.com/presentations/bdd-and-ddd
  • 21. E surge o JBehaveCriado pelo próprio North, em 2003;Foi reescrito na versão 2.0, com base em características do RSpec, usando Java 5 e JUnit 4;Atualmente na versão 3;Utiliza JUnit para rodar cenários escritos em texto puro, apresentando a barra verde e vermelha;Pode ser automatizado com Maven ou Ant;
  • 23. VocabulárioTitle (one line describing the story) Narrative:As a [role]I want [feature]So that [benefit] Acceptance Criteria: (presented as Scenarios) Scenario 1: TitleGiven [context]  And [some more context]...When  [event]Then  [outcome]  And [another outcome]... Scenario 2: ...Advantages of the “As a user, I want” user story template, by Mike CohnCenáriosdescrevendooscomportamentosesperados.
  • 24. Um exemplo de cenárioStory: Account Holder withdraws cash As an Account HolderI want to withdraw cash from an ATMSo that I can get money when the bank is closed Scenario 1: Account has sufficient fundsGiven the account balance is \$100 And the card is valid And the machine contains enough moneyWhen the Account Holder requests \$20Then the ATM should dispense \$20 And the account balance should be \$80 And the card should be returned Scenario 2: Account has insufficient fundsGiven the account balance is \$10 And the card is valid And the machine contains enough moneyWhen the Account Holder requests \$20Then the ATM should not dispense any money And the ATM should say there are insufficient funds And the account balance should be \$20 And the card should be returned Scenario 3: Card has been disabledGiven the card is disabledWhen the Account Holder requests \$20Then the ATM should retain the cardAnd the ATM should say the card has been retained
  • 25. Mas, não parece com um “Caso de Uso”?Sim, mas apenas se comparar com bons Casos de Uso...Por exemplo, seguindo as dicas de AlistairCockburn...
  • 26. Como os cenários são executados?Utilização das palavras chave dos cenários em texto puro;Criação classes para mapear os passos (Steps);Criação de classes para rodar os cenários, chamando os steps necessários;OBS: Utilizando o Jbehave 2.5.9!
  • 27. Palavras-chave dos cenáriosScenario: Validar nova senhaGiven Um usuário de nome: <nome> e login: <login> e a senha: <senha>When verifico se a senha é seguraThen Deve retornar a mensagem: <mensagem>
  • 28. Lista de palavras-chave disponíveisScenarioNarrativeInOrderToAsAIWantToGivenScenariosExamplesTableExamplesTableRowGivenWhenThenAndPendingNotPerformedFailedIgnorableDryRun
  • 29. Criação de Steps (Jbehave 2.5.9)Classes que estendem “Steps” do JBehave;Utilizam métodos (como testes no Junit) com mapeamento de palavras chave;Contém asserção para confirmação do comportamento.
  • 30. Criação de Steps (Jbehave 2.5.9)
  • 31. Criação de runners para CenáriosEstendem de JUnitScenario;Inicialização (que pode ser feito por uma superclasse, facilitando as coisas – Ver exemplo com utilizaçao do PtBR);Adição dos Steps que serão executados;
  • 33. Executando um cenárioMesma forma que um JUnittest;Resultados apresentados com barra verde e vermelha;Descrição de execução no console;Texto do console pode ser utilizado como “extrato da execução” dos testes;
  • 34. Resultado da execução do cenário (step não implementado)
  • 35. Resultado da execução do cenário (sucesso)
  • 36. Resultado da execução do cenário (falha)
  • 37. Utilização de Tabela de ExemplosSimplifica a criação de cenários;Permite criar um único cenário e definir diversas linhas com entradas e saídas esperadas no teste do comportamento;São executados testes para cada linha da tabela de exemplo, independentemente;Várias linhas e colunas separadas por “|” (no início e fim da coluna);
  • 38. Tabela de Exemplos - SintaxeTitleRecadastramento de SenhaNarrative:As a UsuarioI wantrecadastrar minha senhaSothat continue tendo acesso ao sistema, com outra senhaScenario: Validar nova senhaGivenUm usuário de nome: <nome> e login: <login> e a senha: <senha>Whenverifico se a senha é seguraThenDeve retornar a mensagem: <mensagem> Examples:|nome|login|senha|mensagem||Marcelo Zeferino|zeferino|1234|A senha deve conter ao menos 5 caracteres.||Kurt Cobain|kurt|12345| |UserStoryDefinição do CenárioTabela de Exemplos
  • 39. Resultado de Execução com Tabela de Exemplos
  • 40. Tudo bem, mas...Inglês e Português ao mesmo tempo ?!TitleRecadastramento de SenhaNarrative:As a UsuarioI wantrecadastrar minha senhaSothatcontinue tendo acesso ao sistema, com outra senhaScenario: Validar nova senhaGivenUm usuário de nome: <nome> e login: <login> e a senha: <senha>Whenverifico se a senha é seguraThenDeve retornar a mensagem: <mensagem> Examples:|nome|login|senha|mensagem||Marcelo Zeferino|zeferino|1234|A senha deve conter ao menos 5 caracteres.||Kurt Cobain|kurt|12345| |
  • 41. Configuração de LinguagemÉ possível configurar para que as palavras-chaves sejam traduzidas;Todas palavras precisam ser mapeadas para novo dialeto;Steps e Cenários precisam ser inicializados com o novo Locale e configuração;
  • 42. Mapeamento de palavras-chaveScenario=Cenário:Narrative=Narrativa:InOrderTo=Para queAsA=Como umIWantTo=Eu desejoGivenScenarios=DadoCenários:ExamplesTable=Exemplos:ExamplesTableRow=LinhaTabelaExemplo:Given=DadoWhen=QuandoThen=EntãoAnd="E"Pending=PENDENTENotPerformed=Não ExecutadoFailed=FALHAIgnorable=IgnorávelDryRun=DryRunkeywords_pt.properties
  • 44. Novos Steps herdam de StepsPtBR
  • 46. Novos cenários herdam de ScenarioPtBRBem menores que antes, já que a inicialização está na SuperClasse:
  • 47. Cuidados especiais com os keywordsAs frases dos cenários sofrem um parse para fazer os mapeamentos;Given->Dado;When ->Quando;Then -> Então;And -> E --- Ops,”E” é muito comum nos cenários quando ocorre o parse pode ser identificado e mapeado como “And”, gerando erro;
  • 48. SoluçãoUtilizar tradução de keywords com aspas(...)Then=EntãoAnd="E"Pending=PENDENTE(...)
  • 49. Agora o output é em português
  • 50. Considerações finaisHá um trabalho inicial de setup do framework (como todos);As novas versões têm mudado a forma de utilizar o framework (como Scenarios -> Story, na mudança de 2.x para 3.0);Utilizar cenários para definir as conversas sobre os requisitos é muito útil;BDD e JBehave podem ser utilizados com TDD e JUnit sem problemas (se complementam, como sugerido por Dan North);