Unidade 7 / 11

Depuração e análise de falhas com inteligência artificial

Ganhos:

  • Capacidade de restringir rapidamente possíveis causas raiz, fornecendo registros de falhas (stack traces) à inteligência artificial com o código relevante e o contexto do cenário
  • Capacidade de resolver permanentemente a causa raiz em vez de validar o diagnóstico da IA como uma hipótese no código e testar e silenciar o sintoma
  • Protegendo a privacidade durante a depuração, mascarando dados pessoais em registros e logs de falhas

Todo aplicativo apresenta erros; O que distingue um bom desenvolvedor é a rapidez com que ele encontra e corrige bugs. A depuração móvel — encontrar e corrigir a origem de um problema — é particularmente difícil porque o erro ocorre no dispositivo do usuário, em um ambiente que você não consegue ver. Na maioria das vezes, tudo o que você tem é um log de travamento (log de travamento/rastreamento de pilha — um detalhamento técnico de onde o aplicativo foi quando travou). A IA é extremamente poderosa na leitura desses registros enigmáticos, listando possíveis causas e propondo soluções. Nesta unidade aprenderemos como usar a IA como “detetive de bugs”, mas deixaremos a você a responsabilidade de verificar o diagnóstico final e a correção.

Lendo o registro de falhas: onde a IA brilha mais

Um registro de falhas é um texto longo e intimidante; desenvolvedor inexperiente não saberá onde procurar. A IA analisa este texto em segundos: em qual linha ele travou, qual exceção foi lançada, qual o possível motivo. Erros móveis comuns são óbvios e a IA os reconhece rapidamente: NullPointerException (tentando acessar um valor nulo), IndexOutOfBoundsException (acessando um elemento de lista inexistente) no Android, EXC_BAD_ACCESS (acessando memória liberada) no iOS, encontrado inesperadamente nulo (forçando um nulo opcional).

Os tipos mais comuns de falhas móveis e suas causas típicas são as seguintes:

Erro (exceção)

Plataforma

causa típica

NullPointerException

Android

Acessando um valor nulo

IndexOutOfBoundsException

Android

Acessando elemento de lista inexistente

inesperadamente encontrado nulo

iOS

Forçar o desembrulhamento de um opcional nulo (!)

EXC_BAD_ACCESS

iOS

Acessando a memória liberada

ANR/congelamento

Android

Processamento longo/pesado no thread principal

Fluxo de depuração passo a passo:

  1. Colete o registro. Reúna o log de travamento, a mensagem de erro e as etapas para reproduzi-lo, se possível.
  2. Dê o contexto da IA. Diga-me não apenas o erro, mas o trecho de código relevante e o que ele travou.
  3. Pergunte sobre as possíveis causas. “Diga-me as três causas mais prováveis ​​e como verificar cada uma.”
  4. Verificar. Confirme o motivo proposto no código e nos testes; Não conserte adivinhando.
  5. Corrija e teste novamente. Verifique se o erro realmente desapareceu e se nenhum novo erro foi gerado.
Dica: ao fornecer o log de falhas à IA, inclua também o trecho de código relevante. Somente com rastreamento de pilha a IA faz previsões gerais; Ao ver o código, a probabilidade de encontrar a linha exata e a causa real aumenta muito. O contexto determina a qualidade do diagnóstico.

Armadilha de dados pessoais

Os registros e registros de falhas geralmente contêm dados do usuário: e-mail, ID do usuário, localização e até mesmo conteúdo do formulário. Colar este registro na IA como está é vazar dados pessoais para terceiros e é uma violação do KVKK / GDPR. Limpe (mascare) áreas pessoais antes de enviar a gravação. Além disso, tome cuidado para não gravar dados pessoais nos logs do seu aplicativo desde o início; Um bom registro descreve o problema, mas não revela a identidade.

Cuidado: A correção sugerida pela IA pode “silenciar o bug”, mas pode não resolver a causa raiz. Por exemplo, agrupar um NullPointerException com uma verificação nula interromperá a falha, mas se você não descobrir por que o valor é nulo, o erro lógico real continuará. Trate a doença, não o sintoma.

Análise de causa raiz

O objetivo da depuração profissional não é silenciar o erro, mas encontrar a causa raiz. Perguntei à IA "por que isso pode ser nulo, onde pode ter se perdido no fluxo de dados?" perguntando: "como faço para silenciar isso?" É muito mais valioso do que pedir. Uma vez encontrada a causa raiz, dezenas de variações do mesmo erro são resolvidas de uma só vez. A IA é boa neste raciocínio em cadeia: siga os dados desde a entrada até à saída e peça-lhe para pensar onde se decompõem.

três mini cases

Caso 1 — 2 horas de trabalho em 10 minutos. Um desenvolvedor passou 2 horas procurando um bug que só travava em um modelo específico da Samsung. Entregou o registro de falhas (limpeza de áreas pessoais) para a IA; YZ disse que o erro aponta para um estouro de memória que ocorre com uma resolução de câmera diferente daquele dispositivo. Com a pista, o motivo foi descoberto em 10 minutos. A IA acelerou a busca, a solução foi verificada por humanos.

