Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aprimorando as habilidades de debugging e troub...

Aprimorando as habilidades de debugging e troubleshooting

Palestra apresentada na Python Brasil 2016

Elias Dorneles

October 15, 2016
Tweet

More Decks by Elias Dorneles

Other Decks in Programming

Transcript

  1. Elias Dorneles • Python Floripa <3 • OSS: Scrapy, Parsel,

    skinfer, cookiecutter-pypackage, etc • Trabalha na Scrapinghub • Blog: http://eliasdorneles.github.io • Twitter: @eliasdorneles
  2. Todo projeto de software tem um pouco de risco Defeitos

    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.
  3. Exponha ao mundo real pra saber se funciona mesmo “Se

    ainda não foi usado, não funciona” -- John Osterhout Existem coisas que você só aprende em produção
  4. Não existe receita para todos os casos, mas... Temos alguma

    ideia dos principais ingredientes: 1. Atitude positiva 2. Conhecimento 3. Ferramentas 4. Método
  5. Ao se deparar com um bug, não entre em pânico!

    Lembre-se que TEM QUE haver uma explicação lógica para o que está acontecendo. Pense que está prestes a aprender algo
  6. Seis estágios de debugging 1. “Não tem como isso acontecer!”

    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/
  7. 1. “Não tem como isso acontecer!” 2. “Isso não acontece

    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!
  8. Do que você sente falta saber com mais frequência hoje?

    • Problema humano que o software resolve (business) • Linguagem(ns) • Stack ◦ Framework, libs ◦ Ambiente / sistema operacional ◦ Infraestrutura • Ferramentas
  9. Ferramentas são importantes “Debugar” é basicamente aprender Para aprender, é

    importante ver o que está acontecendo Seeing Spaces, vídeo do Bret Victor: http://worrydream.com/SeeingSpaces
  10. Ferramentas legais de conhecer • Algum debugger Python qualquer (pudb,

    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
  11. Caso: hook falhando, jobs em outro app não disparavam •

    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!
  12. Balance intuição e análise quando troubleshooting “Use intuição para fazer

    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
  13. Use o método científico 1. Fazer observações ◦ reproduzir/confirmar o

    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
  14. Confirme que você resolveu o problema “Se você não sabe

    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.
  15. Corrija erros no tratamento antes da causa original Ou seja:

    “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
  16. Bug trackers acumulam informações valiosas com o tempo. • Github

    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
  17. Recapitulando... 1. Mantenha uma atitude positiva 2. Busque saber mais

    coisas 3. Utilize as ferramentas disponíveis
  18. Recapitulando... 1. Mantenha uma atitude positiva 2. Busque saber mais

    coisas 3. Utilize as ferramentas disponíveis 4. Use o método científico (ou o mais próximo possível)
  19. Recapitulando... 1. Mantenha uma atitude positiva 2. Busque saber mais

    coisas 3. Utilize as ferramentas disponíveis 4. Use o método científico (ou o mais próximo possível) Now, go forth and debug!
  20. THANKS! Perguntas? Links: • http://jvns.ca/blog/2015/11/22/ho w-i-got-better-at-debugging • http://nedbatchelder.com/text/fix -err-hand.html •

    https://www.quora.com/What-are -the-most-profound-life-lessons-f rom-Stanford-Professor-John-Ou sterhout • http://web.stanford.edu/~ouster/c gi-bin/sayings.php Elias Dorneles @eliasdorneles