Módulo 13 - O raio-X do algoritmo

Melhorando um algoritmo que funciona (sem quebrar nada)

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

O que você vai aprender

  • Definir refatoração: melhorar a forma do código sem mudar o comportamento.
  • Aplicar as três melhorias clássicas: nomes claros, repetição extraída, bordas tratadas.
  • Usar o teste de mesa antes e depois para provar que nada mudou.
  • Reconhecer uma regressão e saber por que ela acontece.

Funcionar é o começo, não o fim

Código se escreve uma vez e se lê dezenas: pelo colega que vai dar manutenção, pelo você de daqui a seis meses (que é praticamente um estranho) e por quem precisar caçar um bug com as técnicas deste módulo. Por isso, entre dois algoritmos que produzem exatamente a mesma saída, o mais claro vale mais. Refatorar é investir nessa clareza: mexer na forma preservando o comportamento. Não é reescrever do zero, não é adicionar recurso novo, não é corrigir bug. É pegar o que funciona e deixá-lo mais fácil de entender, com a mão firme de quem sabe provar que nada mudou.

As três melhorias com melhor retorno você já conhece de módulos anteriores, agora reunidas num ritual só. Nomes que se explicam, do módulo 3: a variável “x” vira “precoTotal” e metade dos comentários fica desnecessária. Repetição extraída, do módulo 12: o mesmo bloco copiado três vezes vira uma função chamada três vezes, e a próxima correção acontece num lugar só. E bordas tratadas, da aula 3 deste módulo: a decisão de guarda entra antes da conta perigosa. Nenhuma das três muda a saída para as entradas comuns; todas mudam a vida de quem lê.

Antes: funciona, mas custa caro ler

  • x <- a * b
  • Variáveis a, b e x: só o autor sabe o que são (e só até sexta-feira).
  • O mesmo cálculo de desconto copiado em três pontos do programa.
  • Divisão sem guarda: a lista vazia trava o programa.

Depois: funciona igual, e se lê sozinho

  • precoTotal <- precoUnitario * quantidade
  • Os nomes contam a história: qualquer leitor entende sem comentário.
  • Uma função calcularDesconto chamada três vezes: correção futura num lugar só.
  • Guarda antes da divisão: a lista vazia recebe mensagem clara.

A prova de que nada mudou

Melhorar sem medir é como apertar parafuso de olhos fechados: pode estar tudo bem, pode estar caindo a asa. A medição do refatorador é o teste de mesa comparado. Antes de mexer, execute o algoritmo original com duas ou três entradas (uma comum e uma de borda) e anote as saídas: essa é a fotografia do comportamento. Depois de mexer, execute a versão nova com as MESMAS entradas. Saídas idênticas: melhoria aprovada. Qualquer diferença: você não refatorou, você mudou o comportamento, e agora precisa decidir se foi de propósito ou se acabou de fabricar uma regressão.

// Antes: soma escrita duas vezes, nomes mudos
t <- 0
para i de 1 até 3 faça
  t <- t + i
fim
escreva(t)

// Depois: nome claro, mesma lógica
total <- 0
para numero de 1 até 3 faça
  total <- total + numero
fim
escreva(total)
// as duas versões escrevem 6: comportamento preservado

Refatoração honesta: o leitor ganhou clareza, a saída não mudou um milímetro.

🎮 Jogo da aula

O fiscal da refatoração

Uma colega refatorou o algoritmo abaixo e jura que o comportamento não mudou. Faça o teste de mesa da versão nova e diga qual é a saída, para conferir se a promessa se cumpriu.

total <- 0
para numero de 1 até 4 faça
  total <- total + numero
fim
escreva(total)

Inclua sempre uma entrada de borda no par de fotografias. É comum a refatoração preservar o caminho feliz e alterar a fronteira sem ninguém notar: o laço que antes rodava de 1 até N e agora roda de 0 até N produz a mesma soma em vários casos e uma soma diferente quando os valores mudam de natureza. A borda é onde as versões divergem primeiro; fotografe-a antes e depois, e as regressões silenciosas perdem o esconderijo.

Quando parar de melhorar

Refatoração é ferramenta, não hobby infinito. O critério de parada é prático: o algoritmo está claro o bastante para um colega entender sem você do lado? As bordas prováveis estão tratadas? A repetição óbvia foi extraída? Então pare e siga para o próximo problema. Existe até um lembrete clássico entre programadores: o ótimo é inimigo do entregue. Polir um algoritmo pela décima vez rende menos que aplicar o módulo 13 inteiro no próximo: testar na mesa, rastrear, blindar as bordas e depurar com método é um ciclo que melhora a cada repetição, e o módulo 14 traz problemas do mundo real para você rodá-lo por inteiro.

Teste rápido

Depois de renomear variáveis e reorganizar um algoritmo que funcionava, o cálculo do troco passou a errar para pagamentos exatos. Como se chama esse fenômeno e o que o teria evitado?

Perguntas frequentes

Se o algoritmo já funciona, por que gastar tempo melhorando?
Porque código se lê muito mais vezes do que se escreve, e quem lê costuma ser você mesmo meses depois, já sem o contexto. Nomes claros, repetição extraída e bordas tratadas reduzem o custo de cada manutenção futura. É o mesmo motivo de organizar a caixa de ferramentas: não muda o martelo, muda a sua vida.
O que é uma regressão, exatamente?
É um comportamento que funcionava e quebrou depois de uma mudança, mesmo que a mudança parecesse inofensiva, como renomear variáveis. O nome vem da ideia de o programa “regredir” a um estado pior. É o risco número um da refatoração e a razão de existir o teste comparado antes e depois.
Como tenho certeza de que a melhoria não quebrou nada?
Certeza absoluta não existe, mas o protocolo chega perto: escolha duas ou três entradas (incluindo uma de borda), rode o teste de mesa na versão antiga e anote as saídas, depois rode as MESMAS entradas na versão nova. Saídas idênticas indicam comportamento preservado. As equipes profissionais automatizam essa comparação com testes que rodam a cada mudança.
Refatorar é deixar o código mais curto?
Nem sempre, e essa confusão gera código ruim. O objetivo é clareza, e às vezes a versão clara é MAIS longa: uma guarda de borda adiciona linhas, um nome descritivo é maior que “x”. Encurtar só vale quando remove repetição ou ruído. Na dúvida entre curto e claro, escolha claro.
Posso refatorar e corrigir um bug na mesma mexida?
Evite: são experimentos diferentes e misturá-los embaralha as conclusões, como você viu na aula de depuração. Corrija o bug primeiro, confirme com teste de mesa, e só então refatore com o comportamento já correto como referência. Uma mudança de cada vez mantém causa e efeito visíveis.
Isso tem relação com as funções do módulo 12?
Total: extrair um bloco repetido para uma função é a refatoração mais clássica que existe. O módulo 12 ensinou a ferramenta; esta aula ensina o protocolo de segurança para usá-la em código que já funciona: fotografar o comportamento antes, extrair, e conferir que as saídas continuam idênticas.

Fontes

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