Caso 2 — O bug silenciado está de volta. Uma equipe silenciou uma falha recorrente usando uma sugestão de IA para tentar detectá-la. O travamento parou, mas os usuários começaram a reclamar que “os dados não estão sendo salvos”; porque o problema real (conexão com o banco de dados) ainda estava lá, ele acabou de se tornar invisível. Assim que a causa raiz foi encontrada, tanto a falha quanto a perda de dados foram resolvidas. Lição: silenciar não é resolver.

Caso 3 — Dados vazados no log. Uma auditoria descobriu que os nomes completos e números de telefone dos usuários foram gravados nos registros de falhas do aplicativo. Os desenvolvedores colavam rotineiramente esses logs na IA e corrigiam bugs; Portanto, os dados pessoais estão sendo divulgados há meses. Os logs foram mascarados e o processo foi corrigido. Lição: a confidencialidade se aplica mesmo durante a depuração.

Alerta fraco / Alerta forte

Prompt incorreto: "Por que esse erro ocorre? [rastreamento de pilha]"

Prompt forte: "Esta falha está acontecendo em meu aplicativo Android. Contexto: - Ao fazer: usuário adicionando detalhes do produto ao carrinho - Somente em alguns dispositivos, modelos com pouca RAM - Código relacionado: [ViewModel e parte do repositório] - Registro de falha (dados pessoais apagados): [rastreamento de pilha] Liste as 3 causas raiz mais prováveis. Para cada: 1) Como faço para verificar, 2) Correção permanente (não silenciar). Declare sua suposição onde você não tem certeza. "

Modelos copiáveis

Modelo de análise de falhas:"Analise a seguinte falha. Contexto: [o que você está fazendo, qual dispositivo/versão]. Código relevante: [código]. Registro de falhas (dados pessoais apagados): [rastreamento]. Forneça três causas raiz mais prováveis e verificação + correção permanente para cada uma. Marque também soluções alternativas que silenciam o sintoma."

Modelo de causa raiz: "Este valor chega [nulo/falso] inesperadamente. Siga o fluxo de dados da entrada até este ponto: onde ele pode ser perdido ou corrompido? Diga-me onde devo verificar em cada estágio. [código]"

Modelo de leitura de log: "Interprete esta saída de log: quais eventos aconteceram em ordem, onde está a anormalidade, qual foi a última etapa íntegra antes do erro? [log - dados pessoais apagados]"

Modelo de reprodução: "Quais etapas, estados do dispositivo e dados devo tentar reproduzir esse erro de maneira confiável? Liste as condições que podem desencadear o erro em ordem de probabilidade. [descrição]"

Erros comuns

  • Fornecendo rastreamento de pilha sem contexto. Sem código e cenário relevantes, a IA faz previsões gerais.
  • Colando dados pessoais na IA junto com os logs. Quebra de confidencialidade; máscara primeiro.
  • Silencie o sintoma. Ocultar a falha com try-catch deixa a raiz do problema e cria novos problemas.
  • Aplicando a primeira sugestão sem verificá-la. O diagnóstico de IA é uma hipótese; Confirme no código.
  • Tentando reproduzi-lo no emulador. Alguns erros aparecem apenas no dispositivo/condição real.
  • Não testar novamente após a correção. A correção pode ter quebrado outra coisa; Verifique a regressão.

Resumindo

Uma das áreas em que a IA se destaca é a leitura de logs de falhas e a identificação de possíveis causas; A qualidade do diagnóstico melhora muito quando o contexto é fornecido. Mas o diagnóstico e a correção finais pertencem ao ser humano: a sugestão da IA ​​é uma hipótese, verificada em código e testes. O objetivo não é silenciar o sintoma, mas resolver a causa raiz; O erro silenciado geralmente retorna de outra forma. Os registros de falhas podem conter dados pessoais; Mascare-o antes de entregá-lo à IA e não escreva dados pessoais em seus registros desde o início.

Tarefa de aplicativo

Pegue um log de falhas que você possui (ou a amostra gerada a partir da IA), mascare quaisquer dados pessoais/distintivos nele e forneça-os à IA com o "Modelo de análise de falhas". Distinguir quais das causas raízes das listas de IA são soluções reais e quais são apenas silenciamento. Aplique a correção permanente escolhida e verifique se o erro desapareceu e se não surgem novos problemas.

lista de verificação

  • [] Forneci o log de travamento com código relevante e contexto do cenário
  • [] Mascarei dados pessoais/distintivos nos logs
  • [] Pedi à IA a causa raiz e a solução permanente, não silenciando
  • [ ] Verifiquei o diagnóstico no código e nos testes, não apliquei cegamente
  • [] Após a correção, testei se o erro desapareceu e não houve regressão
  • [] Verifiquei que meu aplicativo não grava dados pessoais em seus logs