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.
- 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:
- Cucumber (Traduzem cenários de comportamento escritos em Gherkin diretamente em testes automatizados executáveis).
- 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.