Winst:
- Mogelijkheid om een bug terug te brengen tot de kleinste reproduceerbare instantie en deze met volledig bewijs naar AI te verplaatsen
- Mogelijkheid om op bewijs gebaseerde hypothesen te testen met de goedkoopste controle en de hoofdoorzaak te vinden
- Mogelijkheid om de hoofdoorzaak op te lossen en deze vast te stellen met een regressietest in plaats van het symptoom te verhelpen
Foutopsporing is het proces waarbij wordt uitgezocht waarom software zich onverwacht gedraagt en dit wordt verholpen. Het is de baan waar een ontwikkelaar de meeste tijd aan besteedt en waar hij het meest moe van wordt; Omdat de fout meestal niet daar zit waar hij lijkt, maar een paar stappen verderop verborgen is. AI is een krachtige denkpartner die dit onderzoek versnelt – maar alleen als je het het juiste bewijsmateriaal geeft. Debuggen zonder bewijs is het gebied waarop AI de meeste hallucinaties veroorzaakt.
In dit onderdeel stellen we een gedisciplineerde stroom op van het genereren van de fout tot het vinden van de hoofdoorzaak: het verhelderen van het symptoom, het verzamelen van bewijsmateriaal (foutmelding, stacktracering, logboek, invoer), het genereren van een hypothese, het testen van de hypothese en het valideren van de oplossing. AI helpt bij elke stap; maar de "vaste" beslissing wordt genomen door te zien dat de bug daadwerkelijk is verdwenen.
Waarom bewijs alles is?
Een LLM ziet fouten niet zoals jij; Hij weet alleen wat je hem vertelt. Een zin als “De applicatie crasht” geeft het model bijna geen informatie, en het model vult de leemte op met een voorspelling, dat wil zeggen een hallucinatie. Op zijn beurt het volledige foutbericht, stacktrace - een uitsplitsing van de functieaanroepen waardoor de fout is opgetreden, de invoer die de fout heeft veroorzaakt, en wat er werd verwacht, enz. Gegeven het waargenomen gedrag kan het model de werkelijke waarschijnlijkheden rangschikken.
Beschouw AI bij het debuggen als een assistent van een detective: hoe meer bewijsmateriaal u presenteert, hoe nauwkeuriger de hypothese die het genereert. Als er geen bewijs is, zal de assistent alleen maar gissen en u mogelijk op het verkeerde spoor zetten.
Tip: voordat u een bug naar AI overdraagt, moet u deze beperken tot het kleinste reproduceerbare voorbeeld. De kleinste code en invoer die de fout veroorzaakt, maakt de zaken radicaal eenvoudiger voor zowel u als het model; Meestal zoek je tijdens deze reductie zelf de oorzaak.
Stap voor stap: stroom van analyse van hoofdoorzaken
- Verduidelijk het symptoom. "Wat is er aan de hand, wat had je verwacht dat er zou gebeuren?" Schrijf de twee in één zin.
- Verzamel bewijsmateriaal. Volledige foutmelding, stacktrace, relevante logregels, triggerende invoer, versie-informatie.
- Laat de hypothese genereren. Van AI “3 mogelijke oorzaken die dit symptoom verklaren en hoe kan ik voor elk testen?” vragen.
- Test eerst de goedkoopste hypothese. Voeg een log toe, druk een waarde af, voer een test uit. Bevestigt het bewijs de hypothese?
- Pak de oorzaak aan, niet het symptoom. In plaats van het symptoom het zwijgen op te leggen met een pleister, moet u de oorzaak aanpakken.
- Valideer en voeg regressietesten toe. Zie de fout verdwijnen; Schrijf vervolgens een test die de fout opspoort, zodat deze niet meer terugkomt.
Drie mini-hoesjes
Geval 1: de stacktracering leidde naar het juiste bestand. Een applicatie retourneerde bij bepaalde verzoeken een 500-fout. De ontwikkelaar gaf de volledige stacktracering en het triggerverzoek aan de AI; Het model veronderstelde dat de fout werd veroorzaakt door een Geen-waarde in een datumparseringslaag. De ontwikkelaar heeft een log aan die regel toegevoegd, deze geverifieerd en binnen 15 minuten opgelost; De dag ervoor werden 2 uur verspild met onbewezen experimenten.
Geval 2 – Hallucinatie leidde tot het verkeerde spoor. Een andere ontwikkelaar schreef simpelweg: "De databaseverbinding valt weg". De AI beschuldigde zonder enig bewijs een connectiepool-instelling; De ontwikkelaar heeft 40 minuten besteed aan het sleutelen aan deze instelling. De echte oorzaak was een time-out aan de netwerkzijde en werd alleen onthuld door naar de logs te kijken. Les: een hypothese die zonder bewijs wordt aangenomen, is alleen maar waarschijnlijk, niet betrouwbaar.
Geval 3 — Er is een schilferige fout ontdekt. Er was een test die af en toe mislukte. De AI kreeg de testcode, de foutmelding en de informatie "soms lukt het, soms mislukt het"; het model gaf een gedeelde tijd-/volgordeafhankelijkheid van de tests aan. De beoordeling bevestigde dat de test gebaseerd was op de lokale tijd van het systeem. Toen de klok eenmaal was vastgezet (bespot), werd de test stabiel.
Vier kopieerbare sjablonen
Op bewijs gebaseerde hypothesegeneratie:
Ik ben een bug aan het debuggen. Bewijs hieronder.- Verwacht gedrag: {{expected}}- Waargenomen gedrag: {{observed}}- Foutmelding / stacktrace: {{trace}}- Triggerende invoer: {{input}}- Omgeving/versie: {{version}} Noem de 3 MEEST WAARSCHIJNLIJKE hoofdoorzaken die dit symptoom verklaren. Voor elk: hoe test ik (goedkoopste controle) en hoe repareer ik het als het waar is. Als het bewijs onvoldoende is, vertel mij dan welke aanvullende informatie u nodig heeft.
De stacktrace interpreteren:
Lees deze stacktrace. Maak onderscheid tussen de regel waar de fout WAARSCHIJNLIJK begint (de wortel) en welke regels slechts voortzettingen van de keten zijn. Stel 1-2 plaatsen voor om eerst te kijken. Gerelateerde code:{{code}}Trace:{{trace}}
Minimale reproductie-aftrekking:
De onderstaande code levert een fout op. Reduceer dit tot het KLEINSTE exemplaar dat nog steeds de fout activeert, maar al het onnodige verwijdert. Ga er niet vanuit dat elk stukje dat je verwijdert geen invloed heeft op de fout, maar voeg een opmerking toe met de tekst "als de fout verdwijnt wanneer je dit verwijdert, is dat de reden".{{code}}
Validatie en regressietesten na correctie:
Stel dat de hoofdoorzaak {{cause}} is en ik voer de volgende oplossing uit: {{fix}}.1) Verhelpt deze oplossing daadwerkelijk het symptoom en heeft deze bijwerkingen? 2) Schrijf een regressietest waarmee deze bug in de toekomst kan worden opgespoord.
Zwakke prompt/sterke prompt
Zwak: "De code werkt niet, waarom?"
Strong: "Node 20 / Express. POST /orders retourneert 500 wanneer items een lege string in de hoofdtekst zijn; had 400 moeten retourneren. Stacktrace: TypeError: Kan eigenschappen van ongedefinieerd niet lezen (lees '0') - bijgevoegd is de volledige trace en de bijbehorende handler. Geef me de drie meest waarschijnlijke oorzaken die dit symptoom verklaren en hoe ik ze allemaal kan testen. [trace + code]"
Krachtige versie; Het geeft de omgeving, het eindpunt, triggerinvoer, het exacte fouttype en het verwachte gedrag weer. Het model kan geen voorspellingen meer doen, maar analyses.
stap
De bijdrage van AI
jouw controle
bewijsmateriaal verzamelen
Welk bewijs is nodig, herinnert zich
Verzamelt echt bewijsmateriaal
hypothese generatie
Noem mogelijke redenen
Prioriteert met context
hypothese testen
Beveelt testmethode aan
Werkt en observeert persoonlijk
correctie
patch adviseert
Lost het de oorzaak op? Het is waar.
regressie
schrijft een proef
Controleert of de test kapot is
De oorzaak oplossen, niet het symptoom
Meestal zal de AI een patch voorstellen die het symptoom snel tot zwijgen brengt: voeg een try/catch toe, voer een nulcontrole uit en slik de fout. Dit is soms waar, vaak gevaarlijk; omdat de oorspronkelijke oorzaak aanwezig blijft en ergens anders weer losbarst. Vraag uzelf bij elke oplossing af: “Verhelpt dit de oorzaak van de fout, of maakt het deze onzichtbaar?” Zodra u de oorzaak heeft gevonden, is de oplossing meestal kleiner, robuuster en permanent.
Let op: het stil inslikken van een uitzondering (lege catch) lost de fout niet op; het verhult alleen maar en maakt toekomstige diagnose onmogelijk. Als AI een dergelijke ‘oplossing’ suggereert, accepteer deze dan niet zonder de hoofdoorzaak in twijfel te trekken.
Veel voorkomende fouten
- Vragen stellen zonder bewijs. Dubbelzinnige zinnen brengen het model tot hallucinaties; Geef volledige fout, trace en invoer.
- We sluiten ons aan bij de eerste hypothese. De eerste suggestie van de AI is misschien niet de meest waarschijnlijke; Begin met de goedkoopste controleerbare hypothese.
- Het symptoom patchen en de hoofdoorzaak over het hoofd zien. De stilgelegde fout keert terug.
- De oplossing sluiten zonder deze te verifiëren. Zie in productie-achtige toestand dat de fout daadwerkelijk verdwijnt.
- Geen regressietests schrijven. Als er geen tests worden toegevoegd, zal dezelfde fout in latere versies stilletjes terugkeren.
Samengevat
Bij het debuggen is de kracht van AI recht evenredig met het bewijs dat je eraan geeft: zonder de volledige foutmelding, stacktrace, triggerende invoer en verwacht gedrag speculeert het model alleen maar. Gedisciplineerde stroom – symptoom verduidelijken, bewijs verzamelen, hypothese genereren, testen met de goedkoopste controle, hoofdoorzaak oplossen, verifiëren en regressietesten toevoegen – sluit de bug zowel snel als permanent. AI is een hypothesegenerator; Jij bent degene die besluit dat de bug daadwerkelijk wordt opgelost.
Applicatie taak
Kies een echte bug die je onlangs bent tegengekomen (of reproduceer een testbug). Voer eerst de stap "minimale reproductie" uit; Verwijder de kleinste code en invoer die de fout veroorzaakt. Haal dan 3 mogelijke oorzaken en testmethoden uit AI met de template ‘evidence-based hypothese generatie’. Test zelf de goedkoopste hypothese, zoek de hoofdoorzaak, los deze op en schrijf ten slotte een regressietest die deze bug in de toekomst zal opsporen en verifieer dat de test daadwerkelijk is verbroken.
controlelijst
- [ ] Ik verminder de fout tot het kleinste reproduceerbare monster voordat ik deze naar de AI verplaats.
- [ ] Ik voeg het volledige foutbericht, de stacktrace, de invoer en het verwachte gedrag toe aan de prompt.
- [ ] Ik begin met de goedkoopste controleerbare, zonder vast te zitten aan één enkele hypothese.
- [ ] Ik verifieer dat ik de hoofdoorzaak heb opgelost in plaats van het symptoom te verhelpen.
- [ ] Ik merk dat de oplossing de bug daadwerkelijk verhelpt.
- [ ] Ik voeg een regressietest toe voor elke opgeloste bug.