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

  1. 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%).
  2. Cobertura de Ramo (Branch Coverage): O teste passou por todos os caminhos do if e do else? (Se você só testou o caminho do if e esqueceu o else, 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):

  1. Quantos caminhos (retornos) essa função tem no total?
  2. 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)

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

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

  1. A função tem 3 caminhos de retorno (“Quente”, “Frio” e “Agradável”).
  2. O teste com 35 cobriu apenas o caminho “Quente”. Cobriu 1 de 3 caminhos (cerca de 33% de cobertura de caminhos).

Capitulo Anterior | Proximo Capitulo