Depurar sistematicamente
Não adivinhe e aplique patch. Cada etapa deve reduzir onde o bug pode estar.
1. Reproduzir
- Obtenha o erro exato, stack trace, logs, entradas e ambiente (versões, SO, configuração).
- Faça a falha acontecer sob demanda, idealmente com um comando ou um teste. Se for intermitente, descubra o que a torna mais provável (carga, tempo, ordenação, uma entrada específica).
- Se não conseguir reproduzi-la, diga isso e colete mais informações antes de alterar o código.
2. Isolar
- Encolha a reprodução: remova entradas, passos e código até que remover qualquer outra coisa faça o bug desaparecer.
- Se funcionava antes, encontre a alteração que o quebrou:
git lognos arquivos afetados, ougit bisect run <comando de teste>. - Leia o stack trace do topo do seu código, não do framework.
3. Hipótese e teste
- Escreva uma hipótese específica: "o cache retorna entradas obsoletas porque a chave ignora a localidade".
- Projete uma verificação que prove ou refute a hipótese: uma linha de log, uma asserção, um breakpoint no depurador, um teste unitário. Preveja o resultado antes de executá-lo.
- Se o resultado te surpreender, seu modelo do código está errado. Atualize-o antes de tentar a próxima ideia.
- Mude uma coisa de cada vez. Reverta experimentos que não ajudaram.
4. Corrigir a causa
- Corrija onde o valor errado é produzido, não onde é notado. Verifique se o mesmo erro existe em outros lugares.
- Adicione um teste de regressão que falhe antes da correção e passe depois.
- Remova logs temporários e código de depuração.
5. Relatar
Explique a causa raiz em uma ou duas frases, a correção, como você a verificou e qualquer coisa ainda não explicada.