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

Aprimorando as habilidades de debugging e troubleshooting

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. Aprimorando as habilidades de
    debugging e troubleshooting
    Elias Dorneles
    @eliasdorneles

    View Slide

  2. Elias Dorneles

    Python Floripa <3

    OSS: Scrapy, Parsel, skinfer,
    cookiecutter-pypackage, etc

    Trabalha na Scrapinghub

    Blog: http://eliasdorneles.github.io

    Twitter: @eliasdorneles

    View Slide

  3. Por que software possui bugs?
    Dica: NÃO é porque desenvolvedores sejam incompetentes

    View Slide

  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.

    View Slide

  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

    View Slide

  6. View Slide

  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

    View Slide

  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

    View Slide

  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/

    View Slide

  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!

    View Slide

  11. Tente abordar bugs com curiosidade =)

    View Slide

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

    View Slide

  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

    View Slide

  14. Livros são
    atalhos!

    View Slide

  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

    View Slide

  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

    View Slide

  17. Às vezes, você precisa
    fazer a própria
    ferramenta

    View Slide

  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!

    View Slide

  19. Às vezes, a parte mais
    importante é encontrar a
    melhor forma de testar

    View Slide

  20. Resista à tentação
    de Shotgun
    Debugging

    View Slide

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

    View Slide

  22. Ou seja: fale com as pessoas!
    Não fique sozinho travado (por muito tempo)
    .

    View Slide

  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

    View Slide

  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

    View Slide

  25. É importante reverter ao
    estado original caso a
    hipótese falhar

    View Slide

  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.

    View Slide

  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

    View Slide

  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

    View Slide

  29. Respondam a pesquisa do João Felipe!
    http://pydebug.npimentel.net

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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)

    View Slide

  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!

    View Slide

  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

    View Slide