Unité 7 / 11

Débogage et analyse des crashs avec l'intelligence artificielle

Gains :

  • Capacité à affiner rapidement les causes profondes possibles en fournissant des enregistrements de crash (traces de pile) à l'intelligence artificielle avec le code et le contexte de scénario appropriés
  • Capacité à résoudre définitivement la cause profonde plutôt que de valider le diagnostic de l'IA en tant qu'hypothèse dans le code et de tester et de faire taire le symptôme
  • Protéger la confidentialité lors du débogage en masquant les données personnelles dans les enregistrements et journaux d'incidents

Chaque application donne des erreurs ; Ce qui distingue un bon développeur, c'est la rapidité avec laquelle il trouve et corrige les bogues. Le débogage mobile (trouver et résoudre la source d'un problème) est particulièrement difficile car l'erreur se produit sur l'appareil de l'utilisateur, dans un environnement invisible. La plupart du temps, tout ce dont vous disposez est un journal des crashs (journal des crashs / ​​trace de la pile – une analyse technique de l'endroit où l'application est allée lorsqu'elle s'est écrasée). L’IA est extrêmement puissante pour lire ces enregistrements énigmatiques, répertorier les causes possibles et proposer des solutions. Dans cette unité, nous apprendrons comment utiliser l'IA comme « détective de bugs », mais vous laisserons la responsabilité de vérifier le diagnostic final et la correction.

Lecture du journal des crashs : là où l'IA brille le plus

