Seu Código Quebrou? Siga Estes 6 Passos Antes de Entrar em Pânico

Resolver bugs de forma desorganizada consome tempo e energia. Ter um processo claro faz toda a diferença na hora de ser mais eficiente no desenvolvimento.

Por isso, criei um guia com 6 passos práticos de troubleshooting pra te ajudar a lidar com problemas de forma mais organizada e objetiva.

Etapa 1: Definir o problema

Antes de iniciar as etapas de solução de problemas, é fundamental definir claramente o problema. Isso ajuda a reduzir o escopo e a selecionar o caminho de resolução apropriado.

🔑 Principais ações:

Reúna detalhes do usuário:

  • Que ação ele estava tentando executar?

  • Quando o problema ocorreu?

  • Há alguma mensagem de erro ou captura de tela?

  • Isso já aconteceu antes ou é um problema pontual?

Esclareça o impacto:

  • Trata-se de um bloqueador ou de um pequeno inconveniente?

  • O problema está afetando um usuário ou vários usuários?

Reproduza o problema:

  • Tente reproduzir o problema usando as mesmas etapas, o mesmo dispositivo e o mesmo ambiente.

Etapa 2: coletar informações

Depois que o problema estiver claramente definido, a próxima etapa é coletar mais informações para identificar a causa raiz.

🔑 Principais ações:

  • 🧠 Usar ferramentas de depuração: depurar ativamente o código. Defina pontos de interrupção para pausar a execução e percorra o código linha por linha para inspecionar o estado das variáveis e entender o fluxo do aplicativo.

  • 💻 Inspecionar a base de código: analise as alterações recentes no código. Muitas vezes, os problemas são introduzidos pelo novo código. Use o controle de versão (git log, git blame) para ver o que foi modificado recentemente nas partes relevantes do aplicativo.

  • 📊 Verifique os registros e as ferramentas de monitoramento: analise os logs do aplicativo, os logs do servidor, os relatórios de falhas e os painéis de monitoramento de desempenho. Procure mensagens de erro, rastreamentos de pilha e padrões incomuns no momento em que o problema ocorreu.

  • ⚙️ Analise o ambiente: um problema pode não estar no código, mas em seu ambiente. Verifique as configurações, as variáveis de ambiente, as dependências e o status dos serviços externos (por exemplo, APIs de terceiros).

  • 🌐 Examine a atividade da rede e do banco de dados: use as ferramentas de desenvolvimento do navegador para inspecionar as solicitações e respostas da rede. Use as ferramentas de banco de dados para analisar as consultas em busca de erros ou problemas de desempenho.

Etapa 3: Formule uma hipótese

Com base nas informações que você coletou, forme uma hipótese fundamentada sobre a causa raiz. O que você acredita que está causando o problema?

🔑 Principais ações:

  • Identificar possíveis causas: liste as causas prováveis com base nas evidências. Por exemplo: "A mensagem de erro undefined não é uma função e a recente alteração de código em userUtils.js sugere que a função formatUserName está sendo chamada antes de o objeto do usuário ser carregado."

  • Comece com a explicação mais simples: não presuma imediatamente uma causa complexa. Muitas vezes, a raiz do problema é um simples erro de digitação, um valor nulo ou uma configuração incorreta.

  • Consulte um colega de equipe: explicar o problema para outra pessoa (também conhecido como "depuração de pato de borracha" 🦆) muitas vezes pode revelar soluções simples que você não percebeu.

Etapa 4: teste a hipótese

Com uma hipótese clara, a próxima etapa é testá-la de forma controlada. O objetivo aqui é provar ou refutar sua teoria sem causar novos problemas.

🔑 Principais ações:

  • Isolar a variável: faça a menor alteração possível para testar sua hipótese. Isso pode ser a codificação temporária de um valor, o comentário de um bloco de código ou a alteração de um sinalizador de configuração em um ambiente local, ou de desenvolvimento.

  • Crie um teste mínimo viável: é possível replicar o problema em um contexto simplificado, como um teste de unidade ou um script pequeno e isolado? Isso confirma sua compreensão do problema.

  • Observe o resultado: após fazer a alteração no teste, execute o cenário novamente. Se o problema desaparecer, é provável que você tenha encontrado a causa. Se o problema persistir, sua hipótese estava incorreta. Volte à Etapa 3 e formule uma nova hipótese com base nessas novas informações.

Etapa 5: implementar a correção e verificar

Após confirmar a causa raiz, é hora de implementar uma solução adequada e permanente.

Principais ações:

  • Escrever o código: implemente a correção com base em suas descobertas. Certifique-se de que sua solução esteja limpa, siga os padrões de codificação e não introduza novos bugs.

  • Adicione testes: se possível, escreva um teste automatizado (unitário, de integração ou de ponta a ponta) que falhe quando o bug estiver presente e passe quando a correção for aplicada. Isso evita que o mesmo bug reapareça no futuro.

  • Verifique a solução: teste exaustivamente a correção em um ambiente de preparação. Tente quebrar a solução. Teste não apenas o caminho do problema original, mas também as áreas relacionadas do aplicativo para garantir que você não tenha introduzido nenhum efeito colateral. Peça a um colega para revisar seu código.

Etapa 6: Documentar e comunicar

A etapa final é fechar o ciclo. A documentação e a comunicação adequadas evitam problemas futuros e ajudam toda a equipe a aprender.

Principais ações:

  • Documentar a solução: se o problema for complexo ou não óbvio, documente a causa e a solução na base de conhecimento da sua equipe (por exemplo, Confluence, Notion) ou no próprio código como comentários.

  • Comunique a correção: atualize o tíquete relevante (por exemplo, no Jira ou no GitHub Issues) com uma explicação clara da correção. Informe às partes interessadas, incluindo o usuário que relatou o problema, que o problema foi resolvido e quando a correção será implantada.

  • Reflita e aprenda: considere se alguma mudança no processo poderia ter evitado esse bug. Foi a falta de testes? Uma API confusa? Uma lacuna na documentação? Use o incidente como uma oportunidade de aprendizado para a equipe.

Este é o framework que funciona para mim. Você segue um processo parecido? Qual etapa você considera a mais crítica ou a mais negligenciada nos times em que trabalhou? Vamos discutir!

0
Subscribe to my newsletter

Read articles from Daniele Pishinin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Daniele Pishinin
Daniele Pishinin

Software Engineer