Testar grátis
7 min leitura Guide 744 of 877

Desenvolvimento Orientado a Testes com GitScrum

TDD não é apenas sobre testes - é sobre design e confiança. O GitScrum suporta workflows de TDD com rastreamento de tarefas que reflete o ciclo red-green-refactor.

Fundamentos do TDD

O Ciclo TDD

CICLO RED-GREEN-REFACTOR:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│        ┌────────────┐                                      │
│        │    RED     │  ← Escreva teste que falha          │
│        │  (Teste    │    "O que o código deve fazer?"     │
│        │   Falha)   │                                      │
│        └─────┬──────┘                                      │
│              │                                              │
│              ▼                                              │
│        ┌────────────┐                                      │
│        │   GREEN    │  ← Escreva código mínimo para passar│
│        │  (Teste    │    "Faça funcionar, nada mais"      │
│        │   Passa)   │                                      │
│        └─────┬──────┘                                      │
│              │                                              │
│              ▼                                              │
│        ┌────────────┐                                      │
│        │  REFACTOR  │  ← Melhore sem quebrar testes       │
│        │  (Código   │    "Faça ficar limpo"               │
│        │   Limpo)   │                                      │
│        └─────┬──────┘                                      │
│              │                                              │
│              └──────────→ Repita                           │
│                                                             │
│ TEMPO DO CICLO: Minutos, não horas                        │
│                                                             │
│ REGRAS CHAVE:                                               │
│ • Nunca escreva código sem um teste falhando              │
│ • Escreva o código mínimo para passar                     │
│ • Refatore só quando testes estiverem verdes              │
│ • Rode testes frequentemente                              │
└─────────────────────────────────────────────────────────────┘

Benefícios do TDD

POR QUE TDD FUNCIONA:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ BENEFÍCIOS DE DESIGN:                                       │
│ • Força pensar na interface primeiro                      │
│ • Leva a código modular e testável                        │
│ • Captura problemas de design cedo                        │
│ • Resulta em designs mais simples                         │
│                                                             │
│ BENEFÍCIOS DE QUALIDADE:                                    │
│ • Bugs capturados imediatamente                           │
│ • Alta cobertura de teste naturalmente                   │
│ • Proteção contra regressão                               │
│ • Confiança para refatorar                                │
│                                                             │
│ BENEFÍCIOS DE PRODUTIVIDADE:                               │
│ • Menos tempo debugando                                   │
│ • Feedback mais rápido                                    │
│ • Documentação através de testes                          │
│ • Onboarding mais fácil                                   │
│                                                             │
│ BENEFÍCIOS PSICOLÓGICOS:                                    │
│ • Pequenas vitórias (testes verdes)                       │
│ • Confiança no código                                     │
│ • Seguro para mudar                                       │
│ • Progresso claro                                         │
│                                                             │
│ SEM TDD:                                                    │
│ Escreve código → Testa depois → Acha bugs → Debug → Fix  │
│                                                             │
│ COM TDD:                                                    │
│ Escreve teste → Escreve código → Passa → Refatora → Pronto│
└─────────────────────────────────────────────────────────────┘

TDD na Prática

Exemplo de Workflow

EXEMPLO TDD - ADICIONAR AO CARRINHO:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ STORY: "Como usuário, posso adicionar itens ao carrinho" │
│                                                             │
│ CICLO TDD 1:                                                │
│                                                             │
│ RED: Escreva teste                                         │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ test('adiciona item ao carrinho vazio', () => {        ││
│ │   const carrinho = new Carrinho();                     ││
│ │   carrinho.adicionar(item);                            ││
│ │   expect(carrinho.items.length).toBe(1);               ││
│ │ });                                                     ││
│ │ // Resultado: ❌ FALHA - Carrinho não existe           ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ GREEN: Escreva código mínimo                               │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ class Carrinho {                                       ││
│ │   items = [];                                          ││
│ │   adicionar(item) { this.items.push(item); }          ││
│ │ }                                                       ││
│ │ // Resultado: ✅ PASSA                                 ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ REFACTOR: (Nada para refatorar ainda)                     │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ CICLO TDD 2:                                                │
│                                                             │
│ RED: Próximo comportamento                                 │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ test('não adiciona item duplicado', () => {            ││
│ │   const carrinho = new Carrinho();                     ││
│ │   carrinho.adicionar(item);                            ││
│ │   carrinho.adicionar(item);                            ││
│ │   expect(carrinho.items.length).toBe(1);               ││
│ │   expect(carrinho.items[0].quantidade).toBe(2);        ││
│ │ });                                                     ││
│ │ // Resultado: ❌ FALHA                                 ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ GREEN: Adicione lógica                                     │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ adicionar(item) {                                      ││
│ │   const existente = this.items.find(                   ││
│ │     i => i.id === item.id                             ││
│ │   );                                                    ││
│ │   if (existente) {                                     ││
│ │     existente.quantidade++;                            ││
│ │   } else {                                              ││
│ │     this.items.push({...item, quantidade: 1});        ││
│ │   }                                                     ││
│ │ }                                                       ││
│ │ // Resultado: ✅ PASSA                                 ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ Continue ciclo para cada comportamento...                 │
└─────────────────────────────────────────────────────────────┘

