Jednotka 5 / 12

Ladění a odstraňování problémů

zisky:

  • Schopnost efektivně popsat chybu AI pomocí chybové zprávy, trasování zásobníku a nejmenší instance reprodukce
  • Schopnost spustit systematický tok ladění s umělou inteligencí za účelem nalezení hlavní příčiny pomocí hypotéz a zužování ji krok za krokem
  • Schopnost ověřit, že oprava navržená AI skutečně vyřešila problém pomocí reprodukce a regresního testování

Ladění je úkolem zjistit, proč se program chová jinak, než se očekávalo, a opravit to, a většinu inženýrů to spotřebuje hodně času. Dobré ladění není založeno na hádání, ale na systematickém zužování: ujasněte si symptom, vytvořte hypotézu, otestujte hypotézu, dostaňte se k hlavní příčině. AI je v tomto cyklu velmi mocným partnerem; Ale pouze pokud mu poskytnete správné informace. Výrok „kód nefunguje, opravte ho“ nutí AI hádat a vytvářet obecné návrhy. Dejte mu úplnou chybovou zprávu, trasování zásobníku a nejmenší vzorek reprodukce a společně najdete hlavní příčinu.

V této jednotce uvidíme, jak efektivně popsat chybu AI, krok za krokem zúžit hypotézy a pomocí regresního testování ověřit, že navrhovaná oprava skutečně problém řeší. Pamatujte: „oprava“ chyby a „potlačení příznaku chyby“ jsou dvě různé věci; Oprava provedená bez nalezení hlavní příčiny přesune chybu na jiné místo.

Koncepty: Trasování zásobníku: Výpis zobrazující, které funkce byly volány v jakém pořadí v době chyby. Minimální repro: Nejjednodušší, nejkratší kód/vstup, který spouští chybu. Hlavní příčina: Skutečný zdroj problému, nikoli symptom. Regresní testování: Testování, které zajišťuje, že se stejná chyba nebude opakovat.

Popis chyby AI

Pravděpodobnost, že AI najde hlavní příčinu, je přímo úměrná kvalitě informací, které poskytujete. Dobrý popis chyby zahrnuje: co jste se pokusili udělat, co jste očekávali, co se stalo, přesný text chyby a trasování zásobníku, zahrnutý kód, prostředí (jazyk/verze/OS) a nejmenší vzorek, který způsobil chybu.

  1. Objasněte symptom. Ve formátu "Očekávané X, aktualizované Y".
  2. Vložte celý text chyby a trasování zásobníku. Nezkracujte to, necenzurujte, ale neporušujte strukturu.
  3. Poskytněte nejmenší reprodukci. Minimální vstup a kód, který spouští chybu.
  4. Určete prostředí. Jazyková verze, verze knihovny, runtime prostředí.

Efektivní výzva k popisu chyby: "Ladím chybu. Informace:- Co se snažím udělat: [X]- Očekávané chování: [Y]- Skutečné chování: [Z]- Úplná chybová zpráva a trasování zásobníku: [vložit]- Prostředí: [jazyk/verze, knihovna/verze]- Minimální zahrnutý kód: [kód] Neříkejte mi, jaké 3 nejpravděpodobnější příčiny a ověřte mi kořenové pořadí, aby bylo možné ověřovat první příčiny.

Zúžení toku hypotézou

Systematické ladění je umění eliminovat možnosti jednu po druhé. Použijte AI ke generování hypotéz a navrhněte experiment pro testování každé hypotézy; Poté spusťte experiment a vraťte výsledek. Tento cyklus je mnohem rychlejší než zvyk provádět náhodné změny a zastavování, nazývaný „ladění brokovnice“.

Nápověda pomocného binárního vyhledávání (půlení): "Tato chyba tam nebyla včera, je tam dnes. Chci zjistit, která z posledních 20 změn přinesla chybu s bisect. Dejte mi plán krok za krokem: který bod mám testovat, do které poloviny mám jít v závislosti na výsledku. Také mi přesně řekněte, co mám v každém kroku kontrolovat."

Výzva strategie vkládání protokolu: "Nemohu najít chybu, protože v této funkci nevidím mezilehlé hodnoty. Řekněte mi, ve kterých bodech musím přidat řádky protokolu, které vytisknou které proměnné. Ke každému protokolu přidejte vysvětlení "co se z tohoto protokolu dozvím". Také uveďte varování, která mi zabrání protokolovat důvěrná data."

Tip: Pokud nemůžete vyřešit chybu, většinou je problém někde, kde jste nesprávně předpokládali. Zeptejte se AI: "Jaký můj předpoklad by mohl být špatný?" Zeptání se zlomí vaši slepotu. Nejtěžší chyby se skrývají v místě, kde řeknete „Jsem si jistý, že to funguje správně“.

Slabá výzva / Silná výzva

