Enhet 5 / 12

Felsökning och felsökning

Vinster:

  • Möjlighet att effektivt beskriva en bugg för AI med felmeddelande, stackspårning och minsta reproduktionsinstans
  • Förmåga att köra ett systematiskt felsökningsflöde med AI för att hitta grundorsaken genom att hypotesera och minska den steg för steg
  • Möjlighet att verifiera att fixen som AI föreslog faktiskt löste problemet genom reproduktion och regressionstestning

Felsökning är uppgiften att ta reda på varför ett program beter sig annorlunda än förväntat och fixa det, och det tar mycket av de flesta ingenjörers tid. Bra felsökning bygger inte på ett gissningsspel, utan på systematisk avgränsning: klargör symtomet, ställ hypotesen, testa hypotesen, gå till grundorsaken. AI är en mycket kraftfull partner i denna cykel; Men bara om du ger honom rätt information. Att säga "koden fungerar inte, fixa det" tvingar AI:n att gissa och komma med allmänna förslag. Ge det hela felmeddelandet, stackspårningen och det minsta reproduktionsprovet, så hittar ni grundorsaken tillsammans.

I den här enheten kommer vi att se hur man effektivt beskriver en bugg för AI, begränsar hypoteser steg för steg och verifierar genom regressionstestning att den föreslagna fixen faktiskt löser problemet. Kom ihåg: "fixa" en bugg och "undertrycka symptomet på buggen" är två olika saker; Korrigering som görs utan att hitta grundorsaken flyttar felet till en annan plats.

Koncept: Stackspårning: En dump som visar vilka funktioner som anropades i vilken ordning vid tidpunkten för felet. Minimal repro: Den enklaste, kortaste koden/ingången som utlöser felet. Grundorsak: Den verkliga källan till problemet, inte symtomet. Regressionstestning: Testning som säkerställer att samma fel inte upprepas.

Beskriver en bugg till AI

Sannolikheten för att AI hittar grundorsaken är direkt proportionell mot kvaliteten på informationen du tillhandahåller. En bra felbeskrivning inkluderar: vad du försökte göra, vad du förväntade dig, vad som hände, den exakta feltexten och stackspårningen, den inblandade koden, miljön (språk/version/OS) och det minsta provet som orsakade felet.

  1. Förtydliga symtomet. I formatet "Förväntat X, aktualiserat Y".
  2. Klistra in hela feltexten och stack trace. Förkorta det inte, censurera det, men bryt inte strukturen.
  3. Ge den minsta reproduktionen. Minsta indata och kod som utlöser felet.
  4. Specificera miljön. Språkversion, biblioteksversion, runtime-miljö.

Effektiv felbeskrivningsuppmaning: "Jag felsöker en bugg. Information:- Vad jag försöker göra: [X]- Förväntat beteende: [Y]- Faktiskt beteende: [Z]- Fullständigt felmeddelande och stackspårning: [klistra in]- Miljö: [språk/version, bibliotek/version]- Minsta kod som är inblandad: [kod] Berätta inte vad som sannolikt är orsaken till den direkta 3-korrigeringen och vad som sannolikt är orsaken till mig. kryssa för att verifiera för varje."

Begränsande flöde genom hypotes

Systematisk felsökning är konsten att eliminera möjligheter en efter en. Använd AI för att generera hypoteser och designa experimentet för att testa varje hypotes; Kör sedan experimentet och returnera resultatet. Denna cykel är mycket snabbare än vanan att göra slumpmässiga ändringar och stoppa, så kallad "shotgun debugging".

Hjälpprompt för binär sökning (bisektion): "Det här felet var inte där igår, det finns där idag. Jag vill ta reda på vilken av de senaste 20 ändringarna som ledde till felet med bisect. Ge mig en steg-för-steg-plan: vilken punkt ska jag testa, vilken halva ska jag gå till beroende på resultatet. Berätta också exakt vad jag ska kontrollera vid varje steg."

Logginfogningsstrategiuppmaning: "Jag kan inte hitta felet eftersom jag inte kan se mellanvärdena i den här funktionen. Berätta för mig vid vilka punkter jag behöver lägga till loggrader som skriver ut vilka variabler. Lägg till en "vad kommer jag lära mig av den här loggen"-förklaring för varje logg. Ange även varningarna som kommer att hindra mig från att logga konfidentiell data."

Tips: Om du inte kan lösa ett fel är problemet oftast någonstans som du antog felaktigt. Fråga AI: "vilket antagande av mitt kan vara fel?" Att fråga kommer att bryta din blindhet. De tuffaste misstagen gömmer sig på platsen där du säger "Jag är säker på att det här fungerar rätt".

