🚀 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:
-
🔴 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.
-
🟢 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!
-
🔵 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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 04 Qualidade) e clique em Commit to main. - 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.js9. 💡 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:
- (2) Escrever o código real.
- (3) Melhorar o nome das variáveis (Refactor).
- (1) Escrever o teste primeiro (Red).