Pular para o conteúdo principal

TDD / BDD / DDD

TDD

Test Driven Development

O TDD é uma metodologia de desenvolvimento de software que segue um ciclo iterativo e incremental de três etapas: escrever um teste automatizado que falhe, implementar o código necessário para fazer o teste passar e, finalmente, refatorar o código para melhorar sua estrutura e qualidade, mantendo os testes passando.
Ele segue um ciclo contínuo de pequenas iterações, onde cada iteração adiciona um pequeno pedaço de funcionalidade ao sistema.

Observação: Não é uma abordagem para realizar testes.

Escrever Teste (Red): O ciclo começa escrevendo um teste automatizado que descreve o comportamento desejado da funcionalidade a ser implementada. Este teste inicialmente falhará, pois o código de produção correspondente ainda não foi escrito.

Implementar Código (Green): Em seguida, escrevemos o código mínimo necessário para fazer o teste passar. O foco aqui é na funcionalidade necessária para satisfazer as condições do teste.

Refatorar (Refactor): Com o teste passando, podemos refatorar o código para melhorar sua estrutura, clareza e eficiência. Este passo garante que o código permaneça limpo e sustentável ao longo do tempo.

TDD

  • O teste de uma funcionalidade é escrito antes do código que o implementa.
  • Em geral são utilizados testes unitários, caixa-branca, testes de integração ou testes de aceitação.
  • Parte dos métodos ágeis,como o Extreme Programming.

BDD

Behaviour Drive Development
(Desenvolvimento orientado por comportamento)

É uma técnica de desenvolvimento de software que visa integrar regras de negócios com linguagem de programação, focando nas interações e comportamentos do sistema.

  • Evolução do TDD, enfatizando colaboração e testes antes do código.
  • Usa linguagem ubíqua (comum a todos os envolvidos definidos pelas palavras-chave: Given, When e Then).
  • Comportamentos específicos do software do ponto de vista do usuário.
  • Baseado em testes de caixa preta.
  • A documentação é atualizada automaticamente a cada ciclo.

Foco em requisitos e comportamento esperado, não na implementação!

Ferramentas:

  1. Cucumber (Traduzem cenários de comportamento escritos em Gherkin diretamente em testes automatizados executáveis).
  2. JBehave (usa sua própria sintaxe para descrever cenários de testes).

DDD

Domain Driven Design
(Design orientado a domínio)

Domínio é a área de conhecimento, problema de negócio ao qual pretente-se aplicar a solução de software.

É uma abordagem de desenvolvimento de software para lidar com comportamentos complexos na construção de um software.

Foco no domínio do negócio, não na tecnologia.
✅ Usa linguagem ubíqua para alinhar desenvolvedores e especialistas do domínio.
✅ Divide o sistema em contextos delimitados (Bounded Contexts).
✅ Modelo rico: prioriza entidades, agregados e repositórios.
✅ Não tem como foco a tecnologia.