🚀 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:

  1. 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.
  2. 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.
  3. 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:

  1. Verificar se a função calcularDesconto(100) retorna exatamente 90.
  2. Simular um usuário abrindo o aplicativo no celular, colocando um produto no carrinho e finalizando a compra com cartão.
  3. 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)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 02 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_02_piramide.md
│   └── codigos/
│       └── cap02/
│           └── niveis_teste.txt

9. 💡 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:

  1. Unitário (Testa apenas uma função matemática isolada).
  2. E2E (Testa o fluxo completo do usuário).
  3. Integração (Testa a união do sistema com o banco de dados).

Capitulo Anterior | Proximo Capitulo