Diagnosticando Bugs
Construa um sinal de aprovação/reprovação rápido e específico antes de formar uma teoria forte. Remova segredos de comandos, saída, rastreamentos e artefatos salvos.
Ciclo
- Reproduzir. Escreva um comando que atinja o sintoma exato do usuário e possa falhar com esse bug. Se não existir um reprodutor enxuto, leia references/feedback-loop.md.
- Minimizar. Remova entradas, etapas, chamadores e configuração um de cada vez. Mantenha apenas o que a falha precisa.
- Formular hipóteses. Escreva de 3 a 5 causas falsificáveis, ranqueadas. Para cada uma, nomeie a observação que a confirmaria ou rejeitaria.
- Sondar. Altere uma variável de cada vez. Prefira um depurador ou instrumentação focada nos limites. Marque logs temporários com um prefixo único
[DEBUG-...]. - Travar a correção. Transforme a menor reprodução real em um teste de regressão com falha na costura pública correta. Aplique a menor correção. Reexecute o teste e a reprodução original.
- Limpar. Remova instrumentação e gabaritos temporários. Reporte a causa, evidência, correção e qualquer lacuna de cobertura restante.
Regras
- Após duas tentativas de correção falhas, pare. Reavalie a hipótese ou o design antes de tentar outro patch. Não empilhe palpites.
- Para uma regressão de desempenho, meça uma linha de base e faça perfil ou bissecção antes de alterar o código. Logs sozinhos não são um diagnóstico de desempenho.
- Se não existir uma costura de teste correta, diga isso. Após a correção, use
$codebase-designpara julgar se a costura ausente precisa de trabalho estrutural. - Reivindique sucesso apenas quando o sintoma original desaparecer e a verificação de regressão for aprovada.