programandoai

Testar hipóteses: o console como lanterna

Quando o código roda sem erro nenhum, mas o resultado está errado, a mensagem de erro não ajuda: não existe mensagem nenhuma. É aí que entra a mentalidade de debug de verdade.

Estudar esta lição interativa →

O tipo de bug mais desafiador não é o que trava com uma mensagem de erro: é o que roda liso, sem reclamar nada, e simplesmente entrega um resultado errado. Sem uma mensagem apontando a linha, você precisa investigar como um detetive: formular uma hipótese específica de onde o problema pode estar, e usar console.log para inspecionar valores no meio do caminho, não só no final.

let notas = [7, 8, 5, 9];
let soma = 0;

for (let i = 0; i < notas.length; i++) {
  soma += notas[i];
}
console.log("soma:", soma);

let media = soma / (notas.length - 1);
console.log("media:", media);

Rode e compare a soma exibida com o valor esperado (7+8+5+9 = 29).

A soma impressa está correta, 29, mas a média está errada. Aqui está a técnica central desta lição: em vez de encarar o código inteiro de uma vez, isole cada passo, imprimindo os valores intermediários, até achar exatamente onde a conta diverge do esperado. Com a soma confirmada certa, o problema só pode estar na conta da média: notas.length - 1 divide por um número a menos do que deveria, um erro parecido com o off-by-one do Módulo 4.

Pense num eletricista procurando um curto-circuito numa casa inteira: em vez de trocar a fiação inteira no escuro, ele testa um cômodo de cada vez, com uma lanterna, até isolar exatamente o ponto do problema. console.log espalhado pelo código, mostrando valores no meio do caminho, é exatamente essa lanterna: ilumina um pedaço de cada vez, até o problema ficar visível.

Antes de testar, escreva a hipótese

Um hábito que acelera muito a investigação: antes de sair colocando console.log em tudo, escreva (mesmo que só mentalmente) uma frase como "eu acho que o problema está no cálculo da média, porque a soma já foi confirmada certa". Isso transforma uma busca aleatória numa investigação dirigida, o que costuma resolver o bug bem mais rápido.

Um resultado 'quase certo' costuma ser um erro de um a mais ou a menos

Quando um número está errado por uma diferença pequena e estranhamente específica (como dividir pelo tamanho errado por só 1), a primeira suspeita deve recair sobre limites de laço, tamanhos de lista e índices, os mesmos lugares onde vive o clássico erro de um a mais ou a menos do Módulo 4. Resultados completamente absurdos costumam ter uma causa diferente (tipo errado, operador errado); resultados "quase certos" costumam ser esse tipo de erro de contagem.

let notas = [7, 8, 5, 9];
let soma = 0;

for (let i = 0; i < notas.length; i++) {
  soma += notas[i];
}

let media = soma / (notas.length - 1);
console.log("media:", media);

Corrija o divisor da média e rode.

A função calcularMedia(notas) abaixo tem um bug lógico: ela divide a soma pelo tamanho errado da lista. Corrija a função para que ela devolva a média correta de qualquer lista de notas recebida.
function calcularMedia(notas) {
  let soma = 0;
  for (let i = 0; i < notas.length; i++) {
    soma += notas[i];
  }
  return soma / (notas.length - 1);
}

🧩 Este é um exercício com correção automática — abra no app para completá-lo e verificar.

← Voltar ao índice do curso