🚀 Capítulo 02: Pirâmide de Testes (Tema: Indiana Jones)
NOTE
Este capítulo utiliza a temática de Indiana Jones para explicar a Pirâmide de Testes. Explorar uma pirâmide exige estratégia: a base precisa ser firme para o topo não desabar!
1. 🎯 Objetivo da Aula
Compreender o conceito de Pirâmide de Testes e como distribuir os esforços de teste entre Testes Unitários, Testes de Integração e Testes de Ponta a Ponta (E2E).
2. 🏢 O Cenário Prático (Seu Desafio)
Indiana Jones está explorando uma pirâmide antiga cheia de armadilhas. Para garantir que ele saia vivo, a equipe de suporte (os programadores) dividiu os testes da pirâmide em 3 níveis:
- A Base (Testes Unitários): Eles testam cada pedra individualmente. “Esta pedra aguenta peso?“. São rápidos, baratos e existem milhares deles.
- O Meio (Testes de Integração): Eles testam se a pedra de pressão ativa a armadilha de flechas. Testam a união de duas ou mais partes. São mais lentos e mais caros.
- O Topo (Testes E2E): Eles testam a jornada completa: Indiana entra, desvia das flechas, pega o ídolo de ouro e foge da pedra gigante. São muito lentos e caros, por isso fazemos poucos!
Seu desafio é entender por que não podemos inverter essa pirâmide (colocar muitos testes E2E e poucos unitários)!
3. 🧠 Fundamentos: A Teoria Traduzida
A Pirâmide de Testes é um modelo que sugere a quantidade ideal de testes que devemos ter em cada nível de um software.
📊 Os Três Níveis Clássicos:
-
Testes Unitários (Base):
- O que testam: A menor parte do código (uma função ou método isolado).
- Velocidade: Ultra rápidos (milissegundos).
- Custo: Muito baratos de criar e manter.
- Quantidade: Devem ser a grande maioria dos seus testes.
-
Testes de Integração (Meio):
- O que testam: A comunicação entre duas ou mais unidades (Ex: Se a sua função salva corretamente no Banco de Dados).
- Velocidade: Médios.
- Custo: Médio.
-
Testes de Ponta a Ponta / E2E (Topo):
- O que testam: O sistema inteiro funcionando como o usuário real faria (Ex: Abrir o navegador, digitar login, clicar em entrar).
- Velocidade: Muito lentos.
- Custo: Caros (exigem muita manutenção quando a tela muda).
4. 📖 Exemplo Guiado: O Custo da Inversão
Imagine que você ignorou a pirâmide e fez 1.000 testes E2E e 0 testes unitários (isso se chama Anti-padrão do Sorvete de Casquinha ou Cone de Testes).
- Toda vez que você alterar uma cor no site, 500 testes E2E podem quebrar porque não acharam o botão.
- Para rodar todos os testes, o computador vai demorar 3 horas. Você não vai querer testar toda hora!
- Resultado: Você vai parar de testar e os bugs vão para produção.
5. 🛠️ Prática Obrigatória 1: Alocando na Pirâmide
Diga em qual nível da pirâmide (Unitário, Integração ou E2E) cada teste abaixo se encaixa melhor:
- Verificar se a função
calcularDesconto(100)retorna exatamente90. - Simular um usuário abrindo o aplicativo no celular, colocando um produto no carrinho e finalizando a compra com cartão.
- Verificar se a API do seu sistema consegue enviar e salvar um usuário no banco de dados Postgres real.
6. 🛠️ Prática Obrigatória 2: O Cone de Testes
Por que muitas empresas acabam caindo no erro de criar muitos testes E2E (manuais ou automatizados) e poucos testes unitários? (Dica: Pense em quem está pedindo os testes: o programador ou o cliente que quer ver a tela funcionando?).
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 02 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_02_piramide.md
│ └── codigos/
│ └── cap02/
│ └── niveis_teste.txt9. 💡 Checkpoint de Lógica
A regra de ouro da pirâmide é: Escreva testes de granularidade diferente e mantenha a proporção. Mais unitários, menos integração, bem poucos E2E.
10. 🔥 Desafio de Fixação
Pesquise sobre o conceito de Troféu de Testes (Testing Trophy), uma variação moderna da pirâmide de testes muito usada no mundo do JavaScript/React.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Unitário (Testa apenas uma função matemática isolada).
- E2E (Testa o fluxo completo do usuário).
- Integração (Testa a união do sistema com o banco de dados).