Un journal de crash est un texte long et intimidant ; un développeur inexpérimenté ne saura pas où chercher. L'IA analyse ce texte en quelques secondes : à quelle ligne il s'est écrasé, quelle exception a été levée, quelle en est la raison possible. Les erreurs mobiles courantes sont évidentes et l'IA les reconnaît rapidement : NullPointerException (tentative d'accès à une valeur nulle), IndexOutOfBoundsException (accès à un élément de liste inexistant) sur Android, EXC_BAD_ACCESS (accès à la mémoire libérée) sur iOS, trouvé de manière inattendue nil (forçage d'un zéro facultatif).

Les types de crashs mobiles les plus courants et leurs causes typiques sont les suivants :

Erreur (exception)

Plateforme

cause typique

NullPointerException

Android

Accéder à une valeur nulle

IndexOutOfBoundsException

Android

Accéder à un élément de liste inexistant

trouvé de façon inattendue nul

IOS

Forcer le déballage d'un zéro facultatif (!)

EXC_BAD_ACCESS

IOS

Accéder à la mémoire libérée

ANR/gel

Android

Traitement long/lourd sur le thread principal

Flux de débogage étape par étape :

  1. Récupérez le dossier. Rassemblez le journal des plantages, le message d'erreur et les étapes pour le reproduire si possible.
  2. Donnez le contexte de l'IA. Dites-moi non seulement l'erreur, mais aussi le morceau de code concerné et la raison pour laquelle il s'est écrasé.
  3. Demandez les causes possibles. "Dites-moi les 3 causes les plus probables et comment vérifier chacune d'entre elles."
  4. Vérifier. Confirmer la raison proposée dans le code et les tests ; Ne le réparez pas en devinant.
  5. Corrigez-le et testez à nouveau. Vérifiez que l'erreur a réellement disparu et qu'aucune nouvelle erreur n'est générée.
Astuce : Lorsque vous transmettez le journal des plantages à l'IA, incluez également l'extrait de code correspondant. Ce n'est qu'avec la trace de pile que l'IA fait des prédictions générales ; Lorsque vous voyez le code, la probabilité de trouver la ligne exacte et la cause réelle augmente considérablement. Le contexte détermine la qualité du diagnostic.

Piège à données personnelles

Les journaux de crash et les journaux contiennent souvent des données utilisateur : e-mail, identifiant utilisateur, emplacement et même contenu du formulaire. Coller cet enregistrement dans l'IA tel quel entraîne une fuite de données personnelles vers un tiers et constitue une violation du KVKK/RGPD. Effacez (masquez) les zones personnelles avant de soumettre l’enregistrement. Faites également attention à ne pas écrire de données personnelles dans les journaux de votre application dès le début ; Un bon journal décrit le problème mais ne révèle pas l'identité.

Attention : le correctif suggéré par l'IA peut « faire taire le bug » mais peut ne pas résoudre la cause première. Par exemple, encapsuler une NullPointerException avec une vérification nulle arrêtera le crash, mais si vous ne comprenez pas pourquoi la valeur est nulle, l'erreur logique réelle continuera. Traitez la maladie, pas le symptôme.

Analyse des causes profondes

Le but du débogage professionnel n’est pas de faire taire l’erreur mais d’en trouver la cause profonde. J'ai demandé à l'IA "pourquoi cela pourrait-il être nul, où aurait-il pu se perdre dans le flux de données ?" demandant : « Comment puis-je faire taire cela ? » C’est bien plus précieux que de demander. Une fois la cause fondamentale trouvée, des dizaines de variantes de la même erreur sont résolues en même temps. L’IA est bonne dans ce raisonnement en chaîne : suivez les données de l’entrée à la sortie et demandez-lui de réfléchir à l’endroit où elles se décomposent.

trois mini-cases

Cas 1 — 2 heures de travail en 10 minutes. Un développeur a passé 2 heures à rechercher un bug qui ne plantait que sur un modèle Samsung spécifique. A remis le journal des crashs (effacement des zones personnelles) à l'IA ; YZ a déclaré que l'erreur indique un débordement de mémoire qui se produit avec une résolution de caméra différente de cet appareil. Avec l'indice, la raison a été trouvée en 10 minutes. L'IA a accéléré la recherche, l'humain a vérifié la solution.

Cas 2 — Le bug réduit au silence est de retour. Une équipe a réduit au silence un crash récurrent en utilisant une suggestion de l'IA pour essayer de l'attraper. Le crash s'est arrêté, mais les utilisateurs ont commencé à se plaindre que « les données ne sont pas enregistrées » ; parce que le vrai problème (la connexion à la base de données) était toujours là, il était devenu invisible. Une fois la cause fondamentale trouvée, le crash et la perte de données ont été résolus. Leçon : faire taire ne résout pas.

Cas 3 — Fuite de données dans le journal. Un audit a révélé que les noms complets et les numéros de téléphone des utilisateurs étaient inscrits dans les journaux de crash de l'application. Les développeurs ont régulièrement collé ces journaux dans l'IA et corrigé des bugs ; Les données personnelles circulent donc depuis des mois. Les journaux ont été masqués et le processus a été corrigé. Leçon : la confidentialité s'applique même lors du débogage.

Invite faible/Invite forte

Mauvaise invite : "Pourquoi cette erreur se produit-elle ? [trace de la pile]"

Invite forte : "Ce crash se produit dans mon application Android. Contexte : - Pendant l'opération : ajout d'un utilisateur au panier à partir des détails du produit - Uniquement sur certains appareils, modèles à faible RAM - Code associé : [partie ViewModel et Repository] - Journal des crashs (données personnelles effacées) : [trace de la pile] Listez les 3 causes profondes les plus probables. Pour chacune : 1) Comment puis-je vérifier, 2) Correctif permanent (pas de mise au silence). Indiquez votre hypothèse là où vous n'êtes pas sûr. "

Modèles copiables

Modèle d'analyse de crash : "Analysez le crash suivant. Contexte : [ce que vous faites, quel appareil/version]. Code pertinent : [code]. Journal de crash (données personnelles effacées) : [trace]. Donnez les 3 causes profondes les plus probables et la vérification + le correctif permanent pour chacune. Marquez également les solutions de contournement qui font taire le symptôme.

Modèle de cause première : « Cette valeur arrive [nulle/faux] de manière inattendue. Suivez le flux de données depuis l’entrée jusqu’à ce point : où pourrait-elle être perdue ou corrompue ? Dites-moi où je dois vérifier à chaque étape. [code] »

Modèle de lecture du journal : "Interprétez cette sortie du journal : quels événements se sont produits dans l'ordre, où se trouve l'anomalie, quelle a été la dernière étape saine avant l'erreur ? [journal — données personnelles effacées]"

Modèle de reproduction : "Quelles étapes, états de l'appareil et données dois-je essayer de reproduire de manière fiable cette erreur ? Répertoriez les conditions qui pourraient déclencher l'erreur par ordre de probabilité. [description]"

Erreurs courantes

  • Donner une trace de pile sans contexte. Sans code ni scénario pertinents, l’IA fait des prédictions générales.
  • Coller des données personnelles dans l'IA avec des journaux. Violation de la confidentialité ; masquer d'abord.
  • Faites taire le symptôme. Cacher le crash avec try-catch laisse le problème racine et crée de nouveaux problèmes.
  • Appliquer la première suggestion sans la vérifier. Le diagnostic de l’IA est une hypothèse ; Confirmez en code.
  • Essayer de le reproduire dans l'émulateur. Certaines erreurs n'apparaissent que sur l'appareil/l'état réel.
  • Pas de nouveau test après correction. Le correctif a peut-être cassé autre chose ; Vérifiez la régression.

En résumé

L’un des domaines dans lesquels l’IA excelle est la lecture des journaux de crash et le tri des causes possibles ; La qualité du diagnostic est grandement améliorée lorsque le contexte est donné. Mais le diagnostic final et la correction appartiennent à l'humain : la suggestion de l'IA est une hypothèse, vérifiée par le code et les tests. L’objectif n’est pas de faire taire le symptôme mais de résoudre la cause profonde ; L'erreur réduite au silence revient généralement sous une autre forme. Les journaux de crash peuvent contenir des données personnelles ; Masquez-le avant de le confier à l’IA et n’écrivez pas de données personnelles dans vos logs dès le début.

Tâche de candidature

Prenez un journal de crash dont vous disposez (ou l'échantillon que vous générez à partir de l'IA), masquez toutes les données personnelles/distinctives qu'il contient et transmettez-le à l'IA avec le « Modèle d'analyse de crash ». Distinguez lesquelles des causes profondes des listes d'IA sont de véritables correctifs et lesquelles ne font que réduire au silence. Appliquez le correctif permanent que vous avez choisi et vérifiez que l'erreur a disparu et qu'aucun nouveau problème ne survient.

liste de contrôle

  • [ ] J'ai donné le journal des crashs avec le code pertinent et le contexte du scénario
  • [ ] J'ai masqué des données personnelles/distinctives dans les journaux
  • [ ] J'ai demandé à l'IA la cause première et la solution permanente, pas la réduction au silence
  • [ ] J'ai vérifié le diagnostic dans le code et les tests, je ne l'ai pas appliqué aveuglément
  • [ ] Après le correctif, j'ai testé que l'erreur avait disparu et qu'il n'y avait pas de régression
  • [ ] J'ai vérifié que mon application n'écrit pas de données personnelles dans ses logs