
Desenvolvimento guiado pelo comportamento da aplicação é o que todos deveriam fazer sempre, de forma bastante resumida é definir com o cliente como a aplicação deve se comportar, escrever um teste automatizado para verificar este comportamento e depois escrever código suficiente para fazer o comportamento da aplicação ficar de acordo com o que o cliente deseja.
A diferença básica do Behaviour Driven Development (de agora em diante simplesmente BDD) para o desenvolvimento orientado por testes, é que o BDD coloca em foco o valor para o negócio que o software vai adicionar. Parece ser uma diferença puramente conceitual mas não é, por exemplo:
A tela inicial deve listar todos os clientes
Não é a mesma coisa que
O método HomeController.index precisa popular a variável @clientes
Claro que não são só estas diferenças, trabalhando mais com BDD percebe-se que ele poupa muito mais trabalho do que o TDD simples (Não que TDD seja simples de se adotar). BDD tem todas as vantagens de TDD e mais algumas, veja as duas listas abaixo:
Test Driven Development:
Behavior Driven Development:
Ou seja, alem de gerar um código com mais qualidade, o BDD poupa trabalho de toda a equipe e o principal, melhora a comunicação, que tanto para quem trabalha com metodologias ágeis quanto para quem não trabalha é extremamente importante e a falta dela é um problema gravíssimo que leva diversos projetos ao fracasso. Na minha opinião, só o fato de melhorar a comunicação já é motivo o suficiente para testar BDD.
Claro que alguns dos benefícios que eu citei dependem do suporte de ferramentas, para ser mais preciso, as User Stories serem o código executável dos testes de aceitação depende de uma ferramenta para ser verdade, e a ferramenta que eu escolhi para isto é o Cucumber, do qual eu vou começar a falar com mais freqüência aqui no blog.
Eu pessoalmente encaro o BDD como uma evolução do TDD, eu sempre tive dificuldades em escrever testes unitários antes do código da aplicação, claro que para bibliotecas é fácil, mas para a interface com o usuário que consome boa parte do código da aplicação é bem complicado escrever testes estilo XUnit, mas quando as user stories se tornaram o código executável dos testes de aceitação da UI (pelo menos os básicos desconsiderando o layout) um novo mundo se abriu para mim e tudo passou a fazer sentido.
para quem não percebeu este sub-titulo é uma brincadeira com a tradução da palavra cucumber que quer dizer pepino
Cucumber é uma ferramenta que torna possível executar histórias em texto puro, ele é uma ferramenta escrita em Ruby que veio para substituir o RSpec Story Runner, e tem diversas vantagens sobre este.
O Cucumber, utiliza Ruby e expressões regulares para definir o que qualquer expressão quer dizer, mas antes de entrar nestes pormenores vamos entender um pouquinho da estrutura básica que o Cucumber define para as User Stories.
Para que seja possível executar uma User Storie utilizando o Cucumber, ela precisa ter uma estrutura básica.
Esta é uma forma de definir a estrutura básica de um arquivo .feature do Cucumber, claro que explicando desta forma estas definições se encaixam em muita coisa, então vamos ser um pouco mais especificos.
O Cucumber define algumas palavras chave para cada uma destas sessões, estas palavras chave podem ser traduzidas para diversas linguas, o primeiro exemplo eu vou colocar em ingês, depois vou mostrar o equivalente em portugues, mais adiante quando entrarmos na parte de configurações do cucumber vamos ver melhor como selecionar a lingua utilizada, e como customizar isto, mas por enquanto fiquemos com as configurações padrão.
Feature: Simple math In order to avoid silly mistakes As a math idiot I want to be told the result of simple math operations Scenario: adition Given I have entered 50 into the calculator And I have entered 70 into the calculator When I press add Then I should see 120 on the screen Scenario: subtraction Given I have entered 60 into the calculator And I have entered 30 into the calculator When I press sub Then I should see 30 on the screen
Este é o exemplo de uma história bem simples que o cucumber pode interpretar, as palavras chave apresentadas são:
Estas mesmas palavras podem ser traduzidas para o portugues como:
Utilizando estas palavras chave, seria possível escrever esta história assim em portugues:
Funcionalidade: Matemática Simples Para evitar erros idiotas Como um completo ignorante em matemática Eu quero que operações simples de matemática sejam resolvidas para mim Cenário: adição Dado que eu digite 50 na calculadora E que eu digite 70 na calculadora Quando eu precionar "Adicione" Então eu devo ver 120 na tela Cenário: subtração Dado que eu digite 60 na calculadora E que eu digite 30 na calculadora Quando eu precionar "Subtraia" Então eu devo ver 30 na tela
O legal é que esta histórinha poderia ser escrita por um usuário, as únicas regras reais são:
A estrutura que utilizei na descrição da funcionalidade não esta descrita em palavras chave por que ela não é interpretada pelo cucumber, é apenas uma descrição e o formato pode variar um pouco.
Mas por que utilizar esta ferramenta para testes em vez de qualquer outra?
Por que utilizar o cucumber como ferramenta de testes vai viabilizar uma abordagem BDD no desenvolvimento do seu sistema, e que isto vai te poupar muito dinheiro.
Acho que era isto, falei um pouco de BDD, um monte de Cucumber e acho que consegui mostrar a idéia geral, mas isto vai ficar um pouco mais claro nos próximos posts sobre o Cucumber.
PS.: parabéns pela paciência se você leu até aqui
Belo post, Uruba!
Além de ter ensinado a se virar com o Cucumber ainda deu de lambuja vários argumentos que serão necessários para vencer a resistência aos testes dentro da empresa. Parabéns!
[Translate]
Sabe me dizer como eu posso usar o Cucumber com projetos .Net?
Existe a documentação no site do Cucumber mão não entendi.
[Translate]
Tem mais de uma forma de fazer isto tem o Cuke4Duke que eu não gostei muito, mas também pode ser feito via Selenium ou Watir (prefiro fazer com o Watir, mas o selenium é uma boa pedida também).
Vou escrever um post sobre isto daqui a um tempo, acho que na semana que vem sai o primeiro
[Translate]
Opa, o do .NET é Cuke4Nuke Cuke4Duke é para java e eu também não curti muito
[Translate]
Legal,
Então para .Net você prefere Selenium ou Watir no lugar do Cucumber para testes de comportamento?
[Translate]
yeap, qualquer uma das duas opções ta valendo
Se usar o Watir tem um adapter do webrat que permite utilizar praticamente a mesma sintaxe usada nos testes do Rails
[Translate]
Muito bom! bastante objetivo e didático. Parabéns!!!!!
[Translate]
Mmm.. interessante!
No caso, usando o Watir (que roda em Ruby) ele pode testar a aplicação .Net. Ele seria “chamado” pelo MSBuild, por exemplo?
Poderia então ser integrado ao Subversion que cria uma build ao fazer commit? Ou usando um sistema de integração contínua como o Cruise Control?
[Translate]
o MSBuild não chama o cucumber não, pelo menos não sei como fazer isto, mas uma coisa não influencia na outra.
Estou considerando que você esta falando de uma aplicação Web caso contrario a única solução seria o Cuke4Nuke mesmo.
Se o teu subversion for integrado com algum sistema de CI ele pode sim disparar o build mas isto n”ao tem muito a ver com o cucumber, o cucumber seria só um passo do build que foi disparado pelo Cruise Control por exemplo.
[Translate]
Bacanasso o post!
Tenho buscado passar as idéias de TDD e implementa-las de forma sustentável não apenas no Rails, mas no PHP por exemplo, e vários pontos e argumentações foram muito bem colocadas para situar o BDD como uma evolução sensata ao TDD.
Parabenzasso!
[Translate]
[...] Cucumber e BDD – Vantagens para a empresa (Argumentos para o gerente, para o arquiteto, para o pre… [...]
[Translate]
[...] Desenvolvimento Guiado pelo Comportamento (BDD – Behaviour Driven Development) – Urubatan (Blog do Urubatan); [...]
[Translate]
[...] Desenvolvimento Guiado pelo Comportamento (BDD – Behaviour Driven Development) – Urubatan (Blog do Urubatan); [...]
[Translate]
[...] Texto do blog do Urubatam: http://www.urubatan.com.br/cucumber-e-bdd-vantagens-para-a-empresa-argumentos-para-o-gerente-para-o-... [...]
[Translate]
[...] Cucumber e BDD – Vantagens para a empresa (Argumentos para o gerente, para o arquiteto, para o pre… Blog do Urubatan (tags: bdd) [...]
[Translate]
[...] Cucumber e BDD – Vantagens para a empresa (Argumentos para o gerente, para o arquiteto, para o pre… [...]
[Translate]