Aplicando BDD em um projeto de forma simples

jbehave-logoJá sabe o que é BDD e sua importância, mas não sabe como aplicar? Veja em poucos passos como adicionar em um projeto essa metodologia.
Se não conhece o método BDD, dê uma olhadinha também neste outro post aqui 🙂

Existem vários frameworks de BDD para a maioria das linguagens de programação. Neste artigo apresentarei um exemplo utilizando o framework Jbehave para Java.

O Jbehave é bem simples de implementar e entender. Ele facilita muito a manutenção dos cenários por todos os envolvidos do projeto e não apenas pelos desenvolvedores.

Veja em poucos passos como é possível criar a estrutura de um projeto utilizando o Jbehave.

Passo 1

Como a ideia do BDD é construir os cenários até mesmo antes de ter todo o projeto finalizado, devemos descrever os cenários de validação. Para isso, é necessário sabermos do que se trata o projeto e o que precisa ser validado.

O projeto que vamos usar como exemplo é bem simples, trata-se de um caixa eletrônico e para este post vamos mapear o cenário de saque de uma conta. Baseado nisso vamos criar a estrutura de BDD para validação das regras para quando ocorrer um saque para uma conta com saldo insuficiente.

Devemos criar um arquivo texto chamado caixa_eletronico_test. Este nome é apenas para facilitar o entendimento com relação a regra de negócio. Neste arquivo devemos descrever quais são os cenários de negócio da aplicação no formato BDD (given, when, then).

cenario

Figura 1 –  Cenários de negócio no formato BDD

Vejam que o primeiro item Story é uma breve descrição de qual é ação do usuário.

No tópico Scenario descrevemos qual é o cenário que será validado daquela história. No nosso caso é o cenário de um usuário fazendo um saque de uma conta negativa.

Após definido o cenário, descrevemos em linguem textual, por ser de fácil entendimento por todo o time, o que deve acontecer quando ocorrer aquele determinado cenário em 3 etapas:

Given: Dizemos que dado tal situação, no exemplo um cliente com saldo negativo.

When: Quando ocorrer determinado cenário, no caso realizar um saque de um valor menor que o saldo da conta.

Then: Então, devemos definir qual é o resultado que deve ser gerado pelo sistema. No exemplo, seria não liberar o saque e exibir uma mensagem para o usuário.

Passo 2 

Agora para realizar as validações do cenário descrito vamos utilizar a biblioteca do Jbehave. Para isso, é necessário inserir no projeto a dependência maven do Junit, biblioteca para os testes e a dependência do Jbehave conforme imagem abaixo:

pom

Figura 2 – Arquivo de dependências do projeto

Passo 3

Depois de criado o arquivo de cenários, precisamos criar uma classe Java que será o espelho do cenário descrito, porém chamando as funções do projeto, ou seja, vamos chamar cada parte do código que deve ser executada quando é realizado um saque na conta.

A classe a ser criada será a SaqueDeClienteComSaldoNegativo:

SaqueClienteSaldoNegativo

Figura 3 – Classe com os passos do cenário em Java

Vejam que estendemos a classe Steps da biblioteca Jbehave, para que possamos utilizar as anotações do BDD em cada etapa de execução do projeto. Indicamos através de annotations qual método representa cada uma das etapas de given, then e when.

Notem que cada método só chama as classes do código responsável por aquele passo da história.

Na anotação given, definimos qual o saldo do cliente setando a propriedade setSaldoAtual.

No método anotado com when, chamamos o método responsável por realizar o saque passando o valor informado pelo usuário, que no caso é o valor que foi definido no arquivo caixa_eletronico_test.

E no método com a anotação then, usamos o método de assert do Junit para validar se o saque foi realizado ou não com sucesso.

Reparem que em cada anotação descrevemos a frase da história que foi descrita no arquivo caixa_eletronico_test.

Quando é necessário utilizar uma informação descrita na história, como por exemplo, o valor de saldo e saque, devemos usar o símbolo de cifrão($). A palavra iniciada com esse símbolo é interpretada como uma variável no momento da execução.

Passo 4

Terminado a criação da classe de Steps, basta criarmos uma classe responsável por executar os cenários do projeto. Essa classe deve ter o mesmo nome do arquivo texto (caixa_eletronico_test), porém em vez de usar o underline (_) todas as palavras devem ser escritas juntas e as iniciais em maiúsculo, portanto, no nosso exemplo a classe teria o nome de CaixaEletronicoTest.

classeCaixaEletronico

Figura 4 – Classe responsável por executar os cenários

Nesta classe devemos estender a classe Scenario e no método construtor chamamos o método addSteps instanciando a classe SaqueDeClienteComSaldoNegativo que representa o cenário de saldo insuficiente para saque.

Se houvesse mais cenários, por exemplo, um cenário para validar o saque quando há saldo suficiente, deveria ser criado uma classe SaqueDeClienteComSaldoPositivo contendo os métodos anotados corretamento com o formato BDD com os trechos do cenário de saque realizado com sucesso. Depois na classe CaixaEletronicoTest deveria ser adicionado no construtor mais um step instanciando a nova classe.

Feito!! Com apenas 4 passos passamos a validar os cenários de negócio de um projeto utilizando BDD.

Para executar, basta rodar a classe CaixaEletronicoTest e se a implementação do projeto estiver correta, os cenários rodarão com sucesso. Caso haja algum erro, os cenários falharão, indicando para a equipe que é necessário realizar correções no projeto.

test

 Figura 5 – Cenário executado com sucesso

Para que o exemplo fico completo, segue abaixo a classe Cliente, que é a camada de negócio do projeto. Nela é possível definir o valor de saldo atual, além da função de saque e verificação se a operação foi realizada com sucesso.

cliente

Figura 6 – Classe de negócio que é validada usando BDD

Vejam que para fazer esse exemplo não foi necessário conhecer todo o código do projeto ou até mesmo que ele estivesse finalizado, apenas a chamada dos métodos para a execução da funcionalidade de saque foi o suficiente. Isso é aplicar o BDD! O foco é na descrição dos cenários de negócio que devem ser validados. Conforme o projeto vai sendo desenvolvido, os cenários são executados e se a implementação estiver aderente as regras de negócios,  os cenários serão validados com sucesso!

O projeto completo utilizado neste post está disponível no Github 😉

Referências:

JBehave.org

BDD com JBehave

Por MONISE COSTA

Formada em Sistemas de Informação pela PUC Campinas, MATERANA desde 2011. Apaixonada pela área de TI, Analista de Requisitos na maior parte do tempo e desenvolvedora Java/Android por lazer.

Postado em: 31 de janeiro de 2017

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário