Gevinster:
- Evne til å effektivt beskrive en feil til AI med feilmelding, stacksporing og minste reproduksjonsforekomst
- Evne til å kjøre en systematisk feilsøkingsflyt med AI for å finne grunnårsaken ved å hypotese og begrense den trinn for trinn
- Evne til å verifisere at løsningen AI foreslo faktisk løste problemet ved å reprodusere og regresjonstesting
Feilsøking er oppgaven med å finne ut hvorfor et program oppfører seg annerledes enn forventet og fikse det, og det tar mye av de fleste ingeniørers tid. God feilsøking er ikke basert på en gjettelek, men på systematisk innsnevring: klargjør symptomet, sett hypoteser, test hypotesen, kom til grunnårsaken. AI er en veldig sterk partner i denne syklusen; Men bare hvis du gir ham riktig informasjon. Å si "koden fungerer ikke, fiks den" tvinger AI til å gjette og komme med generelle forslag. Gi den hele feilmeldingen, stabelsporet og den minste reproduksjonsprøven, så finner dere sammen årsaken.
I denne enheten vil vi se hvordan du effektivt kan beskrive en feil til AI, begrense hypoteser trinn for trinn, og verifisere gjennom regresjonstesting at den foreslåtte løsningen faktisk løser problemet. Husk: "fikse" en feil og "undertrykke symptomet på feilen" er to forskjellige ting; Korrigering uten å finne årsaken flytter feilen til et annet sted.
Konsepter: Stack trace: En dump som viser hvilke funksjoner som ble kalt i hvilken rekkefølge ved feiltidspunktet. Minimal repro: Den enkleste, korteste koden/inngangen som utløser feilen. Grunnårsak: Den virkelige kilden til problemet, ikke symptomet. Regresjonstesting: Testing som sikrer at samme feil ikke gjentar seg.
Beskriv en Bug til AI
Sannsynligheten for at AI finner årsaken er direkte proporsjonal med kvaliteten på informasjonen du gir. En god feilbeskrivelse inkluderer: hva du prøvde å gjøre, hva du forventet, hva som skjedde, den eksakte feilteksten og stabelsporingen, koden som er involvert, miljøet (språk/versjon/OS) og den minste prøven som produserte feilen.
- Forklar symptomet. I formatet "Forventet X, aktualisert Y".
- Lim inn hele feilteksten og stabelsporing. Ikke forkort den, sensur den, men ikke bryt strukturen.
- Gi den minste gjengivelsen. Minimum input og kode som utløser feilen.
- Spesifiser miljøet. Språkversjon, bibliotekversjon, kjøretidsmiljø.
Effektiv melding om feilbeskrivelse: "Jeg feilsøker en feil. Informasjon:- Hva jeg prøver å gjøre: [X]- Forventet virkemåte: [Y]- Faktisk oppførsel: [Z]- Full feilmelding og stabelsporing: [lim inn]- Miljø: [språk/versjon, bibliotek/versjon]- Minimumskode som er involvert: [kode] Ikke fortell meg den første sannsynligheten i en direkte 3-rekkefølge. sjekk for å bekrefte for hver."
Innsnevring av flyt ved hypotese
Systematisk feilsøking er kunsten å eliminere muligheter én etter én. Bruk AI til å generere hypoteser og design eksperimentet for å teste hver hypotese; Kjør deretter eksperimentet og returner resultatet. Denne syklusen er mye raskere enn vanen med å gjøre tilfeldige endringer og stoppe, kalt "shotgun debugging".
Binær søk (biseksjon) hjelpemelding: "Denne feilen var ikke der i går, den er der i dag. Jeg vil finne ut hvilke av de siste 20 endringene som førte til feilen med bisect. Gi meg en trinn-for-trinn-plan: hvilket punkt skal jeg teste, hvilken halvdel skal jeg gå til avhengig av resultatet. Fortell meg også nøyaktig hva jeg skal sjekke ved hvert trinn."
Logginnsettingsstrategispørring: "Jeg kan ikke finne feilen fordi jeg ikke kan se mellomverdiene i denne funksjonen. Fortell meg på hvilke punkter jeg må legge til logglinjer som skriver ut hvilke variabler. Legg til en "hva vil jeg lære av denne loggen"-forklaring for hver logg. Spesifiser også advarslene som vil hindre meg i å logge konfidensielle data."
Tips: Hvis du ikke kan løse en feil, er problemet som oftest et sted du antok feil. Spør AI "hvilken antagelse jeg kan være feil?" Å spørre vil bryte blindheten din. De tøffeste feilene skjuler seg på stedet der du sier «jeg er sikker på at dette fungerer riktig».
Svak forespørsel / sterk forespørsel
SVAK:"Koden min gir en feil, fiks den: [200 linjer med kode]"(Resultat: AI vet ikke hvilken feil det er, hva som forventes; den gir generelle forslag basert på gjetting, de fleste av dem er ubrukelige.)STERK:"Jeg får NullPointerException. Forventet: brukerlisten skal returneres. Faktisk: Eksploderer ved kall til getUsers:(7). repetisjon: Det skjer når brukerlisten er tom, men ikke når den er full. Relaterte 15 linjer: [kode] Forklar grunnårsaken og hvorfor tomlisten utløses.
Den kraftige ledeteksten setter feilen i kontekst: i så fall skjer den (tom liste), i så fall skjer den ikke (full liste). Denne enkle ledetråden ("skjer når den er tom") peker nesten direkte på grunnårsaken. Siden denne informasjonen ikke er tilgjengelig i den svake ledeteksten, gjør AI en blind gjetning.
Verifiserer rettelsen
En rettelse er bare en reell løsning hvis den gjør tre ting:
kontroll
Spørsmål
Hvordan verifisere
Er feilen borte?
Fungerer den samme oppføringen nå?
Kjør minimal repro igjen
Ingen nye feil?
Er noe annet ødelagt?
Kjør hele testpakken
Vil det ikke gjenta seg?
Vil samme feil oppstå igjen?
Legg til regresjonstest for dette scenariet
Korreksjoner gjort uten å finne årsaken undertrykker ofte symptomet. For eksempel, å overse en null-feil med "hopp over hvis null" gjør den virkelige grunnen, "hvorfor kommer dataene til null?" usynlig, og feilen oppstår igjen andre steder.
Minivesker
Tilfelle 1 - Symptomundertrykkelsesfellen. Et lag slår av en og annen nullfeil med en try-catch; Feilen forsvinner, men etter 2 uker ser det ut til at dataene mangler. Den virkelige grunnen er at en tjeneste returnerer null ved tidsavbrudd. Når du spør AI "hvorfor blir den null?", kommer hovedårsaken frem; Den virkelige løsningen tar 1 time, men er permanent.
Tilfelle 2 — Minimal reprokraft. En utvikler kan ikke fikse en feil som sier "den krasjer av og til." Det reduserer feilen til den minste inngangen med AIs forslag: problemet oppstår bare med filnavn som inneholder tyrkiske tegn (kodingsfeil). Når 300 linjer med usikkerhet reduseres til 5 linjer med definitiv repro, blir løsningen åpenbar.
Tilfelle 3 - Anti-regresjonstest. AI fikser en datoberegningsfeil. Ingeniøren er ikke fornøyd med dette; legger til en regresjonstest for det feilaktige scenarioet (månedsslutt, 31. januar + 1 måned). Når en annen endring berører det samme området 4 måneder senere, blir testen rød og feilen fanges før den når produksjonen.
Vanlige feil
- Det betyr "det fungerer ikke, fiks det". Uten feiltekst, forventning og repro, tipper AI.
- Gir ikke stabelen spor. Stabelsporet indikerer ofte direkte årsaken.
- Fortsett å gjøre tilfeldige endringer. Eksperimenter uten å etablere en hypotese kaster bort tid.
- Undertrykke symptomet og gå glipp av grunnårsaken. Feilen gjenfødes et annet sted.
- Sikrer ikke løsningen med regresjonstesting. Den samme feilen kommer stille tilbake i fremtiden.
Oppsummert
Effektiv feilsøking er systematisk innsnevring, ikke gjetting. Å gi AI den fullstendige feilteksten, stabelsporing, minimal reproduksjon og miljøinformasjon øker eksponentielt sjansene for å finne årsaken. Bruk AI til å generere hypoteser og design eksperimentet for å teste hver hypotese; Du kjører eksperimentet. Betrakt en reparasjon som "ferdig" bare når du ser at feilen er borte, ingen nye feil blir introdusert, og den er beskyttet av regresjonstesting.
Søknadsoppgave
Vurder en reell eller kunstig feil. Reduser først feilen til den minste reproduksjonen (hvilket input det forekommer, i hvilket det ikke skjer). Bruk den effektive feiloppskriftsprompten, spør AI om 3 grunnårsakshypoteser og et verifiseringstrinn for hver. Finn årsaken ved å teste hypotesene én etter én, fiks den, skriv og kjør en regresjonstest for dette scenariet for å vise at feilen er borte og testen gir beskyttelse.
sjekkliste
- [ ] Jeg avklarte symptomet som "forventet vs realisert".
- [ ] Jeg ga hele feilteksten og stabelsporing til AI.
- [ ] Jeg reduserte feilen til den minste gjengivelsen.
- [ ] Ved å teste hypotesene én etter én fant jeg grunnårsaken.
- [ ] I stedet for å undertrykke symptomet, fikset jeg grunnårsaken.
- [ ] Jeg la til og kjørte en regresjonstest for den samme feilen.