🚀 Capítulo 12: TDD (Test Driven Development) (Tema: Minority Report)
NOTE
Este capítulo utiliza a temática de Minority Report para explicar o TDD. Preveja os erros antes que eles aconteçam escrevendo o teste antes do código!
1. 🎯 Objetivo da Aula
Compreender o conceito de TDD (Test Driven Development - Desenvolvimento Guiado por Testes), entendendo o ciclo Red-Green-Refactor e as vantagens de se trabalhar dessa forma.
2. 🏢 O Cenário Prático (Seu Desafio)
No filme Minority Report, a polícia usa seres especiais chamados “Precognitivos” que conseguem prever um crime antes que ele aconteça. A polícia vai até o local e impede o criminoso antes que ele faça algo errado.
No desenvolvimento de software tradicional, nós escrevemos o código e depois testamos para ver se tem erros (reagimos ao crime). No TDD, nós agimos como a polícia do filme! Nós escrevemos o teste antes de escrever o código da funcionalidade. O teste serve como a “previsão” de como o código deve funcionar. Se o código não funcionar como o teste previu, o teste falha! Seu desafio é prever o comportamento do seu código!
🧠 Fundamentos: A Teoria Traduzida
O TDD inverta a ordem das coisas. Em vez de Programar Testar, nós fazemos: Testar Programar.
🔄 O Ciclo Red-Green-Refactor:
O TDD funciona em um ciclo infinito de 3 passos:
- 🔴 RED (Vermelho):
- Você escreve um teste para uma função que ainda não existe.
- Você roda o teste e ele falha (fica vermelho) porque o código ainda não foi escrito. Isso prova que o teste é válido e está procurando algo real.
- 🟢 GREEN (Verde):
- Você escreve o código mais simples e rápido possível apenas para fazer o teste passar.
- Você roda o teste e ele passa (fica verde).
- 🔵 REFACTOR (Refatorar):
- Agora que o código funciona e está protegido pelo teste, você limpa a bagunça! Melhora os nomes das variáveis, remove duplicidades e aplica o Clean Code.
- Você roda o teste de novo para garantir que a sua limpeza não quebrou nada!
4. 📖 Exemplo Guiado: O Ciclo na Prática
Imagine que queremos criar uma função que diz se uma pessoa pode votar (idade ).
- RED: Escrevo o teste:
assert(pode_votar(16) == true). O teste dá erro porque a funçãopode_votarnem existe. - GREEN: Escrevo o código mais bobo possível:
bool pode_votar(int idade) { return true; }. O teste passa! (Ficou verde). - REFACTOR: Agora eu arrumo o código para a lógica real:
bool pode_votar(int idade) { return idade >= 16; }. O teste continua passando!
5. 🛠️ Prática Obrigatória 1: Em qual fase estamos?
Identifique em qual fase do ciclo TDD (Red, Green ou Refactor) a equipe está em cada situação:
- O programador acabou de escrever um teste e a tela do computador ficou vermelha acusando que a função ainda não foi implementada.
- O programador está mudando o nome de uma variável de
xparalimite_de_tentativasapós o teste já ter passado com sucesso. - O programador escreveu um código provisório bem simples apenas para fazer a barra de progresso do teste ficar verde.
6. 🛠️ Prática Obrigatória 2: A Vantagem do TDD
Muitos programadores dizem que o TDD faz a equipe perder tempo, porque você precisa escrever o dobro de código (o teste e o programa).
- Por que, no longo prazo, o TDD na verdade economiza tempo da equipe de desenvolvimento?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 12 EngSoftware) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
extra_engenharia_de_software/
├── capitulos/
│ ├── capitulo_12_tdd.md
│ └── codigos/
│ └── cap12/
│ └── teste_tdd.cpp💡 Checkpoint de Lógica
O TDD não é sobre testar o software. É sobre design. Escrever o teste antes força você a pensar em como a função será usada antes de tentar construí-la, gerando códigos muito mais simples e focados!
10. 🔥 Desafio de Fixação
Pesquise o que significa o termo Test Coverage (Cobertura de Testes).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Red (O teste falhou como esperado).
- Refactor (Melhorando a qualidade do código após ele funcionar).
- Green (Focando apenas em fazer o teste passar). Gabarito da Prática 2:
- Porque você encontra os erros no exato momento em que está digitando o código. Não há o risco de descobrir um bug semanas depois e ter que parar tudo para caçá-lo. Além disso, o código já nasce documentado pelos próprios testes!