Por que testar e rastrear antes de codificar
Antes de transformar um algoritmo em código, é possível (e recomendável) validar se a lógica está correta usando testes e rastreamento. Isso reduz retrabalho, porque você encontra erros de regra de negócio, de condição e de laço quando ainda é barato corrigir. A validação prévia tem três pilares: (1) construir casos de teste com entradas e saídas esperadas, (2) executar uma simulação manual passo a passo, e (3) registrar a execução em uma tabela de rastreamento para enxergar como as variáveis mudam ao longo do tempo.
Construção de casos de teste: normais, limites e inválidos
O que é um caso de teste
Um caso de teste é um par (ou conjunto) de entradas com uma saída esperada. Ele deve ser específico o suficiente para que duas pessoas diferentes cheguem ao mesmo resultado esperado ao ler o enunciado do problema.
Três categorias que você deve sempre cobrir
- Normais: valores típicos, dentro do uso esperado.
- Limites: valores nas bordas das regras (mínimo, máximo, transições de faixa, zero, um elemento, etc.).
- Inválidos: entradas fora do domínio (negativo quando não pode, formato incorreto, lista vazia quando não permitido). Mesmo que o algoritmo “não aceite”, o teste serve para confirmar que a resposta é uma mensagem/ação de erro coerente.
Checklist para desenhar bons testes
- Liste as regras do problema em frases curtas (ex.: “se média >= 7, aprovado”).
- Para cada regra, crie ao menos um teste que a acione.
- Para cada fronteira, crie testes imediatamente abaixo, exatamente na fronteira e imediatamente acima (ex.: 6,9; 7,0; 7,1).
- Inclua pelo menos um teste inválido por tipo de invalidez (ex.: negativo, acima do máximo, vazio).
- Escreva a saída esperada como você gostaria de ver no resultado final (valor, texto, estrutura).
Exemplo 1: validar um algoritmo de desconto com tabela de casos
Enunciado (para testes)
Calcular o valor final de uma compra. Regras: se o valor da compra for maior ou igual a 200, aplicar 10% de desconto; caso contrário, não há desconto. Entrada: valorCompra. Saída: valorFinal. Entrada inválida: valor menor ou igual a zero.
Tabela de casos de teste
| ID | Tipo | Entrada (valorCompra) | Saída esperada | Observação |
|---|---|---|---|---|
| T1 | Normal | 350 | 315 | Aplica 10% |
| T2 | Normal | 120 | 120 | Sem desconto |
| T3 | Limite | 200 | 180 | Fronteira do desconto |
| T4 | Limite | 199.99 | 199.99 | Logo abaixo da fronteira |
| T5 | Inválido | 0 | ERRO: valor inválido | Não aceita zero |
| T6 | Inválido | -10 | ERRO: valor inválido | Não aceita negativo |
Simulação manual (passo a passo) para um caso
Use a simulação manual para confirmar que o pseudocódigo, ao ser executado “na cabeça”, produz a saída esperada. Exemplo com T3 (valorCompra = 200):
- Entrada: valorCompra = 200
- Validação: 200 > 0, então continua
- Regra do desconto: 200 >= 200, então desconto = 10%
- valorFinal = 200 - (200 * 0,10) = 180
- Saída: 180
Tabelas de rastreamento: enxergando variáveis por iteração
O que é uma tabela de rastreamento
Uma tabela de rastreamento (trace table) registra, linha a linha, o estado das variáveis relevantes durante a execução. Ela é especialmente útil em laços e em condicionais aninhadas, onde erros de atualização e de condição são comuns.
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
Como montar (modelo prático)
- Defina quais variáveis acompanhar (as que mudam e as que controlam decisões).
- Crie uma coluna para o “passo” ou “iteração”.
- Inclua uma coluna para a condição do laço/decisão (verdadeiro/falso) quando isso ajudar.
- Preencha a tabela na ordem em que o algoritmo executa, anotando mudanças após cada comando relevante.
Exemplo 2: laço com soma e rastreamento completo
Pseudocódigo a validar
Objetivo: somar números de 1 até N (inclusive). Entrada: N. Saída: soma. Entrada inválida: N < 1.
ALGORITMO SomaDe1AteN LEIA N SE N < 1 ENTAO ESCREVA "ERRO: N deve ser >= 1" RETORNE FIM SE soma <- 0 i <- 1 ENQUANTO i <= N FACA soma <- soma + i i <- i + 1 FIM ENQUANTO ESCREVA somaFIM ALGORITMOCasos de teste sugeridos
| ID | Tipo | Entrada (N) | Saída esperada |
|---|---|---|---|
| S1 | Normal | 5 | 15 |
| S2 | Limite | 1 | 1 |
| S3 | Limite | 2 | 3 |
| S4 | Inválido | 0 | ERRO: N deve ser >= 1 |
Tabela de rastreamento (simulação manual para N = 5)
Preencha considerando que a condição do laço é verificada antes de entrar em cada iteração.
| Iteração | i (antes) | Condição i <= N | soma (antes) | Ação | soma (depois) | i (depois) |
|---|---|---|---|---|---|---|
| 0 | 1 | 1 <= 5 (V) | 0 | soma <- soma + i | 1 | 2 |
| 1 | 2 | 2 <= 5 (V) | 1 | soma <- soma + i | 3 | 3 |
| 2 | 3 | 3 <= 5 (V) | 3 | soma <- soma + i | 6 | 4 |
| 3 | 4 | 4 <= 5 (V) | 6 | soma <- soma + i | 10 | 5 |
| 4 | 5 | 5 <= 5 (V) | 10 | soma <- soma + i | 15 | 6 |
| 5 | 6 | 6 <= 5 (F) | 15 | sai do laço | 15 | 6 |
Rastreamento em condicionais: cobrindo caminhos de decisão
Ideia central
Em condicionais, o rastreamento ajuda a confirmar qual ramo foi executado e com quais valores. Em vez de “variáveis por iteração”, você registra “variáveis por decisão”: condição avaliada, resultado (V/F), ramo escolhido e valores calculados.
Mini-modelo de rastreamento para decisão
| Passo | Expressão | Resultado | Ramo | Variáveis afetadas |
|---|---|---|---|---|
| 1 | valorCompra <= 0 | F | continua | - |
| 2 | valorCompra >= 200 | V | aplica desconto | valorFinal |
Atividades práticas (com roteiro): encontrar falhas, corrigir e revalidar
Atividade 1 — Erro de fronteira (limite) em desconto
Objetivo: identificar um erro lógico que só aparece no caso limite e corrigir.
Pseudocódigo com falha:
ALGORITMO DescontoCompra LEIA valorCompra SE valorCompra <= 0 ENTAO ESCREVA "ERRO: valor inválido" RETORNE FIM SE SE valorCompra > 200 ENTAO valorFinal <- valorCompra * 0.90 SENAO valorFinal <- valorCompra FIM SE ESCREVA valorFinalFIM ALGORITMORoteiro:
- 1) Use os testes T1 a T6 da tabela do exemplo de desconto.
- 2) Simule manualmente T3 (valorCompra = 200) e compare com a saída esperada (180).
- 3) Identifique a causa: a condição usa
> 200em vez de>= 200. - 4) Corrija o pseudocódigo alterando a condição.
- 5) Revalide executando novamente T1, T2, T3 e T4 (os inválidos devem continuar gerando erro).
Correção esperada (trecho):
SE valorCompra >= 200 ENTAOAtividade 2 — Erro de atualização em laço (soma)
Objetivo: usar tabela de rastreamento para detectar laço infinito ou soma incorreta.
Pseudocódigo com falha:
ALGORITMO SomaDe1AteN_Falha LEIA N SE N < 1 ENTAO ESCREVA "ERRO: N deve ser >= 1" RETORNE FIM SE soma <- 0 i <- 1 ENQUANTO i <= N FACA soma <- soma + i i <- i - 1 FIM ENQUANTO ESCREVA somaFIM ALGORITMORoteiro:
- 1) Escolha o teste S2 (N = 1) e inicie uma tabela de rastreamento com colunas: iteração, i, condição, soma.
- 2) Simule 3 passos. Observe que
idiminui e a condiçãoi <= Npermanece verdadeira indefinidamente (tende a laço infinito). - 3) Identifique a linha causadora:
i <- i - 1. - 4) Corrija para
i <- i + 1. - 5) Revalide com S1 (N = 5) e confirme pela tabela de rastreamento que a soma chega a 15 e o laço termina quando i = 6.
Atividade 3 — Falha em regra de inválido (aceitando entrada proibida)
Objetivo: garantir que testes inválidos realmente bloqueiam a execução.
Cenário: você tem um algoritmo que calcula a média de duas notas (0 a 10) e deveria rejeitar qualquer nota fora do intervalo.
Pseudocódigo com falha:
ALGORITMO MediaDuasNotas_Falha LEIA n1 LEIA n2 SE n1 < 0 E n1 > 10 ENTAO ESCREVA "ERRO: n1 inválida" RETORNE FIM SE SE n2 < 0 E n2 > 10 ENTAO ESCREVA "ERRO: n2 inválida" RETORNE FIM SE media <- (n1 + n2) / 2 ESCREVA mediaFIM ALGORITMORoteiro:
- 1) Crie uma tabela de testes com pelo menos: (5, 7) normal; (0, 10) limite; (-1, 7) inválido; (11, 7) inválido; (7, 12) inválido.
- 2) Simule manualmente o caso (-1, 7). Observe que a condição
n1 < 0 E n1 > 10nunca será verdadeira (um número não pode ser menor que 0 e maior que 10 ao mesmo tempo). - 3) Corrija a lógica trocando
EporOUnas validações. - 4) Revalide com os mesmos testes inválidos e confirme que agora são rejeitados.
Correção esperada (trechos):
SE n1 < 0 OU n1 > 10 ENTAO ...SE n2 < 0 OU n2 > 10 ENTAO ...Como documentar resultados: matriz de testes + evidência de rastreamento
Matriz de testes (modelo enxuto)
Ao validar um algoritmo, mantenha uma matriz simples para registrar o que foi testado e o que aconteceu. Isso ajuda a revalidar após correções sem “inventar” novos resultados.
| ID | Entrada | Esperado | Obtido (simulação) | Status | Observação |
|---|---|---|---|---|---|
| T3 | valorCompra=200 | 180 | 200 | FALHA | Condição deveria ser >= 200 |
| T3 | valorCompra=200 | 180 | 180 | OK | Após correção |
Evidência de rastreamento (o que guardar)
- Uma tabela de rastreamento para pelo menos um caso normal e um caso limite em algoritmos com laço.
- Um registro de qual ramo foi executado em condicionais críticas (principalmente fronteiras).
- O conjunto de testes usado antes e depois da correção (para provar revalidação).