BDD: Desenvolvimento Orientado a Comportamento

AGRADEÇA AO AUTOR COMPARTILHE!

Olá PTIs!

Vinicius Quaiato e eu já demos uma mencionada em TDD aqui no ProfissionaisTI. Mas para relembrar, utilizando a prática “baby steps” temos os seguintes procedimentos:

  • Escreva um teste que falhe;
  • Escreva um código (rudimentar) para o teste;
  • Faça o teste passar;
  • Deixe o código “cheirando bem” (refactoring);
  • Volte para o primeiro procedimento.

O TDD é focado em testes unitários, onde você isola um modelo (por exemplo) e monta-o de acordo com os testes que você escrever. Quando você tiver um determinado número de modelos, aí você testa a integração entre eles, e assim por diante.

Fazendo uma analogia, isso é mais ou menos como construir o software “de dentro para fora”, onde partimos escrevendo testes específicos (unitários) e depois vamos abrangendo outras regiões do sistema (integração, funcional, aceitação, etc). Já em BDD (Behavior-Driven Development) podemos dizer que o software é desenvolvido “de fora para dentro”, onde os testes são construídos baseados nos requisitos do cliente ou em um roteiro de aceitação (também conhecidos por estórias).

Esta prática é semelhante ao TDD: testes são escritos primeiro, funções depois; O diferencial está que BDD aborda o comportamento e o resultado como um todo, não preocupando-se necessariamente com as classes, métodos e atributos de forma isolada.

Mas então qual usar? TDD ou BDD?

Essa era a minha dúvida. E demorou até cair a ficha :D

Depois de uma boa conversa com o @andrewsmedina, captei que pode-se utilizar os dois! Claro! Garanta que a aplicação está indo de acordo com o teste de aceitação escrito, e garanta que a escrita de determinada classe esteja de acordo com os testes unitários criados.

Onde trabalho utilizo da seguinte maneira:

  • Escrevo estórias para determinada tarefa;
  • Escrevo estas estórias em forma de testes. Estes testes podem ser classificados como funcionais (no meu caso testo as views do Django, mas isso pode variar de acordo com a aplicação);
  • E através de “baby step” e unit, crio testes isolados para os modelos, formulários, views, etc.

Testes de comportamento tendem a levar mais tempo para serem executados, esta é outra razão para termos sempre em mãos os testes unitários.

Até hoje não ví uma maneira “silver bullet” de trabalhar com testes automatizados. Encaro da seguinte maneira:

  • Está cobrindo o teu sistema?
  • Está guiando de forma correta o seu desenvolvimento?
  • Está sendo escrito da forma correta (não deixando bugs passarem despercebidos, por exemplo)?

Se todas as respostas forem sim, acredito que esteja sendo feito da maneira adequada.

Referências

E você? Como utiliza testes automatizados no desenvolvimento dos seus softwares?

Até a próxima…

AGRADEÇA AO AUTOR COMPARTILHE!

Klaus Peter Laube

Mais artigos deste autor »

Tecnólogo em Análise e Desenvolvimento de Sistemas pelo Centro Universitário de Jaraguá do Sul (UNERJ). Desenvolvedor Web de longa data, apaixonado por Python e defensor dos padrões Web. Escreve quando pode no http://www.klauslaube.com.br.


3 Comentários

Jorge
1

Klaus, bom dia!

E pra quem não está acostumado a utilizar testes automatizados? No meu caso eu programo em PHP e desconheço este tipo de teste. Como devo começar? O que devo fazer? BDD funciona com PHP também? Vale a pena?

Klaus Peter Laube
2

@Jorge
Uma coisa eu posso te garantir: Sendo TDD ou BDD… vale a pena sim utilizar testes automatizados.
Se tivesse descoberto o TDD ou o BDD quando programava PHP, talvez não tivesse pego tanta aversão a linguagem.
Bom, particularmente comecei com TDD… adquirindo a prática de deixar os testes guiarem o desenvolvimento. Aconselho primeiro entender bem a teoria e partir para a prática… a ImproveIT tem bastante material sobre testes e agile.
Sei que existem ferramentas de testes para o PHP, mas não tenho nada em mãos para lhe indicar (google responde!)… e inclusive deve existir alguma framework BDD. Aliás… BDD funciona para qualquer linguagem, e muita gente acha que BDD é escrever estórias em rotinas de validação codificadas. Quando você está escrevendo um teste de aceitação e certificando que a sua aplicação está passando pelas questões levantas, isso de certa forma já é BDD.

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">