SLABÝ:"Můj kód hlásí chybu, opravte ji: [200 řádků kódu]"(Výsledek: AI neví, o jakou chybu se jedná, co se očekává; dává obecné návrhy založené na dohadech, většina z nich je k ničemu.)SILNÁ:"Dostávám výjimku NullPointerException. Očekáváno: seznam uživatelů by měl být vrácen. Skutečný: Exploduje při volání getUsers:17.Stack]. Minimální opakování: Stává se to, když je seznam uživatelů prázdný, ale ne, když je plný. Související 15 řádků: [kód]

Výkonná výzva uvádí chybu do kontextu: v takovém případě se stane (prázdný seznam), v takovém případě se nestane (úplný seznam). Toto jediné vodítko („stane se, když je prázdné“) téměř přímo ukazuje na hlavní příčinu. Vzhledem k tomu, že tato informace není k dispozici ve slabé výzvě, AI provede slepý odhad.

Ověření opravy

Oprava je skutečnou opravou pouze tehdy, pokud dělá tři věci:

ovládání

Otázka

Jak ověřit

Chyba je pryč?

Funguje nyní stejný záznam?

Spusťte znovu minimální repro

Žádné nové chyby?

Je ještě něco zlomeného?

Spusťte celou testovací sadu

Nebude se to opakovat?

Bude se stejná chyba opakovat?

Přidejte regresní test pro tento scénář

Opravy provedené bez nalezení hlavní příčiny často potlačí symptom. Například ignorování nulové chyby pomocí „skip if null“ je skutečným důvodem, „proč jsou data nulová?“ neviditelné a chyba se opakuje jinde.

Mini pouzdra

Případ 1 — Past potlačující symptomy. Tým umlčí příležitostnou nulovou chybu pokusným úlovkem; Chyba zmizí, ale po 2 týdnech se zdá, že data chybí. Skutečným důvodem je, že služba vrátí hodnotu null při vypršení časového limitu. Když se zeptáte AI "proč je to nulové?", objeví se základní příčina; Skutečná oprava trvá 1 hodinu, ale je trvalá.

Případ 2 — Minimální repro výkon. Vývojář nemůže opravit chybu, která říká, že „každý čas to spadne“. Snižuje chybu na nejmenší vstup s návrhem AI: problém nastává pouze u názvů souborů obsahujících turecké znaky (chyba kódování). Když se 300 řádků nejistoty zredukuje na 5 řádků definitivního repro, řešení je zřejmé.

Případ 3 – Antiregresní test. AI opravuje chybu ve výpočtu data. Inženýr s tím není spokojen; přidává regresní test pro chybný scénář (konec měsíce, 31. ledna + 1 měsíc). Když se další změna dotkne stejné oblasti o 4 měsíce později, test zčervená a chyba je zachycena dříve, než se dostane do výroby.

Časté chyby

  • Znamená to „nefunguje to, opravte to“. Bez chybového textu, očekávání a repro, odhaduje AI.
  • Neposkytování trasování zásobníku. Trasování zásobníku často přímo ukazuje hlavní příčinu.
  • Pokračujte v provádění náhodných změn. Experimenty bez stanovení hypotéz ztrácejí čas.
  • Potlačení příznaku a vynechání hlavní příčiny. Chyba se znovu zrodí jinde.
  • Nezajištění opravy pomocí regresního testování. Stejná chyba se v budoucnu tiše vrátí.

V souhrnu

Efektivní ladění je systematické zužování, ne hádání. Poskytnutí úplného textu chyby, trasování zásobníku, minimální reprodukce a informací o prostředí AI exponenciálně zvyšuje šance na nalezení hlavní příčiny. Použijte AI ke generování hypotéz a navrhněte experiment pro testování každé hypotézy; Spustíte experiment. Považujte opravu za „hotovou“ pouze tehdy, když vidíte, že chyba je pryč, nejsou zavedeny žádné nové chyby a je chráněna regresním testováním.

Aplikační úkol

Zvažte skutečnou nebo umělou chybu. Nejprve snižte chybu na nejmenší reprodukci (ve kterém vstupu se vyskytuje, ve kterém ne). Pomocí účinné výzvy receptu na chybu požádejte AI® o 3 hypotézy hlavní příčiny a ověřovací krok pro každou z nich. Najděte hlavní příčinu testováním hypotéz jednu po druhé, opravte ji, poté napište a spusťte regresní test pro tento scénář, abyste ukázali, že chyba je pryč a test poskytuje ochranu.

kontrolní seznam

  • [ ] Příznak jsem objasnil jako „očekávaný vs realizovaný“.
  • [ ] Předal jsem AI úplný text chyby a trasování zásobníku.
  • [ ] Snížil jsem chybu na nejmenší reprodukci.
  • [ ] Testováním hypotéz jednu po druhé jsem našel hlavní příčinu.
  • [ ] Místo potlačení příznaku jsem napravil hlavní příčinu.
  • [ ] Přidal jsem a provedl regresní test na stejnou chybu.