Aprimorando as habilidades de debugging e troubleshooting

Aprimorando as habilidades de debugging e troubleshooting

Palestra apresentada na Python Brasil 2016

Dfd7b9492f5c5e49dca373bfdd7a3b1a?s=128

Elias Dorneles

October 15, 2016
Tweet

Transcript

  1. Aprimorando as habilidades de debugging e troubleshooting Elias Dorneles @eliasdorneles

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

    skinfer, cookiecutter-pypackage, etc • Trabalha na Scrapinghub • Blog: http://eliasdorneles.github.io • Twitter: @eliasdorneles
  3. Por que software possui bugs? Dica: NÃO é porque desenvolvedores

    sejam incompetentes
  4. 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.
  5. 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
  6. None
  7. 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
  8. 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
  9. 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/
  10. 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!
  11. Tente abordar bugs com curiosidade =)

  12. Busque saber mais coisas Porque criatividade e ferramentas não são

    suficientes.
  13. 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
  14. Livros são atalhos!

  15. 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
  16. 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
  17. Às vezes, você precisa fazer a própria ferramenta

  18. 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!
  19. Às vezes, a parte mais importante é encontrar a melhor

    forma de testar
  20. Resista à tentação de Shotgun Debugging

  21. Resista à tentação de Shotgun Debugging Prefira Rubberduck Debugging!

  22. Ou seja: fale com as pessoas! Não fique sozinho travado

    (por muito tempo) .
  23. 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
  24. 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
  25. É importante reverter ao estado original caso a hipótese falhar

  26. 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.
  27. 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
  28. 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
  29. Respondam a pesquisa do João Felipe! http://pydebug.npimentel.net

  30. Recapitulando... 1. Mantenha uma atitude positiva

  31. Recapitulando... 1. Mantenha uma atitude positiva 2. Busque saber mais

    coisas
  32. Recapitulando... 1. Mantenha uma atitude positiva 2. Busque saber mais

    coisas 3. Utilize as ferramentas disponíveis
  33. 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)
  34. 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!
  35. 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