JBehave e um framework/ferramenta Java que implementa os conceitos de BDD e, tais conceitos, tem uma boa introducao no artigo "Introducing BDD" escrito por Dan North (pai do termo). Em portugues, ha uma traducao desse artigo escrita pelo Rodrigo Urubatan. Tambem, quando ainda nao existia suporte a nossa lingua pelo JBehave, o Emerson Macedo criou uma extensao desse projeto que possiblitava a utilizacao de termos de BDD em portugues. Eu gosto de contar essas historias pois elas demonstram o quanto os desenvolvedores brasileiros se preocupam com tecnicas e ferramentas que auxiliem no desenvolvimento agil.O RSpec e o Cucumber sao outras ferramentas para a aplicacao de BDD. Surgiram na comunidade Ruby e foram amplamente adotados por ela. Mas, agora, o Cucumber pode ser executado em varias linguagens diferentes do Ruby pois poussui uma implementacao para a JVM, denominada cucumber-jvm. Desenvolvido por Aslak Hellesoy, o mesmo cara que criou o XDoclet que, por sua sua vez, influenciou a introducao do conceito de anotacoes no Java. Aslak mantem o codigo do cucumber-jvm, com alguns outros committers, e muito ativo na lista de discussao da ferramenta e e um dos autores do livro "The Cucumber Book: Behaviour-Driven Development for Testers and Developers".Mao na massa!Cucumber Hello WorldPartindo para a pratica, agora eu apresentarei os conceitos basicos de BDD, atraves de uma aplicacao do tipo "Hello World" que utiliza o cucumber-jvm. Sei que uma aplicacao deste nivel e basica demais para explorar totalmente o assunto. Contudo, ela e suficiente, num nivel introdutorio como o apresentado nesta parte, para que possamos entender e nos embasar melhor para explorar o assunto com um exemplo mais real num proximo post. Para me acompanhar nesta pratica, eu espero apenas que voce ja tenha:Acesso a um shell Bash: os comandos que apresento deverao copiados e colados diretamente neste shell (em Cygwin, Linux, Mac OS X, ...);Um ambiente Java montado: JDK + Maven sao suficientes (nos ambientes testados utilizei o JDK 1.7 e o Maven 3);No papel de usuario (nao desenvolvedor) escreveremos uma estoria que guiara os desenvolvedores na implementacao do comportamento esperado para nossa aplicacao. No papel de desenvolvedor, voce copiara e colara as linhas a seguir no seu shell:d=/tmp/cucumber-jvm-helloworld; rm -rf $d && mkdir -p $d && cd $dd=src/test/resources/com/ladoservidor/cucumber/helloworld; mkdir -p $dcat > $d/helloworld.feature <<'EOF'Feature: Hello World Scenario: Say hello Given I have a hello app with "Hello" When I ask it to say hi Then it should answer with "Hello World"EOFEntao, os comandos apresentados nas linhas acima criarao o diretorio da aplicacao (/tmp/cucumber-jvm-helloworld) e, dentro dele, criarao a estoria definida pelo usuario (no arquivo src/test/resources/com/ladoservidor/cucumber/helloworld/helloworld.feature).A "estoria do usuario" e definida como uma "Feature" (funcionalidade ou caracteristica). Nela ha um "Scenario" (cenario) denominado Say hello. Este cenario apresenta uma situacao (Given), uma acao (When) e um estado esperado (Then). Observe que tudo isto e explicito numa linguagem natural (o ingles). Em resumo, e isto: as estorias de usuario devem ser definidas numa linguagem natural e simples (nao tecnicas). Nessas estorias sao definidos cenarios que, por sua vez, indicam que dada uma determinada situacao (Given), quando algo ocorrer (When), entao (Then) um determinado