frequentemente não são descobertos até que certas falhas específicas os tragam à tona. Mesmo com desenvolvedores habilidosos, software inevitavelmente acumula comportamentos indefinidos ou defeituosos.
2. “Isso não acontece na minha máquina.” 3. “Isso não devia acontecer!” 4. “Por que isso tá acontecendo?” 5. “Ahh, entendi...” 6. “Como diabos isso funcionava antes!?!?” Original em: http://plasmasturm.org/log/6debug/
na minha máquina.” 3. “Isso não devia acontecer!” Negar um problema que está obviamente acontecendo é prolongar a frustração (mesmo que apenas mentalmente). Já comece com: “hmm... estranho! o que será que poderia causar isso...?” Pule os primeiros estágios!
ipdb, etc) ◦ Ver estado dos objetos na memória • Strace (strace zine by Julia Evans) ◦ Ver operações a nível de SO • Wireshark / tcpdump / ngrep ◦ Ver os dados que estão passando no fio • Sentry ◦ Ver estado dos objetos post-mortem
Eu tinha uma hipótese, precisava confirmar, corrigir e rodar os jobs que deviam ter sido disparados • Fiz um script gerando tabela HTML com timeline dos eventos • Pude confirmar o problema e encontrar os jobs que precisava rodar. • WIN!
perguntas, não para respondê-las” -- John Osterhout Intuição ~= hipótese Precisa de análise adicional para expor todos os fatores envolvidos e verificar se a intuição estava ou não correta
bug (MCV) 2. Formular hipóteses verificáveis ◦ isolar e expor o bug, eliminar ruído 3. Experimento para invalidar a hipótese ◦ não confie na intuição 4. Conforme resultado, voltar ao passo 1
qual era o problema, você não o resolveu!” -- John Osterhout Ao enfrentar um problema difícil de reproduzir, não assuma que o problema está resolvido só porque ele não aparece mais.
“corrija de trás pra frente” • Código que trata erros é frequentemente menos exercitado • Cadeia de erros iniciada por uma causa inicial ◦ Exemplo: dado estranho/faltando no DB causando comportamento inesperado na aplicação • O erro original é um caso de teste para o tratamento de erros! • É mais fácil corrigir quando você pode testar imediatamente
Issues: configure um template com perguntas relevantes ◦ Tipo “qual a versão?”, “qual o SO?”, etc • Reporte bugs nos projetos open source que você usa! Use um bug tracker