Transcrição TDD e FDD: Abordagens Derivadas do XP
Dentro do ecossistema de práticas ágeis, e intimamente relacionadas com a Programação Extrema (XP), surgem abordagens mais específicas como o Desenvolvimento Orientado por Testes (TDD) e o Desenvolvimento Orientado por Funcionalidades (FDD).
Embora às vezes sejam consideradas estruturas independentes ou variantes, muitas vezes são vistas como disciplinas ou conjuntos de práticas que aprofundam aspectos particulares do desenvolvimento ágil de software, enfatizando a qualidade por meio de testes rigorosos (TDD) ou a organização do trabalho em torno de funcionalidades tangíveis para o cliente (FDD).
Ambos buscam melhorar a qualidade, a eficiência e a entrega de valor no desenvolvimento de software, especialmente em projetos de certa escala ou complexidade.
Desenvolvimento orientado por testes (TDD): ciclo vermelho-verde-refatoração
O Desenvolvimento Orientado por Testes (TDD) é uma prática de desenvolvimento de software que inverte o fluxo tradicional: primeiro escreve-se um teste automatizado que define um resultado desejado ou uma melhoria e, em seguida, escreve-se o código mínimo necessário para que esse teste seja aprovado.
Baseia-se em duas regras principais: não escrever código funcional a menos que exista um teste que falhe e eliminar a duplicação de código.
O ciclo central do TDD é conhecido como Vermelho-Verde-Refactorização:
- Red: Escrever um teste automatizado para a nova funcionalidade. O teste falhará inicialmente porque o código ainda não existe.
- Green: Escrever o código mais simples possível para que o teste seja aprovado.
- Refactor: Melhorar o código recém-escrito (e o existente) para torná-lo mais limpo, simples e sustentável, garantindo que todos os testes continuem a ser aprovados. O TDD utiliza testes unitários e de aceitação para orientar o design e garantir a qualidade contínua.
Feature-Driven Development (FDD): Focado em Características de Valor
O Desenvolvimento Orientado por Características (FDD) é um processo de desenvolvimento iterativo e incremental projetado especificamente para atender às necessidades de projetos de software de grande porte.
O seu foco principal é organizar o desenvolvimento em torno de características (features), definidas como pequenas partes de funcionalidade que têm valor direto para o cliente.
Cada característica é pequena o suficiente para ser implementada num curto período (normalmente não mais de duas semanas), o que permite entregas frequentes e tangíveis de valor.
O FDD procura fornecer uma estrutura mais formalizada do que outros métodos ágeis para gerir a complexidade inerente a grandes projetos.
Fases e funções do FDD
O FDD está organizado em cinco fases principais que se desenvolvem de forma iterativa:
Desenvolver um modelo geral: criar um modelo de objetos de alto nível do domínio do problema.
Construir uma lista de características: Identificar e listar todas as características necessárias, agrupando-as por áreas temáticas.
Planejar por característica: sequenciar a implementação das características e atribuir conjuntos de características aos programadores-chefe.
- Projetar por característica: A equipa de características produz um pacote de projeto detalhado para cada característica.
- Construir por característica: A equipa implementa o código correspondente à característica, testa-o e integra-o.
O FDD também define funções específicas para gerir este processo, incluindo: Diretor do Projeto, Arquiteto Chefe, Diretor de Desenvolvimento, Programador Chefe, Proprietário da Classe e Especialista no Domínio.
Este conjunto de funções e fases fornece uma estrutura clara para o desenvolvimento em grande escala.
Resumo
TDD (Test-Driven Development) e FDD (Feature-Driven Development) são abordagens específicas relacionadas com XP. O TDD concentra-se na qualidade através de testes rigorosos, enquanto o FDD organiza o trabalho em torno de funcionalidades.
O TDD inverte o fluxo tradicional, escrevendo o teste primeiro. O seu ciclo é Red (teste falha), Green (código passa) e Refactor (melhorar código).
O FDD é um processo iterativo para projetos grandes, centrado em características com valor direto para o cliente. É organizado em cinco fases e inclui funções específicas.
tdd e fdd abordagens derivadas do xp