Unidade 6 / 12

Depuração e análise de causa raiz

Ganhos:

  • Capacidade de reduzir um bug à menor instância reproduzível e movê-lo para IA com prova completa
  • Capacidade de testar hipóteses baseadas em evidências com o controle mais barato e encontrar a causa raiz
  • Capacidade de resolver a causa raiz e protegê-la com um teste de regressão em vez de corrigir o sintoma

A depuração é o processo de descobrir por que um software se comporta de forma inesperada e corrigi-lo. É o trabalho onde um desenvolvedor passa mais tempo e fica mais cansado; Porque na maioria das vezes o erro não está onde aparece, mas está escondido alguns passos atrás. A IA é um parceiro de pensamento poderoso que acelera esta investigação — mas apenas se lhe fornecermos as provas corretas. A depuração sem evidências é a área onde a IA produz mais alucinações.

Nesta unidade, estabelecemos um fluxo disciplinado desde a geração do erro até chegar à causa raiz: esclarecimento do sintoma, coleta de evidências (mensagem de erro, rastreamento de pilha, log, entrada), geração de hipótese, teste da hipótese e validação da correção. A IA ajuda em cada etapa; mas a decisão "consertada" é tomada verificando-se que o bug realmente desapareceu.

Por que a evidência é tudo?

Um LLM não vê o erro da mesma forma que você; Ele só sabe o que você diz a ele. Uma frase como “O aplicativo trava” quase não fornece ao modelo nenhuma informação, e o modelo preenche a lacuna com uma previsão – isto é, uma alucinação. Por sua vez, a mensagem de erro completa, rastreamento de pilha – um detalhamento de quais chamadas de função o erro ocorreu, a entrada que acionou o erro e o que era esperado, etc. Dado o comportamento observado, o modelo pode classificar probabilidades verdadeiras.

Na depuração, pense na IA como uma assistente de detetive: quanto mais evidências você apresentar, mais precisa será a hipótese que ela gera. Se não houver evidências, o assistente apenas adivinhará e poderá levá-lo ao caminho errado.

Dica: Antes de portar um bug para IA, reduza-o ao menor exemplo reproduzível. O menor código e entrada que aciona o erro torna as coisas radicalmente mais fáceis para você e para o modelo; na maioria das vezes, durante essa redução, você mesmo encontra a causa.

Passo a passo: fluxo de análise de causa raiz

  1. Esclareça o sintoma. "O que está acontecendo, o que você esperava que acontecesse?" Escreva os dois em uma frase.
  2. Reúna evidências. Mensagem de erro completa, rastreamento de pilha, linhas de log relevantes, entrada de acionamento, informações de versão.
  3. Gere a hipótese. Da AI “3 possíveis causas que explicam este sintoma e como faço para testar cada uma?” perguntar.
  4. Teste primeiro a hipótese mais barata. Adicione um log, imprima um valor, execute um teste. A evidência confirma a hipótese?
  5. Corrija a causa raiz, não o sintoma. Em vez de silenciar o sintoma com um patch, resolva a causa raiz.
  6. Valide e adicione testes de regressão. Veja o erro desaparecer; Em seguida, escreva um teste que detecte esse erro para que ele não volte.

Três Mini Estojos

Caso 1 — O rastreamento de pilha levou ao arquivo correto. Um aplicativo estava retornando um erro 500 em determinadas solicitações. O desenvolvedor forneceu o rastreamento completo da pilha e a solicitação de acionamento à IA; O modelo levantou a hipótese de que o erro foi causado por um valor Nenhum em uma camada de análise de data. O desenvolvedor adicionou um log a essa linha, verificou e resolveu em 15 minutos; 2 horas foram desperdiçadas no dia anterior com experimentos não comprovados.

Caso 2 — A alucinação levou ao caminho errado. Outro desenvolvedor simplesmente escreveu “a conexão com o banco de dados está caindo”. A IA acusou uma configuração de pool de conexões sem qualquer evidência; O desenvolvedor passou 40 minutos mexendo nessa configuração. A causa real foi um tempo limite do lado da rede e só foi revelado observando os logs. Lição: uma hipótese tomada sem evidências é apenas provável, não confiável.

Caso 3 — Erro instável detectado. Houve um teste que ocasionalmente falhou. A IA recebeu o código de teste, a mensagem de falha e a informação “às vezes passa, às vezes falha”; o modelo indicou uma dependência compartilhada de tempo/ordem dos testes. A revisão confirmou que o teste foi baseado na hora local do sistema. Depois que o relógio foi corrigido (simulado), o teste tornou-se estável.

Quatro modelos copiáveis

Geração de hipóteses baseadas em evidências:

Estou depurando um bug. Evidência abaixo.- Comportamento esperado: {{expected}}- Comportamento observado: {{observed}}- Mensagem de erro/stack trace: {{trace}}- Entrada de acionamento: {{input}}- Ambiente/versão: {{version}}Liste as 3 causas raiz MAIS PROVÁVEIS que explicam esse sintoma. Para cada um: como faço para testar (verificação mais barata) e como consertar se for verdade. Se as evidências forem insuficientes, diga-me quais informações adicionais você precisa.