Svag prompt / Stark prompt

SVAG:"Min kod ger ett fel, fixa det: [200 rader kod]"(Resultat: AI vet inte vilket fel det är, vad som förväntas; den ger generella förslag baserade på gissningar, de flesta av dem är värdelösa.)STARK:"Jag får NullPointerException. Förväntat: användarlistan ska returneras. Faktiskt: Exploderar vid anrop till getUsers:(7)Stack: Minimum Java. upprepning: Det händer när användarlistan är tom, men inte när den är full.

Den kraftfulla prompten sätter felet i sitt sammanhang: i så fall inträffar det (tom lista), i så fall händer det inte (fullständig lista). This single clue ("happens when empty") almost directly points to the root cause. Eftersom denna information inte är tillgänglig i den svaga prompten, gör AI en blind gissning.

Verifierar korrigeringen

En fix är bara en riktig fix om den gör tre saker:

kontroll

Fråga

Hur man verifierar

Är felet borta?

Fungerar samma post nu?

Kör minimal repro igen

Inga nya fel?

Är något annat trasigt?

Kör hela testsviten

Kommer det inte att upprepas?

Kommer samma fel uppstå igen?

Lägg till ett regressionstest för detta scenario

Korrigeringar som görs utan att hitta grundorsaken undertrycker ofta symtomet. Om t.ex. överskugga ett nollfel med "hoppa över om null" blir det verkliga skälet "varför kommer data null?" osynlig, och felet återkommer någon annanstans.

Minifodral

Fall 1 — Symtomdämpningsfällan. Ett lag tystar ett tillfälligt nollfel med en try-catch; Felet försvinner men efter 2 veckor verkar data saknas. Den verkliga anledningen är att en tjänst returnerar null vid timeout. När du frågar AI "varför blir den null?", kommer grundorsaken fram; Den riktiga fixen tar 1 timme men är permanent.

Fall 2 — Minimal reprokraft. En utvecklare kan inte fixa en bugg som säger "det kraschar då och då." Det reducerar felet till minsta möjliga indata med AI:s förslag: problemet uppstår endast med filnamn som innehåller turkiska tecken (kodningsfel). När 300 rader av osäkerhet reduceras till 5 rader av definitiv repro, blir lösningen uppenbar.

Fall 3 – Anti-regressionstest. AI fixar ett datumberäkningsfel. Ingenjören är inte nöjd med detta; adds a regression test for the erroneous scenario (month end, January 31 + 1 month). När en annan förändring berör samma område fyra månader senare, blir testet rött och buggen fångas innan den når produktion.

Vanliga misstag

  • Det betyder "det fungerar inte, fixa det". Utan feltext, förväntan och repro, gissar AI.
  • Ger inte stacken spår. Stackspåret indikerar ofta direkt orsaken.
  • Fortsätt göra slumpmässiga ändringar. Experiments without establishing a hypothesis waste time.
  • Dämpar symtomet och missar grundorsaken. Felet återföds någon annanstans.
  • Säkrar inte fixen med regressionstestning. Samma fel kommer tillbaka tyst i framtiden.

Sammanfattningsvis

Effektiv felsökning är systematisk avträngning, inte gissning. Att ge AI:n hela feltexten, stackspårning, minimal reproduktion och miljöinformation ökar exponentiellt chanserna att hitta grundorsaken. Använd AI för att generera hypoteser och designa experimentet för att testa varje hypotes; Du kör experimentet. Betrakta en fix som "klar" först när du ser att buggen är borta, inga nya buggar introduceras och den är skyddad av regressionstestning.

Applikationsuppgift

Tänk på ett verkligt eller konstgjort fel. Minska först felet till minsta reproduktion (i vilken ingång det sker, i vilket det inte gör det). Using the effective bug recipe prompt, ask the AI ​​for 3 root cause hypotheses and a verification step for each. Hitta grundorsaken genom att testa hypoteserna en efter en, fixa den, skriv sedan och kör ett regressionstest för detta scenario för att visa att buggen är borta och testet ger skydd.

checklista

  • [ ] I clarified the symptom as "expected vs realized".
  • [ ] Jag gav hela feltexten och stackspårningen till AI:n.
  • [ ] Jag reducerade felet till minsta reproduktion.
  • [ ] Genom att testa hypoteserna en efter en hittade jag grundorsaken.
  • [ ] Istället för att undertrycka symtomet fixade jag grundorsaken.
  • [ ] Jag lade till och körde ett regressionstest för samma fel.