Módulo 13 - O raio-X do algoritmo

Casos de borda: as entradas que derrubam algoritmos

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 02/07/2026

O que você vai aprender

  • Definir caso de borda e diferenciá-lo do caso comum (o caminho feliz).
  • Conhecer a lista clássica: zero, vazio, limite exato, negativo e valor gigante.
  • Fazer as perguntas de fronteira sobre qualquer algoritmo novo.
  • Testar um algoritmo com entradas extremas usando teste de mesa.

O caminho feliz engana

Imagine um algoritmo que calcula a média de notas de uma turma: soma as notas, divide pela quantidade de alunos, mostra o resultado. Você testa com as notas 7 e 8, dá 7,5, tudo lindo. Aí chega a turma nova, ainda sem alunos matriculados, e o programa trava na frente da secretária: soma zero dividida por quantidade zero. O algoritmo não estava errado para a entrada que você imaginou; estava despreparado para uma entrada que você não imaginou. Esse é o retrato falado do caso de borda: legítimo, possível e ignorado.

Uma estrada larga e iluminada no centro, rotulada caminho feliz, com carros passando tranquilos. Nas margens, dois desfiladeiros rotulados zero e lista vazia, com placas de alerta, mostrando que os acidentes acontecem nas bordas e não no meio da pista.
O meio da pista é seguro; os acidentes acontecem nas bordas que ninguém testou.

Por que o autor não enxerga as bordas? Porque quem escreve um algoritmo escreve pensando no uso típico, e o cérebro testa com exemplos do mesmo molde que usou para criar. É um ponto cego natural, não falta de capacidade. A solução é transformar a caça às bordas em ritual mecânico: terminou o algoritmo, rode a lista de perguntas de fronteira ANTES de dar por pronto. Zero? Vazio? Limite exato? Negativo? Gigante? Cinco perguntas, trinta segundos, e a maior parte dos vexames de produção morre no papel.

A lista clássica das bordas

As bordas variam com o problema, mas cinco famílias respondem por quase todos os desastres. O ZERO, que zera multiplicações e explode divisões. O VAZIO, a lista sem itens ou o texto sem letras, que faz laços não executarem nenhuma volta. O LIMITE EXATO, o valor que empata com a fronteira: o saque exatamente igual ao saldo, a nota exatamente 6 na régua “maior que 6”. O NEGATIVO, onde ele for possível: idade -3, preço -10. E o GIGANTE, o valor absurdamente grande que estoura o razoável: 999 parcelas, um milhão de convidados. Decore as cinco famílias; elas valem para qualquer linguagem, pelo resto da sua vida de programador.

Família de bordaExemplo concretoO que costuma quebrar
Zeroturma com 0 alunosdivisão por zero na média
Vaziolista de compras sem itenslaço que não roda; “maior valor” de nada
Limite exatosaque igual ao saldocondição com > onde deveria ser >=
Negativoidade digitada como -3cálculo aceita e produz resultado sem sentido
Gigante999999 parcelasresultado absurdo, tela ilegível, programa lento

Cinco famílias de borda cobrem a maioria dos bugs de fronteira.

🎮 Jogo da aula

Detector de bordas

Um bom testador fareja a fronteira de longe. Classifique cada entrada: é um caso de borda que merece teste especial ou um caso comum do caminho feliz?

Repare no critério que o jogo treina: borda não é entrada esquisita, é entrada POSSÍVEL que encosta numa fronteira do algoritmo. A turma sem alunos existe todo início de semestre; o saque igual ao saldo acontece todo fim de mês. O programador que trata essas situações não está sendo pessimista, está sendo realista: o mundo entrega essas entradas com uma frequência que o caminho feliz esconde.

Testando as bordas na prática

Caçada a borda, o teste é o de sempre: teste de mesa com a entrada extrema. Pegue o algoritmo da média e execute no papel com quantidade 0: a tabela chega na linha da divisão e não tem como continuar, porque dividir por zero não tem resposta. Pronto, o bug apareceu na folha, e não na frente do usuário. A correção usa o que você aprendeu no módulo 8: uma decisão de guarda antes da conta perigosa. SE a quantidade for zero, avise que não há dados; SENÃO, calcule a média. Uma linha de SE, um vexame a menos.

leia(quantidade)
leia(total)
se quantidade = 0 então
  escreva("Não há notas para calcular a média.")
senão
  media <- total / quantidade
  escreva("Média: ", media)
fim
// entrada de borda: quantidade 0 -> mensagem amigável, sem travar

A decisão de guarda: a borda tratada vira mensagem clara em vez de travamento.

Teste rápido

Um algoritmo de saque libera o dinheiro quando “valor < saldo”. O cliente com saldo de 100 reais tenta sacar exatamente 100 e recebe recusa. Que tipo de problema é esse?

Perguntas frequentes

Por que os casos de borda causam tantos bugs?
Porque quem escreve o algoritmo testa com entradas do mesmo molde que usou para criá-lo, e as fronteiras ficam num ponto cego natural. O código funciona por meses no caminho feliz, até o dia em que o mundo entrega o zero, o vazio ou o valor empatado no limite. O bug parece surpresa, mas estava agendado.
Quais são os casos de borda mais comuns?
Cinco famílias cobrem quase tudo: o zero (que explode divisões), o vazio (lista ou texto sem conteúdo), o limite exato (o valor que empata com a fronteira da condição), o negativo onde só se esperava positivo e o gigante que estoura o razoável. Rodar essas cinco perguntas vira hábito rápido.
Como descubro as bordas de um algoritmo que acabei de escrever?
Olhe cada entrada e cada condição. Para as entradas, pergunte: qual o menor valor possível? O maior? Pode ser zero, vazio ou negativo? Para as condições, pergunte: o que acontece quando o valor EMPATA com o limite? Cada resposta duvidosa merece um teste de mesa com aquela entrada exata.
Caso de borda é sinônimo de entrada inválida?
Não. A borda é uma entrada válida porém extrema: a turma sem alunos e o saque do saldo inteiro são situações reais. Entrada inválida é outra categoria (texto onde se esperava número, por exemplo) e se resolve com validação. As duas merecem tratamento, mas confundi-las esconde bugs.
Divisão por zero acontece em programas de verdade?
O tempo todo: média de uma lista vazia, percentual sobre um total que veio zerado, rateio de conta entre zero participantes. A conta em si quase nunca é o problema; o problema é o divisor que PODE ser zero e ninguém perguntou. A decisão de guarda antes da divisão é o antídoto padrão.
Preciso tratar todas as bordas que eu encontrar?
Trate as que podem acontecer no seu contexto, com decisão de guarda e mensagem clara. As impossíveis de verdade (uma quantidade que o próprio programa garante ser positiva, por exemplo) podem ficar sem tratamento, mas anote a suposição em comentário. Suposição escrita é documentação; suposição na cabeça é bug futuro.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.