Conhecendo a Ferramenta Cucumber
cucumber n.
1. pepino.
Cucumber é uma ferramenta de descoberta, colaboração e documentação. Ele serve para alinhar os requisitos do sistema entre as diferentes partes envolvidas no ciclo de desenvolvimento de software, além de validar o funcionamento do sistema em si.
Por que usar Cucumber?
Cucumber ajuda a facilitar a descoberta e o uso de uma linguagem universal entre o time, unindo a nossa língua comum e a linguagem de programação. Os testes criados com Cucumber interagem diretamente com o código, mas são escritos em uma língua que permite o entendimento por parte dos stakeholders. Inclusive, a escrita coletiva desses testes auxilia num melhor desenvolvimento de software, garantindo que todas as pessoas envolvidas estejam na mesma página e entendam qual o comportamento esperado do sistema.
BDD
Cucumber segue a lógica de BDD — Behaviour Driver Development. O BDD, por sua vez, foi construído em cima do TDD — Test Driven Development. TDD é um processo onde o desenvolvimento do software é guiado pelos testes. Ou seja, primeiro escrevemos os cenários de teste e, então, desenvolvemos o software buscando fazer com que todos os testes passem. Já no BDD, estamos focando no comportamento do sistema. Descrevemos como esperamos que o sistema se comporte em diversas situações possíveis, transformamos esses cenários em testes, e validamos o software desenvolvido.
A Importância dos Cenários de Aceitação
“Testes unitários validam que o que você desenvolveu está certo, enquanto testes de aceitação validam que você desenvolveu a coisa certa”.
- Matt Waynne e Aslak Hellesøy
Ao criarmos esses cenários no início do ciclo de desenvolvimento do software, podemos explorar e erradicar vários mal-entendidos o quanto antes. Além disso, os cenários criados auxiliam o time a focar, garantindo que o trabalho feito está de acordo com os requisitos e a funcionalidade entregue é algo que tem valor. O time ainda cometerá erros, mas bem menos.
gherkin n.
1. pepino em conserva, picles.
(A comunidade de software tem uma conexão muito forte com a culinária, ou muita imaginação na hora de pensar em nomes para ferramentas).
Gherkin
A linguagem de programação usada por trás do Cucumber é o Gherkin. Ela possui localização em diversas línguas, ou seja, podemos escrever todo o documento em português. Um documento escrito em Gherkin é mais ou menos assim:
Funcionalidade: Saque de Dinheiro
Essa funcionalidade descreve o sistema de saque de dinheiro nos nossos caixas eletrônicos.Cenário: Saque em uma conta com crédito
Dado Um usuário que possui R$100 em sua conta
Quando Ele sacar R$20
Então O caixa eletrônico liberará R$20
E O seu novo saldo será R$80
Funcionalidade
A primeira palavra-chave do Gherkin é ‘Funcionalidade’. Ela que indica qual a característica do sistema que será validada nesse documento. Seguida da funcionalidade, normalmente escrevemos uma breve documentação sobre o que será testado nos cenários a seguir. A descrição pode ter múltiplas linhas. É uma ótima oportunidade para detalharmos como a funcionalidade será usada, por quem, adicionarmos links para documentações adicionais, pesquisas feitas com usuários, etc.
Cenário
Para descrevermos os comportamentos esperados, cada funcionalidade terá diversos cenários. Cada cenário é um exemplo concreto de como o sistema deve se comportar em uma determinada situação. Eles seguem o padrão:
- O sistema está em um estado.
- Alguma ação é tomada.
- O sistema está em um novo estado.
Para descrevermos esses cenários, seguimos a estrutura: dado, quando, então. Além dessas palavras-chaves, temos diversas outras que nos ajudam a detalhar os nossos cenários e evitar repetições.
Rodando os Testes
O documento de funcionalidades serve como uma ótima documentação e um guia para os testes de aceitação. A sua vantagem é que esses cenários podem ser facilmente automatizados. Cucumber está disponível em várias linguagens de programação, como Ruby, Python e Java. Basta escolher a sua linguagem preferida e desenvolver os seus testes.
Um exemplo de implementação do cenário acima seria:
Dado /^Um usuário que possui R\$(\d+) em sua conta$/ do |valor|
conta.depositar(valor)
conta.saldo.should eq(valor)
endQuando /^Ele sacar R\$(\d+)$/ do |valor|
caixa = Caixa.new
caixa.sacar(conta, valor)
endEntão /^O caixa eletrônico liberará R\$(\d+)$/ do |valor|
caixa.dinheiro_entregue.should == valor
endE /^O seu novo saldo será R\$(\d+)$/ do |valor|
conta.saldo.should eq(valor)
end
Essa foi uma breve introdução ao Cucumber. A ferramenta nos permite criar diversas outras coisas, como testes mais técnicos para a validação de funcionalidades específicas de uma API, por exemplo. Para saber mais sobre o Cucumber, recomendo acessar o site oficial, onde você encontra outras referências e a documentação da ferramenta.
Bons testes.
Fonte
‘The Cucumber Book’ por Matt Waynne e Aslak Hellesøy.
Para conhecer mais sobre a Brazilians in Tech, acesse nosso site neste link e junte-se a nos!