TDD no GitScrum

Rastreando Trabalho TDD

TDD NO GITSCRUM:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ STORY COM TDD:                                              │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ US-123: Calcular total do pedido com desconto         ││
│ │                                                         ││
│ │ CRITÉRIOS DE ACEITE:                                   ││
│ │ ☐ Soma preços dos itens                               ││
│ │ ☐ Aplica desconto percentual                          ││
│ │ ☐ Não permite desconto > 50%                          ││
│ │ ☐ Arredonda para 2 casas decimais                     ││
│ │                                                         ││
│ │ SUBTAREFAS:                                             ││
│ │ ☐ [TDD] Teste: soma preços                            ││
│ │ ☐ [TDD] Teste: aplica desconto                        ││
│ │ ☐ [TDD] Teste: limite de desconto                     ││
│ │ ☐ [TDD] Teste: arredondamento                         ││
│ │ ☐ Refatoração final                                   ││
│ │                                                         ││
│ │ DEFINIÇÃO DE DONE:                                      ││
│ │ ☐ Todos os testes passando                            ││
│ │ ☐ Cobertura > 90%                                     ││
│ │ ☐ Code review aprovado                                ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ CADA SUBTAREFA TDD:                                         │
│ 1. Escreva teste (RED)                                    │
│ 2. Faça passar (GREEN)                                    │
│ 3. Refatore se necessário                                 │
│ 4. Marque como concluída                                  │
│ 5. Próxima subtarefa                                      │
└─────────────────────────────────────────────────────────────┘

Quando Usar TDD

Quando TDD Brilha

TDD É IDEAL PARA:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ ✅ USE TDD:                                                 │
│                                                             │
│ LÓGICA DE NEGÓCIO:                                          │
│ • Cálculos financeiros                                    │
│ • Regras de validação                                     │
│ • State machines                                          │
│ • Algoritmos                                              │
│                                                             │
│ CÓDIGO CRÍTICO:                                             │
│ • Autenticação/Autorização                                │
│ • Processamento de pagamento                              │
│ • Transformação de dados                                  │
│                                                             │
│ CÓDIGO QUE VAI MUDAR:                                       │
│ • Features com evolução esperada                         │
│ • Código que outros vão modificar                        │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ ⚠️ TDD MENOS VALIOSO:                                       │
│                                                             │
│ • Protótipos descartáveis                                │
│ • Exploração de UI/layout                                │
│ • Spikes de pesquisa                                      │
│ • Código gerado automaticamente                          │
│ • Scripts únicos                                          │
│                                                             │
│ NOTA: Mesmo nesses casos, adicione testes depois          │
│ se o código vai para produção                             │
└─────────────────────────────────────────────────────────────┘

Dicas Práticas

Para Começar com TDD

COMEÇANDO COM TDD:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ PASSO 1: COMECE PEQUENO                                     │
│ • Escolha uma função isolada                              │
│ • Pratique o ciclo básico                                 │
│ • Não tente TDD em tudo de uma vez                       │
│                                                             │
│ PASSO 2: ESCREVA O TESTE MAIS SIMPLES                      │
│ • Comece com happy path                                   │
│ • Um comportamento por teste                              │
│ • Nome descreve o que testa                              │
│                                                             │
│ PASSO 3: CÓDIGO MÍNIMO PARA PASSAR                         │
│ • Resista a escrever código "extra"                      │
│ • Pode parecer "feio" inicialmente                       │
│ • Refatore depois                                         │
│                                                             │
│ PASSO 4: REFATORE COM CONFIANÇA                            │
│ • Testes protegem você                                    │
│ • Melhore nomes, extraia funções                         │
│ • Rode testes após cada mudança                          │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ ERROS COMUNS:                                               │
│                                                             │
│ ❌ Escrever implementação antes do teste                   │
│ ❌ Múltiplos comportamentos por teste                      │
│ ❌ Testes que dependem de ordem                            │
│ ❌ Testar detalhes de implementação                       │
│ ❌ Pular refatoração                                       │
└─────────────────────────────────────────────────────────────┘

Soluções Relacionadas