Interpretando o rastreamento de pilha:

Leia este rastreamento de pilha. Distinga entre em qual linha o erro PROVAVELMENTE começa (a raiz) e quais linhas são apenas continuações da cadeia. Sugira um ou dois lugares para procurar primeiro. Código relacionado:{{code}}Trace:{{trace}}

Subtração mínima de reprodução:

O código abaixo produz um erro. Reduza-o para a instância MENOR que ainda aciona o erro, mas descarta tudo o que for desnecessário. Não presuma que cada peça removida não afeta o erro, mas adicione uma nota dizendo "se o erro desaparecer quando você remover isso, é por isso".{{code}}

Validação pós-correção e teste de regressão:

Suponha que a causa raiz seja {{cause}} e eu faça a seguinte correção: {{fix}}.1) Essa correção realmente corrige o sintoma, terá algum efeito colateral?2) Escreva um teste de regressão que detectará esse bug no futuro.

Alerta fraco / Alerta forte

Fraco: "O código não funciona, por quê?"
Forte: "Nó 20 / Express. POST /orders retorna 500 quando items é uma string vazia no corpo; deveria ter retornado 400. Rastreamento de pilha: TypeError: Não é possível ler propriedades de indefinido (leitura '0') - em anexo está o rastreamento completo e o manipulador associado. Dê-me as 3 causas mais prováveis que explicam esse sintoma e como testar cada uma. [rastreamento + código]"

Versão poderosa; Ele fornece o ambiente, o endpoint, a entrada do gatilho, o tipo exato de erro e o comportamento esperado. O modelo não pode mais fazer previsões, mas sim análises.

passo

A contribuição da IA

seu controle

coletando evidências

Que evidências são necessárias, lembra

Realmente coleta evidências

geração de hipóteses

Liste os possíveis motivos

Prioriza com contexto

teste de hipótese

Recomenda método de teste

Opera e observa pessoalmente

correção

patch recomenda

Isso resolve a causa raiz? É verdade.

regressão

escreve um teste

Verifica se o teste está quebrado

Resolvendo a causa raiz, não o sintoma

Na maioria das vezes, a IA irá sugerir um patch que silencia rapidamente o sintoma: adicione um try/catch, coloque uma verificação de nulo, engula o erro. Isto às vezes é verdade, muitas vezes perigoso; porque a causa original permanece no lugar e irrompe novamente de algum outro lugar. A cada correção, pergunte-se: “Isso corrige a causa do erro ou o torna invisível?” Depois de encontrar a causa raiz, a correção geralmente é menor, mais robusta e permanente.

Cuidado: Engolir silenciosamente uma exceção (captura vazia) não resolve o erro; apenas oculta e torna impossível o diagnóstico futuro. Se a IA sugerir tal “solução”, não a aceite sem questionar a causa raiz.

Erros comuns

  • Fazer perguntas sem evidências. Frases ambíguas levam o modelo à alucinação; Forneça erro completo, rastreamento e entrada.
  • Fixando-se na primeira hipótese. A primeira sugestão da IA ​​pode não ser a mais provável; Comece com a hipótese controlável mais barata.
  • Corrigindo o sintoma e ignorando a causa raiz. O erro silenciado retorna.
  • Fechando a correção sem verificá-la. Veja em condições de produção que o erro realmente desaparece.
  • Não escrever testes de regressão. Se nenhum teste for adicionado, o mesmo erro retornará silenciosamente em versões posteriores.

Em resumo

Na depuração, o poder da IA é diretamente proporcional à evidência que você fornece: sem a mensagem de erro completa, o rastreamento de pilha, a entrada de acionamento e o comportamento esperado, o modelo apenas especula. Fluxo disciplinado – esclarecer sintomas, reunir evidências, gerar hipóteses, testar com controle mais barato, corrigir a causa raiz, verificar e adicionar testes de regressão – elimina o bug de forma rápida e permanente. A IA é um gerador de hipóteses; Você é quem decide que o bug foi realmente resolvido.

Tarefa de aplicativo

Escolha um bug real que você encontrou recentemente (ou reproduza um bug de teste). Execute primeiro a etapa de “reprodução mínima”; Remova o menor código e entrada que aciona o erro. Em seguida, obtenha três possíveis causas e métodos de teste da IA ​​com o modelo de “geração de hipóteses baseadas em evidências”. Teste você mesmo a hipótese mais barata, encontre a causa raiz, corrija-a e, finalmente, escreva um teste de regressão que detectará esse bug no futuro e verificará se o teste está realmente quebrado.

lista de verificação

  • [] Reduzo o erro para a menor amostra reproduzível antes de movê-lo para a IA.
  • [] Estou adicionando a mensagem de erro completa, rastreamento de pilha, entrada e comportamento esperado ao prompt.
  • [ ] Começo com o controlável mais barato, sem ficar preso a uma única hipótese.
  • [] Verifico se resolvi a causa raiz em vez de corrigir o sintoma.
  • [] Observo que a correção realmente corrige o bug.
  • [] Eu adiciono um teste de regressão para cada bug resolvido.