O documento resume as principais informações sobre Behavior Driven Development (BDD). Ele apresenta a técnica de BDD, seus usos e dinâmicas, como o jogo BDD Warriors, para popularizar a abordagem. Também explica formas de implementação como Example Mapping, escrita de cenários e automação de testes.
2. Parte I
Introdução
Sintaxe básica
Vantagens
Dinâmica: BDD Warriors
Fechamento
Parte II
Dinâmica: Example Mapping
Formas de uso
Automação
Sintaxe avançada
Dinâmica: Escrita de Cenários
Lições aprendidas
Fechamento
3. Técnica para implementar uma aplicação através da
descrição do seu comportamento do ponto de vista dos
stakeholders
Iniciou a partir do TDD: como saber o que testar?
Evolução: foco na comunicação entre as pessoas
Usos:
Análise: levantamento de requisitos
Desenvolvimento: guia de implementação
Testes: automação/testes de regressão
4. Funcionalidade: <Título>
Eu, como um <papel>,
Quero <funcionalidade>
Para que <benefício>
Cenário: <Título do Cenário>
Dado que… tenho uma situação inicial
Quando ... ocorre um evento
Então… deve... acontecer o resultado esperado
5. Funcionalidade: US001_Cobrança
Eu, como funcionário do setor Financeiro,
Quero gerar a cobrança anual
Para que possamos receber o valor devido
Critérios de aceitação:
O sistema deve gerar parcelas a partir do valor para o ano
atual
Deve ser possível realizar desconto por categoria
6. Cenário: Deve gerar cobrança
Dado que o valor anual é 100,00
Quando gerar a cobrança anual
Então deve ser criada uma parcela de 50,00 para janeiro
E deve ser criada uma parcela de 50,00 para julho
Cenário: Deve gerar cobrança com desconto
Dado uma categoria com desconto de 90,00
E que o valor anual é 100,00
Quando gerar a cobrança anual
Então deve ser criada uma parcela de 10,00 para janeiro
7. Aproximar a área técnica da área de negócios através de
• Linguagem ubíqua
• Criação colaborativa de cenários: Três amigos, Example Mapping
• Entendimento compartilhado
Esclarecer cenários complexos de forma sucinta através de
exemplos
Focar no que agrega valor
Fornecer um guia de testes para o desenvolvedor
Documentação viva com uso de automação
8. Jogo de cartas print&play disponível sob
Creative Commons em
https://bddwarriors.wordpress.com/
Objetivos:
Ajudar na popularização do BDD
Fixar a estrutura básica da sintaxe
Prevenir o apocalipse zumbi
Demonstrar a construção conjunta de cenários
9. Dois a seis jogadores
Cada um recebe cinco cartas e uma pilha de fichas
para identificação
Quem viu filme de Ficção Científica, Fantasia ou
Terror mais recentemente começa o jogo
Pontos são somados ao completar cenários. Quem
tiver mais pontos ganha o jogo
12. Alessandra
Gabriel
Ana
1 pt
Então ____ deve se transformar em ______
1 pt
Dado um vampiro ____________
2 pts
Quando ____________
(Jogador deve ler o cenário
completando os espaços)
13. Alessandra
Gabriel
Ana
1 pt
Então ____ deve se transformar em ______
1 pt
Dado um vampiro ____________
2 pts
Quando ____________
Alessandra:
1 ponto (carta) +
2 pontos (completar cenário)
Gabriel:
2 pontos (carta)
Ana:
1 ponto (carta)
14. 3 pts
____ sorvete ____________
Cartas Coringa:
Somente pode ser jogada ao
completar um cenário!
Cenário: Comprar duas cartas
Dado que é a sua vez
Quando jogar essa carta
Então compre duas cartas e descarte qualquer
uma carta da sua mão
Cartas de Ação:
Siga as instruções na carta
17. Técnica para estruturar a conversa em torno de uma
estória
3 Amigos – Negócios, Teste, Desenvolvimento
Estória
Regra
Exemplo
Pergunta
18. Sacar dinheiro da
conta
Cliente normal não
pode sacar mais
que o saldo
Saque maior que o
saldo
Limite de conta
especial é fixo?
Cliente especial
pode atingir o
limite
Saque igual ou
menor ao saldo
Deve imprimir
comprovante
Limite 100
Saldo 10
Saque 110 -> OK
Limite 100
Saldo 10
Saque 120 -> NOK
19. PRÁTICA!
Alunos e funcionários pagam por acesso.
Visitantes pagam por hora, até 2 horas é um valor, depois
cobra hora adicional até um limite de 31 reais.
A pessoa passa o ticket ou crachá na saída do
estacionamento.
20. Entendimento compartilhado
Captura das informações da conversa
Interativo
Simplicidade: sem sintaxe Gherkin e sem detalhes de
implementação
Visualização do estado da estória
Muitos post-its rosas – muita incerteza para começar?
Muitos post-its azuis – estória grande demais?
Muitos post-its verdes por regra – regra abrangente demais?
22. Funcionalidade: US001_Gerar Cobrança
Eu, como funcionário do setor Financeiro,
Quero gerar a cobrança anual
Para que possamos receber o valor devido
Cenário: US001_Gerar cobrança normal
Dado…
…
Cenário: US001_Gerar cobrança com
desconto
Dado…
….
Funcionalidade: US002_Consultar Cobrança
Eu, como funcionário do setor Financeiro,
Quero consultar a cobrança
Para saber o que está em aberto
Cenário: US002_Consultar por período
Dado…
…
Cenário: US002_Consultar por situação
Dado…
….
Arquivo .feature por estória com
múltiplos cenários
Outros documentos:
protótipo de interface, padrão de sistema
23. BDD não gera documentação extensiva
Detalhar os cenários importantes/diferentes
BDD/Automação não substitui testes
Estilo imperativo x Estilo declarativo
Como x para quê
Detalhado x resumido
…
E informei dados do funcionário
Quando salvar o funcionário
…
…
E preenchi nome “Ana”
E preenchi sobrenome “Hermann”
E selecionei a profissão “Dev.”
Quando cliquei no botão “Salvar”
…
24. Pode haver BDD sem automação!
Ferramentas: Cucumber/SpecFlow/etc.
Exige mais tempo e conhecimento técnico da equipe
Vantagens:
• Testes de regressão
• Documentação viva
▪ Testes quebram ao alterar a especificação
▪ Especificação quebra ao alterar a aplicação
25.
26.
27.
28. Tela
Maior tempo de execução
▪ Pirâmide de testes!
Regras mais importantes
Interface precisa estar estável
Serviço
Maior cobertura
Regras de negócio
Guia o desenvolvimento
▪ Testes de regressão = bônus!
UI
Serviço
Unitários
29. Contexto
Passos em comum que acontecem antes de cada cenário
Parâmetros
Permite reutilização na automação
Tabelas como parâmetros
Forma de estruturar dados quando há vários parâmetros
Esquema do Cenário
Repete o mesmo cenário com valores diferentes
30. Contexto:
Dado que o valor anual para 2016 é 100,00
Cenário: US001_Deve gerar cobranças
Dado um cliente com categoria “Efetivo”
Quando gerar a cobrança anual
Então devem ser criadas as seguintes parcelas a pagar
| Valor | Exercício |
| 50,00| Jan/2016 |
| 50,00| Jul/2016 |
Cenário: US001_Deve gerar cobrança com desconto
Dado um cliente com categoria “Aposentado”
E a categoria “Aposentado” tem desconto de 90,00
Quando gerar a cobrança anual
Então devem ser criadas as seguintes parcelas a pagar
| Valor | Exercício |
| 10,00| Jan/2016 |
31. Contexto:
Dado que o valor anual para 2016 é 100,00
Esquema do Cenário: US001_Deve gerar exercício para o mês
seguinte
Dado um cliente com categoria “Aposentado” com desconto de 90,00
E a data atual é <DataAtual>
Quando gerar a cobrança anual
Então deve ser criada uma parcela com valor 10,00 para o
<Exercício>
Exemplos:
| DataAtual | Exercício |
| 23/10/2016 | 11/2016 |
| 23/12/2016 | 01/2017 |
32. Cenários mais importantes primeiro
Título do cenário deve ser único e diferenciável dos demais
Uma regra por cenário
O quê em vez de como - sem detalhes de implementação ou
interface
Evitar misturar domínios
Usar linguagem ubíqua
Refatorar!