Vous êtes sur la page 1sur 35

Aprimorando as habilidades de

debugging e troubleshooting
Elias Dorneles
@eliasdorneles
Elias Dorneles
● Python Floripa <3
● OSS: Scrapy, Parsel, skinfer,
cookiecutter-pypackage, etc
● Trabalha na Scrapinghub
● Blog: http://eliasdorneles.github.io
● Twitter: @eliasdorneles
Por que software possui bugs?
Dica: NÃO é porque desenvolvedores sejam incompetentes
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.
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
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
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


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/


Pule os primeiros estágios!

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...?”
Tente abordar bugs com curiosidade =)
Busque saber mais coisas
Porque criatividade e ferramentas não são suficientes.
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
Livros são
atalhos!
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
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
Às vezes, você precisa
fazer a própria
ferramenta
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!
Às vezes, a parte mais
importante é encontrar a
melhor forma de testar
Resista à tentação
de Shotgun
Debugging
Prefira
Rubberduck
Debugging!
Resista à tentação
de Shotgun
Debugging
Ou seja: fale com as pessoas!
Não fique sozinho travado (por muito tempo).
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
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
É importante reverter ao
estado original caso a
hipótese falhar
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.
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
Use um bug tracker
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!


Respondam a pesquisa do João Felipe!

http://pydebug.npimentel.net
Recapitulando...
1. Mantenha uma atitude positiva
Recapitulando...
1. Mantenha uma atitude positiva
2. Busque saber mais coisas
Recapitulando...
1. Mantenha uma atitude positiva
2. Busque saber mais coisas
3. Utilize as ferramentas disponíveis
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)
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!


Links:

THANKS!
● http://jvns.ca/blog/2015/11/22/ho
w-i-got-better-at-debugging

Perguntas?
● http://nedbatchelder.com/text/fix
-err-hand.html
● https://www.quora.com/What-are
Elias Dorneles -the-most-profound-life-lessons-f
@eliasdorneles rom-Stanford-Professor-John-Ou
sterhout
● http://web.stanford.edu/~ouster/c
gi-bin/sayings.php

Vous aimerez peut-être aussi