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 full-size 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 full-size slide

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

    View full-size 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 full-size 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 full-size slide

  6. 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 full-size slide

  7. 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 full-size slide

  8. 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 full-size slide

  9. 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 full-size slide

  10. Tente abordar bugs com curiosidade =)

    View full-size slide

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

    View full-size slide

  12. 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 full-size slide

  13. Livros são
    atalhos!

    View full-size slide

  14. 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 full-size slide

  15. 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 full-size slide

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

    View full-size slide

  17. 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 full-size slide

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

    View full-size slide

  19. Resista à tentação
    de Shotgun
    Debugging

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  22. 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 full-size slide

  23. 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 full-size slide

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

    View full-size slide

  25. 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 full-size slide

  26. 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 full-size slide

  27. 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 full-size slide

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

    View full-size slide

  29. Recapitulando...
    1. Mantenha uma atitude positiva

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  32. 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 full-size 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)
    Now, go forth and debug!

    View full-size slide

  34. 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 full-size slide