zisky:
- Schopnosť efektívne opísať chybu AI pomocou chybového hlásenia, sledovania zásobníka a najmenšej inštancie reprodukcie
- Schopnosť spustiť systematický tok ladenia s AI s cieľom nájsť hlavnú príčinu tým, že vytvoríte hypotézu a krok za krokom ju zúžite
- Schopnosť overiť, že oprava navrhnutá AI skutočne vyriešila problém reprodukovaním a regresným testovaním
Úlohou ladenia je zistiť, prečo sa program správa inak, než sa očakávalo, a opraviť to, pričom väčšina inžinierov spotrebuje veľa času. Dobré ladenie nie je založené na hádaní, ale na systematickom zužovaní: objasnite symptóm, vytvorte hypotézu, otestujte hypotézu, dostaňte sa ku základnej príčine. AI je v tomto cykle veľmi silným partnerom; Ale iba ak mu poskytnete správne informácie. Výrok „kód nefunguje, opravte ho“ núti AI hádať a robiť všeobecné návrhy. Zadajte úplné chybové hlásenie, stopu zásobníka a najmenšiu vzorku reprodukcie a spoločne nájdete hlavnú príčinu.
V tejto časti uvidíme, ako efektívne opísať chybu AI, krok za krokom zúžiť hypotézy a pomocou regresného testovania overiť, že navrhovaná oprava skutočne rieši problém. Pamätajte: „oprava“ chyby a „potlačenie symptómu chyby“ sú dve rôzne veci; Oprava vykonaná bez nájdenia základnej príčiny presunie chybu na iné miesto.
Koncepty: Sledovanie zásobníka: Výpis zobrazujúci, ktoré funkcie boli volané v akom poradí v čase chyby. Minimálne repro: Najjednoduchší, najkratší kód/vstup, ktorý spúšťa chybu. Hlavná príčina: Skutočný zdroj problému, nie symptóm. Regresné testovanie: Testovanie, ktoré zabezpečuje, aby sa rovnaká chyba neopakovala.
Opis chyby AI
Pravdepodobnosť, že AI nájde hlavnú príčinu, je priamo úmerná kvalite informácií, ktoré poskytujete. Dobrý popis chyby zahŕňa: čo ste sa pokúsili urobiť, čo ste očakávali, čo sa stalo, presný text chyby a sledovanie zásobníka, príslušný kód, prostredie (jazyk/verzia/OS) a najmenšia vzorka, ktorá spôsobila chybu.
- Objasnite symptóm. Vo formáte „Očakávané X, aktualizované Y“.
- Prilepte celý text chyby a stopu zásobníka. Neskracujte to, necenzurujte, ale neporušujte štruktúru.
- Dajte najmenšiu reprodukciu. Minimálny vstup a kód, ktorý spúšťa chybu.
- Špecifikujte prostredie. Jazyková verzia, verzia knižnice, runtime prostredie.
Efektívna výzva na popis chyby: "Odlaďujem chybu. Informácie:- Čo sa snažím urobiť: [X]- Očakávané správanie: [Y]- Skutočné správanie: [Z]- Úplné chybové hlásenie a sledovanie zásobníka: [prilepiť]- Prostredie: [jazyk/verzia, knižnica/verzia]- Minimálny zahrnutý kód: [kód] Nehovorte mi, aké sú najpravdepodobnejšie príčiny každej opravy a ako prvé mi v zozname pravdepodobnosti verifikujte príčinu.
Zúženie toku hypotézou
Systematické ladenie je umenie eliminovať možnosti jednu po druhej. Použite AI na generovanie hypotéz a navrhnite experiment na testovanie každej hypotézy; Potom spustite experiment a vráťte výsledok. Tento cyklus je oveľa rýchlejší ako zvyk robiť náhodné zmeny a zastavovanie, nazývaný „ladenie brokovnice“.
Výzva pomocníka pri binárnom vyhľadávaní (bisekcii): "Táto chyba tam nebola včera, je tam dnes. Chcem zistiť, ktorá z posledných 20 zmien priniesla chybu s bisectom. Dajte mi podrobný plán: ktorý bod mám testovať, do ktorej polovice mám ísť v závislosti od výsledku. Tiež mi presne povedzte, čo mám v každom kroku kontrolovať."
Výzva stratégie vkladania denníka: „Nemôžem nájsť chybu, pretože v tejto funkcii nevidím medziľahlé hodnoty. Povedzte mi, v ktorých bodoch musím pridať riadky denníka, ktoré vytlačia ktoré premenné. Ku každému denníku pridajte vysvetlenie „čo sa dozviem z tohto denníka“. Špecifikujte tiež upozornenia, ktoré mi zabránia v protokolovaní dôverných údajov.“
Tip: Ak nemôžete vyriešiť chybu, väčšinou je problém niekde, kde ste nesprávne predpokladali. Opýtajte sa AI „aký môj predpoklad môže byť nesprávny?“ Pýtanie prelomí vašu slepotu. Najťažšie chyby sa skrývajú na mieste, kde poviete: „Som si istý, že to funguje správne“.
Slabá výzva / silná výzva
SLABÝ:"Môj kód zobrazuje chybu, opravte ju: [200 riadkov kódu]"(Výsledok: AI nevie, o akú chybu ide, čo sa očakáva; poskytuje všeobecné návrhy založené na dohadoch, väčšina z nich je zbytočná.)SILNÝ:"Dostávam výnimku NullPointerException. Očakávané: zoznam používateľov by sa mal vrátiť. Skutočný: Exploduje pri volaní getUsers:17.Stack]Stack. Minimálne opakovanie: Stáva sa to, keď je zoznam používateľov prázdny, ale nie, keď je plný. Súvisiace 15 riadkov: [kód]
Výkonná výzva dáva chybu do kontextu: v takom prípade sa stane (prázdny zoznam), v takom prípade sa nestane (úplný zoznam). Táto jediná stopa („stane sa, keď je prázdna“) takmer priamo poukazuje na hlavnú príčinu. Keďže tieto informácie nie sú dostupné v slabej výzve, AI robí slepý odhad.
Overenie opravy
Oprava je skutočnou opravou iba vtedy, ak robí tri veci:
ovládanie
Otázka
Ako overiť
Je chyba preč?
Funguje teraz rovnaký záznam?
Znova spustite minimálne repro
Žiadne nové chyby?
Je ešte niečo zlomené?
Spustite celý testovací balík
Nebude sa to opakovať?
Zopakuje sa tá istá chyba?
Pridajte regresný test pre tento scenár
Opravy vykonané bez nájdenia základnej príčiny často potláčajú symptóm. Napríklad ignorovanie nulovej chyby pomocou „preskočiť, ak je null“ je skutočným dôvodom „prečo sú údaje nulové?“ neviditeľné a chyba sa opakuje inde.
Mini kufríky
Prípad 1 – Pasca na potlačenie symptómov. Tím umlčí občasnú nulovú chybu pokusným chytením; Chyba zmizne, ale po 2 týždňoch údaje chýbajú. Skutočným dôvodom je, že služba po uplynutí časového limitu vráti hodnotu null. Keď sa spýtate AI "prečo je to nulové?", objaví sa hlavná príčina; Skutočná oprava trvá 1 hodinu, ale je trvalá.
Prípad 2 – Minimálna repro výkon. Vývojár nedokáže opraviť chybu, ktorá hovorí, že „každý čas spadne“. Znižuje chybu na najmenší vstup s návrhom AI: problém sa vyskytuje iba pri názvoch súborov obsahujúcich turecké znaky (chyba kódovania). Keď sa 300 riadkov neistoty zredukuje na 5 riadkov definitívneho repro, riešenie je zrejmé.
Prípad 3 – Antiregresný test. AI opravuje chybu výpočtu dátumu. Inžinier s tým nie je spokojný; pridáva regresný test pre chybný scenár (koniec mesiaca, 31. január + 1 mesiac). Keď sa ďalšia zmena dotkne rovnakej oblasti o 4 mesiace neskôr, test sa zmení na červenú a chyba je zachytená skôr, ako sa dostane do výroby.
Časté chyby
- Znamená to „nefunguje to, opravte to“. Bez chybového textu, očakávania a repro, AI háda.
- Neposkytuje stopu zásobníka. Stopa zásobníka často priamo naznačuje hlavnú príčinu.
- Pokračujte v náhodných zmenách. Experimenty bez stanovenia hypotéz strácajú čas.
- Potlačenie symptómu a vynechanie základnej príčiny. Chyba sa znovu zrodí inde.
- Nezabezpečenie opravy pomocou regresného testovania. Rovnaká chyba sa v budúcnosti potichu vráti.
V súhrne
Efektívne ladenie je systematické zužovanie, nie hádanie. Poskytnutie úplného textu chyby, sledovania zásobníka, minimálnej reprodukcie a informácií o prostredí AI exponenciálne zvyšuje šance na nájdenie hlavnej príčiny. Použite AI na generovanie hypotéz a navrhnite experiment na testovanie každej hypotézy; Spustíte experiment. Považujte opravu za „hotovú“ až vtedy, keď uvidíte, že chyba je preč, nie sú zavedené žiadne nové chyby a je chránená regresným testovaním.
Aplikačná úloha
Zvážte skutočnú alebo umelú chybu. Najprv znížte chybu na najmenšiu reprodukciu (v ktorom vstupe sa vyskytuje, v ktorom nie). Pomocou efektívneho receptu na chybu požiadajte AI o 3 hypotézy hlavnej príčiny a overovací krok pre každú z nich. Nájdite hlavnú príčinu testovaním hypotéz jednu po druhej, opravte ju, potom napíšte a spustite regresný test pre tento scenár, aby ste ukázali, že chyba je preč a test poskytuje ochranu.
kontrolný zoznam
- [ ] Príznak som objasnil ako „očakávaný vs realizovaný“.
- [ ] Poskytol som AI úplný text chyby a sledovanie zásobníka.
- [ ] Chybu som zredukoval na najmenšiu reprodukciu.
- [ ] Testovaním hypotéz po jednej som našiel hlavnú príčinu.
- [ ] Namiesto potlačenia symptómu som opravil hlavnú príčinu.
- [ ] Pridal som a spustil regresný test na rovnakú chybu.