BDD com Cucumber – Parte 1

Olá pessoas, tudo bem?
Aproveitando o espaço, vamos falar de coisa boa, vamos falar da tekpix…… brincadeira.

Hoje, apresentarei para quem ainda não conhece, um framework muito famoso para BDD (Behaviour-Driven Development - Desenvolvimento Guiado por Comportamento), chamado Cucumber.

Antes de falar do Cucumber, vocês sabem o que é BDD?

Para explicar o que é BDD, vamos observar a clássica imagem abaixo:

sa_1369080489Software.jpg

É lógico que podem ter ocorrido inúmeras situações para que cada uma das fases acima tenha falhado, entretanto, tem uma falha que é a mais comum em projetos de desenvolvimento de software: a comunicação.

Definindo a palavra “Comunicação” –> A comunicação é um processo que envolve a troca de informações, e utiliza os sistemas simbólicos como suporte para este fim. (Fonte: Wikipedia )

A definição acima nos mostra que para haver uma comunicação temos que utilizar algum sistema simbólico,que pode ser desenho, fala ou escrita.

Imagine uma empresa onde trabalhem pessoas de toda a parte do mundo. Para você se comunicar, provavelmente a empresa estabeleceu um idioma comum, por exemplo, o inglês.

Parece fácil né? Mas se fosse, não haveriam inúmeros problemas por causa da comunicação, principalmente em desenvolvimento de software, onde o cliente usa uma linguagem diferente do líder técnico, que por sua vez fala diferente dos analistas de testes.
Há muito ruído na comunicação, mesmo todas essas pessoas falando o mesmo idioma.

É nesse momento que entra o BDD.

BDD é uma técnica de desenvolvimento, onde a comunicação é através de um vocabulário pequeno e comum, diminuindo a distância entre o negócio (cliente ou Product Owner) e a equipe de T.I. (Arquitetos, Desenvolvedores, Analistas de Testes).

O vocabulário comum em BDD é o Gherkin. Gherkin é uma linguagem que foi criada especialmente para descrições de comportamento, ela tem a capacidade de remover detalhes da lógica de programação e focar no comportamento que uma funcionalidade deve ter.

Um arquivo Gherkin é semelhante a um Caso de Uso, contém:

  • Título da funcionalidade.
  • Descrição da funcionalidade.
  • Cenários, compostos por uma seqüência de passos, que descrevem uma interação entre um usuário e o sistema.

Vocês irão notar que a diferença entre um arquivo usando Gherkin e um Caso de uso é que o caso de uso você usará apenas como documentação, enquanto o arquivo em Gherkin – dentro do Framework do Cucumber - será uma etapa da sua automação de testes, além é claro de servir também como documentação.

Caso de uso: Uma peça (documentação) que servirá apenas para consulta e ainda se a mesma estiver atualizada, caso contrário não terá validade alguma.

Arquivo usando Gherkin: Uma peça que irá se encaixar perfeitamente na automação dos seus testes e ainda servirá de documentação. Sua documentação nunca estará desatualizada, do contrário, seus testes quebrariam.

Exemplo

Para entender melhor, vamos a um exemplo, dividido por etapas:

**Etapa 1 – “Let’s Plan it” **- Imagine que na reunião onde são discutidos todos os itens da próxima entrega de um projeto X, exista uma feature (funcionalidade), entre outras, que seja : “Buscar uma rota para treinar”.

**Etapa 2 - ”Let’s make BDD”. **– Neste momento, todos os integrantes da equipe se reúnem para confeccionar os as features usando a linguagem Gherkin.
Vamos confeccionar a feature “Buscar uma rota para treinar” em Gherkin:

1 - Você e sua equipe deverão abrir um editor de texto qualquer (no meu exemplo eu usei “Sublime Text“).
2 - O nosso arquivo sempre começará com a definição do idioma que iremos escrever os detalhes da funcionalidade, no nosso caso será em português, então, ficará assim:

Observação: O Gherkin tem suporte para mais de 40 idiomas.

3 - Após a definição do idioma, temos que definir qual funcionalidade iremos detalhar. A palavra reservada em Gherkin para tal definição é “Funcionalidade:”, no nosso exemplo ficaria:

1369154493Screenshot from 20130521 134031.png

Observação: Como eu usei o editor Sublime Text, ele tem suporte para o Gherkin. Vocês podem observar que as palavras reservadas ficam na cor vermelha.

4 – Após o título da funcionalidade, você poderá acrescentar uma definição. Usando o exemplo da rota para treinar, ficaria assim:

1369154566Screenshot from 20130521 134218.png

Observação: A maneira que escrevi a descrição da funcionalidade, é da mesma maneira que é utilizado nas “User Story” –> User Stories (Estórias de usuário) são artefatos de desenvolvimento utilizados em sistemas que utilizam metodologias ágeis.

1369160872card5.png

(A imagem acima foi retirada do blog myscrumhalf)
5 - Nesta parte, faremos o coração do arquivo, os cenários. Uma feature poderá ter 1 ou mais cenários, de acordo com a sua necessidade. O cenário é composto por uma sequencia de passos, onde descreverá a interação com o usuário. Por exemplo:

Observações:
– O que está em vermelho são as palavras reservadas em Gherkin.
– O que está entre aspas é a minha massa de teste, que eu poderei alterar a qualquer momento. Posso também criar outros cenários, com massa de teste diferente.

6 – Após terminar o meu arquivo em Gherkin, devo salvá-lo usando a extensão “feature”. O arquivo do exemplo acima eu salvei da seguinte forma:

1369155306Screenshot from 20130521 135359.png

Ficou o nome da funcionalidade + “.” + “feature”.

Visão completa de como ficou a minha feature:

1369155442Screenshot from 20130521 135657.png

**Etapa 3 - ”Let’s build it”. **- Nesta etapa cada integrante da equipe fará uma atividade diferente. Por exemplo:
Desenvolvedores – Implementarão a funcionalidade.
Analista de Testes – Implementarão os testes automáticos (em paralelo a implementação do desenvolvedor).

Bom pessoal, para não ficar muito cansativo, pensei em dividir esse post em 2 ou até 3 partes, neste primeiro focamos mais em BDD, usando Gherkin.

No próximo post (BDD com Cucumber – Parte 2), faremos a implementação dos testes automáticos usando este mesmo arquivo (buscar_rota_para_treinar.feature) com cucumber, ruby e watir-webdriver.

Espero que as informações acima sejam úteis para vocês. Comentários, críticas e até elogios são bem vindos. :P

Obrigada e até mais.

Tópico muito bom, pena as imagens não estarem mais disponíveis.

Pessoal, alguém pode tentar disponibilizar as imagens novamente? Obrigado e excelente tutorial

@Luis-Henrique-Chagas-Leite estou falando com a dani pra ela refatorar esse post e fazer mais alguns :)

Opa! Estamos no aguardo :D

@thiagompereira Estou acompanhando esse outro post que vc indicou. Valeu obrigado.

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.