🚀 Capítulo 04: TDD (Test-Driven Development) (Tema: Doutor Estranho)

NOTE

Este capítulo utiliza a temática de Doutor Estranho para explicar o TDD. Usar o Olho de Agamotto para ver o futuro (o teste) antes de criar a realidade (o código) é o segredo do sucesso!


1. 🎯 Objetivo da Aula

Compreender o conceito de Desenvolvimento Orientado por Testes (TDD) e dominar o ciclo clássico: Red, Green, Refactor.

2. 🏢 O Cenário Prático (Seu Desafio)

O Doutor Estranho precisa enfrentar o Dormammu. Para vencer, ele usa a Joia do Tempo para prever os futuros possíveis.

  • Ele não ataca às cegas. Ele primeiro imagina o resultado (O Teste).
  • Ele vê que vai falhar no início (Red).
  • Ele ajusta suas ações para conseguir passar pelo desafio (Green).
  • Ele aperfeiçoa seus movimentos para gastar menos energia (Refactor).

No desenvolvimento de software, o TDD faz exatamente isso: você escreve o teste ANTES de escrever o código do sistema! Seu desafio é aprender a ver o futuro do seu código!

3. 🧠 Fundamentos: A Teoria Traduzida

O TDD (Test-Driven Development) é uma prática de desenvolvimento onde você guia a criação do seu código através dos testes.

🔄 O Ciclo Red - Green - Refactor:

  1. 🔴 RED (Vermelho):

    • Você escreve um teste para uma função que ainda não existe ou não funciona.
    • Você roda o teste e ele falha (fica vermelho). Isso é bom! Significa que o teste é válido.
  2. 🟢 GREEN (Verde):

    • Você escreve o código mais simples e rápido possível apenas para fazer o teste passar.
    • Não importa se o código está feio, o importante é ficar verde!
  3. 🔵 REFACTOR (Refatorar):

    • Agora que está funcionando e seguro, você limpa o código, remove duplicidades e melhora os nomes das variáveis.
    • Você roda o teste de novo para garantir que não quebrou nada.

4. 📖 Exemplo Guiado: O Ciclo em Ação

Queremos criar uma função que calcula o dobro de um número.

Passo 1: Escrevemos o Teste (RED)

// A função calcularDobro ainda NÃO existe!
const resultado = calcularDobro(5);
if (resultado === 10) { console.log("Verde"); }
else { console.log("Vermelho"); } // Vai dar erro porque a função não existe!

Passo 2: Escrevemos o código mais simples (GREEN)

function calcularDobro(n) {
    return 10; // Código bobo, mas faz o teste acima passar! Ficou Verde!
}

Passo 3: Refatoramos para valer (REFACTOR)

function calcularDobro(n) {
    return n * 2; // Agora o código está correto e o teste continua passando!
}

5. 🛠️ Prática Obrigatória 1: Ordenando o Ciclo

Coloque as ações abaixo na ordem correta do ciclo TDD (1, 2 ou 3):

  • ( ) Escrever o código real para a função funcionar.
  • ( ) Melhorar o nome das variáveis e remover código repetido.
  • ( ) Escrever o teste que verifica se a função retorna o valor correto.

6. 🛠️ Prática Obrigatória 2: Por que fazer o teste falhar primeiro?

No passo RED, nós somos obrigados a ver o teste falhar antes de escrever o código. Por que não podemos pular essa etapa e ir direto para o código e depois testar? O que aconteceria se o nosso teste estivesse escrito errado e passasse sempre (mesmo com o código errado)?


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 04 Qualidade) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_11_qualidade_e_testes_de_software/
├── capitulos/
│   ├── capitulo_04_tdd.md
│   └── codigos/
│       └── cap04/
│           └── ciclo_tdd.js

9. 💡 Checkpoint de Lógica

O TDD ajuda você a focar nas necessidades do usuário (o que a função deve fazer) antes de focar em como ela vai fazer por dentro.

10. 🔥 Desafio de Fixação

Pesquise sobre as “Leis do TDD” escritas por Uncle Bob (Robert C. Martin).

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. (2) Escrever o código real.
  2. (3) Melhorar o nome das variáveis (Refactor).
  3. (1) Escrever o teste primeiro (Red).

Capitulo Anterior | Proximo Capitulo