BDD (Desenvolvimento Orientado a Comportamento) - eTecnologia/projeto-genesis GitHub Wiki

BDD (Behavior Driven Development ou em português Desenvolvimento Orientado a Comportamento)

BDD (Desenvolvimento Orientado a Comportamento) é uma prática robusta de desenvolvimento de software que propõe que construir software especificando as várias camadas de comportamento com testes automatizados seguindo o modelo outside-in development, ou seja, comece primeiro especificando o comportamento de uma funcionalidade e depois, especifique as classes, métodos e funções que serão necessários para implementá-la
O que é BDD?
Segundo David Chelimsky (Livro: The RSpec): “BDD (Desenvolvimento Orientado a Comportamento) é sobre a implementação de um aplicação (software) descrevendo seu comportamento a partir da perspectiva das pessoas interessadas.

BDD ainda ajuda os desenvolvedore e equipes a concentrar seus esforços na identificação, entendimento e construção “features” que geram valor para as pessoas interessadas e ainda garante que os requisitos sejam bem descritos, documentados e bem implementados. Geralmente praticantes de BDD usam exemplos concretos de comportamento do sistema para ajudar a entender como os requisitos geram valor ao negócio.

Gênesis: Como nasceu o BDD:
O BDD (Behavior-Driven Development) foi criado por Dan North por volta de 2003. Dan North estava com dificuldades para ensinar TDD para seus alunos, pois eles ficavam com dúvidas sobre por onde começar a testar, o que testar, como nomear seus testes etc.
Dan percebeu que parte do problema em entender TDD era a palavra teste em si, pois ela confundia o desenvolvedor sobre a real motivação por trás de TDD. A principal motivação do TDD não é testar o software, e sim especificá-lo através de comportamentos e definir seu design.

A suíte de testes automatizados gerada através do TDD é "apenas" uma boa consequência do processo. Baseado nessas ideias, Dan North sugeriu mudar a palavra de teste para comportamento (behavior). Para concretizar sua ideia, Dan North escreveu o JBehave, uma biblioteca de BDD em Java.
Apesar de o BDD ter nascido apenas como um modo de rever a nomenclatura do TDD e o modo como se enxerga essa prática, hoje BDD é mais do que isso. Atualmente ele é uma abordagem de robusta de desenvolvimento de software (CHELIMSKY; ASTELS; DENNIS, et al., 2009) que propõe que desenvolver software especificando as várias camadas de comportamento com testes automatizados seguindo o modelo outside-in development, ou seja, comece primeiro especificando o comportamento de uma funcionalidade. Depois disso, especifique as classes e métodos que serão necessários para implementá-la.

Exemplo:


Princípios:
O BDD tem 3 principios norteadores:
1 - O suficiente é suficiente: Não devemos automatizar tudo, mas sim tudo o que descreve o comportamento esperado do produto pelo cliente. O suficiente para desenvolver a solução. Mais do que isso é desperdício de esforço
2 - Entregar valor para as pessoas interessadas: Entregue somente o que tem valor para o cliente, nada mais. Se o que estiver fazendo não agrega valor para o cliente ou não potencializar o valor entregue, pare de fazer isso.
3. Tudo é comportamento: Tudo que um software faz pode ser descrito como comportamento e explicado para qualquer pessoa que tenha o domínio do negócio. Não importa o nível de teste, o tipo de funcionalidade, sempre será descrito como comportamento.
Linguagem comum e de fácil entendimento:
BDD incentiva Donos de Produtos (PO), Analistas de Negócios, Analista de Requisitos, Desenvolvedores de Software, Designers e Testadores para colaborar mais intensamente permitindo-lhes expressar os requisitos de uma maneira mais simples e testavel, de uma forma que tanto a equipe de desenvolvimento e as partes interessadas do negócio possam entender facilmente.

Existem diversas ferramentas que suportam BDD, elas ajudam a transformar os requisitos em testes automatizados que auxiliam a orientar o desenvolvedor, verificar o recurso e documentar o que o aplicativo faz.
algumas Ferramentas de automação de BDD:

  • Cucumber
  • JBehave
  • SpecFlow

Benefícios do uso de BDD:
- Documentação única e com linguagem comum para técnicos e pessoas de negócio.
- Estimula a colaboração para desenvolvimento de produto
- Facilita automação de testes
- Live Documentation (Documentação Viva)
- Gestão de Conhecimento

Livros de referência: Há vários livros no mercado, citamos alguns:


Para ir além:
Tutorial sobre BDD do Wikipedia
Tutorial Introdução ao BDD (Tradução do artigo original “Introducing BDD” de Dan North)
ATDD x BDD
⚠️ **GitHub.com Fallback** ⚠️