🚀 Capítulo 17: Cobertura de Código (Tema: Harry Potter / Mapa do Maroto)
NOTE
Este capítulo utiliza a temática de Harry Potter para explicar a Cobertura de Código. O Mapa do Maroto mostra todo o castelo; a cobertura mostra quais partes do seu código os testes já visitaram!
1. 🎯 Objetivo da Aula
Compreender o conceito de Cobertura de Código (Code Coverage) e aprender a medir a porcentagem de linhas e caminhos do seu código que são realmente executados pelos seus testes.
2. 🏢 O Cenário Prático (Seu Desafio)
Os gêmeos Fred e Jorge deram a Harry o Mapa do Maroto. Ele mostra todas as salas e passagens secretas de Hogwarts.
- Se o Harry explorar apenas o Salão Principal, o mapa dele terá uma cobertura baixa de Hogwarts.
- Para ter 100% de cobertura, ele precisa caminhar por cada corredor e passagem secreta do castelo!
No software, o seu código é o castelo. Os seus testes são o Harry caminhando. A Cobertura de Código mede quantas linhas do seu código foram “visitadas” (executadas) pelos seus testes. Seu desafio é cobrir o mapa inteiro!
3. 🧠 Fundamentos: A Teoria Traduzida
Code Coverage (Cobertura de Código) é uma métrica que indica a porcentagem do código-fonte de um programa que foi executado durante os testes.
📍 Tipos de Cobertura:
- Cobertura de Linha (Line Coverage): Quantas linhas de código foram executadas? (Se o arquivo tem 10 linhas e o teste passou por 8, a cobertura é de 80%).
- Cobertura de Ramo (Branch Coverage): O teste passou por todos os caminhos do
ife doelse? (Se você só testou o caminho doife esqueceu oelse, a cobertura de ramo cai pela metade!).
⚠️ O Mito dos 100%
Ter 100% de cobertura de código significa que todas as linhas foram testadas. Mas isso NÃO significa que o código está livre de bugs! Você pode ter 100% de cobertura e os testes serem fracos (não verificarem os resultados corretamente).
- Uma cobertura saudável para a maioria dos projetos fica entre 70% e 80%.
4. 📖 Exemplo Guiado: O Teste Incompleto (JS)
Veja esta função com um if/else:
function verificarAcesso(idade) {
if (idade >= 18) {
return "Acesso Permitido"; // Linha A
} else {
return "Acesso Negado"; // Linha B
}
}Seu Teste:
// Teste chamando com idade 20
const resultado = verificarAcesso(20);- Esse teste passou pela Linha A, mas NUNCA passou pela Linha B!
- A cobertura de linhas aqui seria de cerca de 75%. Para ter 100%, você precisaria criar outro teste passando uma idade menor que 18!
5. 🛠️ Prática Obrigatória 1: Calculando a Cobertura
Dada a função abaixo:
function calcularClima(temperatura) {
if (temperatura > 30) {
return "Quente";
}
if (temperatura < 15) {
return "Frio";
}
return "Agradável";
}Se você escrever apenas um teste chamando calcularClima(35):
- Quantos caminhos (retornos) essa função tem no total?
- Quantos caminhos o seu teste cobriu? Qual a porcentagem de cobertura de caminhos?
6. 🛠️ Prática Obrigatória 2: O Mapa em Branco
Imagine que você criou uma função nova e esqueceu de escrever o teste para ela. O que a ferramenta de Code Coverage vai mostrar no relatório sobre esse arquivo novo? Por que isso ajuda o programador a saber o que testar a seguir?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 17 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_17_cobertura.md
│ └── codigos/
│ └── cap17/
│ └── coverage_report.txt9. 💡 Checkpoint de Lógica
Ferramentas de cobertura de código (como Istanbul ou NYC no Node.js) geram relatórios visuais onde as linhas não testadas ficam marcadas em vermelho!
10. 🔥 Desafio de Fixação
Pesquise como o site Codecov ou SonarQube ajuda as empresas a monitorar a cobertura de código diretamente no GitHub.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- A função tem 3 caminhos de retorno (“Quente”, “Frio” e “Agradável”).
- O teste com 35 cobriu apenas o caminho “Quente”. Cobriu 1 de 3 caminhos (cerca de 33% de cobertura de caminhos).