BDD - TDD de uma forma BDD
No TDD, o termo “Testes de Aceitação” é enganoso. Os testes de aceitação realmente representam o comportamento esperado do sistema. Nas práticas Agile, a colaboração de toda a equipe e as interações com o cliente e outras partes interessadas são enfatizadas. Isso deu origem à necessidade de utilização de termos que sejam facilmente compreendidos por todos os envolvidos no projeto.
TDD faz você pensar sobre o necessário Behavior e, portanto, o termo 'comportamento' é mais útil do que o termo ‘Test’. BDD é Test Driven Development com um vocabulário que se concentra no comportamento e não nos testes.
Nas palavras de Dan North, “descobri que a mudança do pensamento em testes para o pensamento comportamental foi tão profunda que comecei a me referir ao TDD como BDD, ou Behavior Driven Development.” TDD se concentra em como algo vai funcionar, BDD se concentra em por que o construímos.
O BDD responde às seguintes perguntas frequentemente enfrentadas pelos desenvolvedores -
Questão | Responda |
---|---|
Onde começar? | De fora para dentro |
O que testar? | Histórias de usuários |
O que não testar? | algo mais |
Essas respostas resultam na estrutura da história da seguinte maneira -
Story Framework
Como um [Role]
eu quero [Feature]
de modo a [Benefit]
Isso significa, 'Quando um Feature é executado, o resultado Benefit é para a pessoa que joga o Role.'
O BDD responde ainda às seguintes questões -
Questão | Responda |
---|---|
Quanto custa para testar de uma vez? | muito pouco focado |
Como chamar seus testes? | modelo de frase |
Como entender por que um teste falha | documentação |
Essas respostas resultam na estrutura de exemplo da seguinte maneira -
Example Framework
Given algum contexto inicial,
When um evento ocorre,
Then garantir alguns resultados.
Isso significa, 'começando com o contexto inicial, quando um determinado evento acontece, sabemos quais são os resultados should be. '
Assim, o exemplo mostra o comportamento esperado do sistema. Os exemplos são usados para ilustrar diferentes cenários do sistema.
História e Cenários
Vamos considerar a seguinte ilustração de Dan North sobre um sistema ATM.
História
As a cliente,
I want para retirar dinheiro de um caixa eletrônico,
so that Não preciso esperar na fila do banco.
Cenários
Existem dois cenários possíveis para esta história.
Scenario 1 - Conta com crédito
Given a conta está em crédito
And o cartão é válido
And o distribuidor contém dinheiro
When o cliente pede dinheiro
Then garantir que a conta seja debitada
And garantir que o dinheiro seja dispensado
And garantir que o cartão seja devolvido
Scenario 2 - A conta está a descoberto após o limite de descoberto
Given a conta está a descoberto
And o cartão é válido
When o cliente pede dinheiro
Then garantir que uma mensagem de rejeição seja exibida
And garantir que o dinheiro não seja distribuído
And garantir que o cartão seja devolvido
O evento é o mesmo em ambos os cenários, mas o contexto é diferente. Portanto, os resultados são diferentes.
Ciclo de Desenvolvimento
O Ciclo de Desenvolvimento do BDD é um outside-in aproximação.
Step 1- Escreva um exemplo de valor de negócios de alto nível (externo) (usando Cucumber ou RSpec / Capybara) que fica vermelho. (RSpec produz uma estrutura BDD na linguagem Ruby)
Step 2 - Escreva um exemplo RSpec de nível inferior (interno) para a primeira etapa de implementação que fica vermelho.
Step 3 - Implemente o código mínimo para passar esse exemplo de nível inferior, veja-o ficar verde.
Step 4 - Escreva o próximo exemplo de RSpec de nível inferior empurrando para passar na Etapa 1 que fica vermelho.
Step 5 - Repita as etapas Etapa 3 e Etapa 4 até que o exemplo de alto nível na Etapa 1 fique verde.
Note - Os seguintes pontos devem ser mantidos em mente -
Red/green state é um status de permissão.
Quando seus testes de baixo nível são verdes, você tem permissão para escrever novos exemplos ou refatorar a implementação existente. Você não deve, no contexto da refatoração, adicionar nova funcionalidade / flexibilidade.
Quando seus testes de baixo nível estão vermelhos, você tem permissão para escrever ou alterar o código de implementação apenas para tornar os testes existentes verdes. Você deve resistir ao impulso de escrever o código para passar em seu próximo teste, que não existe, ou implementar recursos que você possa considerar bons (o cliente não teria perguntado).