Добици:
- Способност да се ефикасно опише грешка АИ са поруком о грешци, праћењем стека и најмањом инстанцом репродукције
- Способност покретања систематског тока отклањања грешака помоћу АИ да би се пронашао основни узрок хипотезом и сужавањем корак по корак
- Могућност да се потврди да је поправка коју је АИ предложила заиста решила проблем репродукцијом и регресијским тестирањем
Отклањање грешака је задатак откривања зашто се програм понаша другачије него што се очекивало и поправљања, а то одузима много времена већини инжењера. Добро отклањање грешака није засновано на игри погађања, већ на систематском сужавању: разјасните симптом, поставите хипотезу, тестирајте хипотезу, дођите до корена узрока. АИ је веома моћан партнер у овом циклусу; Али само ако му дате тачне информације. Рећи „код не ради, поправи га“ приморава АИ да погађа и даје опште предлоге. Дајте му пуну поруку о грешци, праћење стека и најмањи узорак репродукције и заједно ћете пронаћи основни узрок.
У овој јединици ћемо видети како ефикасно описати грешку АИ, сузити хипотезе корак по корак и потврдити кроз регресијско тестирање да предложена исправка заиста решава проблем. Упамтите: „поправљање” грешке и „сузбијање симптома грешке” су две различите ствари; Исправка извршена без проналажења основног узрока помера грешку на друго место.
Концепти: Праћење стека: Думп који показује које су функције позване којим редоследом у време грешке. Минимални репро: Најједноставнији, најкраћи код/унос који покреће грешку. Основни узрок: Прави извор проблема, а не симптом. Регресионо тестирање: Тестирање које осигурава да се иста грешка не понови.
Описивање грешке за АИ
Вероватноћа да АИ пронађе основни узрок је директно пропорционална квалитету информација које дајете. Добар опис грешке укључује: шта сте покушали да урадите, шта сте очекивали, шта се десило, тачан текст грешке и праћење стека, укључени код, окружење (језик/верзија/ОС) и најмањи узорак који је произвео грешку.
- Разјасните симптом. У формату „Очекивани Кс, актуелизовани И“.
- Налепите цео текст грешке и праћење стека. Немојте га скраћивати, цензурисати, али не рушити структуру.
- Дајте најмању репродукцију. Минимални унос и код који покреће грешку.
- Наведите окружење. Верзија језика, верзија библиотеке, окружење за извршавање.
Ефективни упит за опис грешке: „Отклањам грешке у грешци. Информације:- Шта покушавам да урадим: [Кс]- Очекивано понашање: [И]- Стварно понашање: [З]- Потпуна порука о грешци и праћење стека: [налепи]- Окружење: [језик/верзија, библиотека/верзија]- Минимални код који је највероватније укључен: [код] дајте ми директан редослед исправљања узрока. вероватноћу и реци ми коју проверу да проверим за сваку.“
Сужавање тока хипотезом
Систематско отклањање грешака је уметност елиминисања могућности једне по једне. Користите вештачку интелигенцију за генерисање хипотеза и дизајнирајте експеримент за тестирање сваке хипотезе; Затим покрените експеримент и вратите резултат. Овај циклус је много бржи од навике прављења насумичних промена и заустављања, што се назива „отклањање грешака сачмарицама“.
Промпт помоћника за бинарну претрагу (бисекција): "Ова грешка није била јуче, постоји данас. Желим да сазнам која је од последњих 20 промена довела до грешке са бисецт. Дајте ми план корак по корак: коју тачку да тестирам, на коју половину да идем у зависности од резултата. Такође ми реците шта тачно да проверим у сваком кораку."
Промпт стратегије уметања дневника: „Не могу да пронађем грешку јер не могу да видим међувредности у овој функцији. Реци ми у којим тачкама треба да додам линије дневника које штампају које променљиве. Додајте објашњење 'шта ћу научити из овог дневника' за сваки дневник. Такође наведите упозорења која ће ме спречити да евидентирам поверљиве податке."
Савет: Ако не можете да решите грешку, већину времена проблем је негде где сте погрешно претпоставили. Питајте АИ „која би моја претпоставка могла бити погрешна?“ Питање ће прекинути ваше слепило. Најтеже грешке се крију на месту где кажете „Сигуран сам да ово ради како треба“.
Слаба порука / јака промпт
СЛАБО:"Мој код даје грешку, поправи је: [200 линија кода]"(Резултат: АИ не зна која је грешка, шта се очекује; даје опште предлоге засноване на нагађању, већина њих је бескорисна.)ЈАКО:"Добијам НуллПоинтерЕкцептион. Очекивано: треба да се врати листа корисника. Стварно:Узбризује се на позив [Стампсроннвицк]. Јава 17. Минимално понављање: Догађа се када је листа корисника празна, али не и када је пуна.
Моћни промпт ставља грешку у контекст: у ком случају се дешава (празна листа), у ком случају се не дешава (цела листа). Овај једини траг („дешава се када је празан“) скоро директно указује на основни узрок. Пошто ове информације нису доступне у слабом промпту, АИ на слепо погађа.
Провера поправке
Поправка је само право решење ако ради три ствари:
контролу
Питање
Како проверити
Да ли је грешка нестала?
Да ли исти унос сада ради?
Поново покрените минималну репро
Нема нових грешака?
Да ли је још нешто покварено?
Покрените цео тест пакет
Неће ли се поновити?
Хоће ли се поново појавити иста грешка?
Додајте тест регресије за овај сценарио
Корекције направљене без проналажења основног узрока често потискују симптом. На пример, заташкавање нулте грешке са "прескочи ако је нула" прави прави разлог, "зашто су подаци нулти?" невидљив, а грешка се поново појављује на другом месту.
Мини Цасес
Случај 1 — Замка за сузбијање симптома. Тим утишава повремену нулту грешку покушајем-хватањем; Грешка нестаје, али након 2 недеље подаци недостају. Прави разлог је тај што услуга враћа нулл након истека. Када питате АИ "зашто постаје нулта?", појављује се основни узрок; Право решење траје 1 сат, али је трајно.
Случај 2 — Минимална моћ репродукције. Програмер не може да поправи грешку која каже „с времена на време се руши“. Смањује грешку на најмањи унос уз сугестију АИ: проблем се јавља само код имена датотека која садрже турске знакове (грешка кодирања). Када се 300 редова неизвесности сведе на 5 редова дефинитивне репро, решење постаје очигледно.
Случај 3 — Тест против регресије. АИ поправља грешку у израчунавању датума. Инжењер није задовољан овим; додаје тест регресије за погрешан сценарио (крај месеца, 31. јануар + 1 месец). Када друга промена додирне исту област 4 месеца касније, тест постаје црвен и грешка је ухваћена пре него што дође до производње.
Уобичајене грешке
- То значи "не ради, поправи то". Без текста грешке, очекивања и репрограма, АИ нагађа.
- Не даје траг стеку. Праћење стека често директно указује на основни узрок.
- Наставите да правите насумичне промене. Експерименти без успостављања хипотезе губе време.
- Сузбијање симптома и пропуштање основног узрока. Грешка се поново рађа на другом месту.
- Не осигуравање поправке регресионим тестирањем. Иста грешка се тихо враћа у будућности.
Укратко
Ефикасно отклањање грешака је систематско сужавање, а не нагађање. Давање АИ пуног текста грешке, праћења стека, минималне репродукције и информација о окружењу експоненцијално повећава шансе да се пронађе основни узрок. Користите вештачку интелигенцију за генерисање хипотеза и дизајнирајте експеримент за тестирање сваке хипотезе; Ви водите експеримент. Сматрајте да је поправка „урађена“ тек када видите да је грешка нестала, да нема нових грешака и да је заштићена регресијским тестирањем.
Задатак апликације
Узмите у обзир стварну или вештачку грешку. Прво смањите грешку на најмању репродукцију (у ком уносу се јавља, у ком не). Користећи ефикасну промпту за рецепт за грешке, затражите од АИ 3 хипотезе о основном узроку и корак верификације за сваку. Пронађите основни узрок тестирањем једне по једне хипотезе, поправите је, а затим напишите и покрените регресијски тест за овај сценарио да бисте показали да је грешка нестала и да тест пружа заштиту.
контролна листа
- [ ] Појаснио сам симптом као „очекивано наспрам оствареног“.
- [ ] Дао сам цео текст грешке и праћење стека АИ.
- [ ] Свео сам грешку на најмању репродукцију.
- [ ] Тестирајући хипотезе једну по једну, пронашао сам основни узрок.
- [ ] Уместо да потиснем симптом, отклонио сам основни узрок.
- [ ] Додао сам и извршио регресијски тест за исту грешку.