Добивки:
- Способност ефикасно да се опише грешка на вештачката интелигенција со порака за грешка, трага на стек и најмал пример за репродукција
- Способност да се изврши систематски тек на дебагирање со вештачка интелигенција за да се најде основната причина со хипотеза и стеснување чекор по чекор
- Способност да се потврди дека поправката што ја предложи вештачката интелигенција всушност го реши проблемот со репродукција и регресивно тестирање
Дебагирањето е задача да се открие зошто програмата се однесува поинаку од очекуваното и да се поправи, а тоа троши многу време на повеќето инженери. Доброто отстранување грешки не се заснова на игра со погодување, туку на систематско стеснување: разјаснете го симптомот, претпоставете, тестирајте ја хипотезата, дојдете до основната причина. ВИ е многу моќен партнер во овој циклус; Но, само ако му ги дадете точните информации. Кажувањето „кодот не работи, поправете го“ ја принудува вештачката интелигенција да погодува и да дава општи предлози. Дајте му ја целосната порака за грешка, трагата на оџакот и најмалиот примерок за репродукција и заедно ќе ја пронајдете основната причина.
Во оваа единица ќе видиме како ефективно да се опише грешката на вештачката интелигенција, да се стеснуваат хипотезите чекор по чекор и да се потврди преку регресивно тестирање дека предложената поправка всушност го решава проблемот. Запомнете: „поправањето“ на бубачката и „потиснувањето на симптомот на бубачката“ се две различни работи; Исправката направена без да се најде основната причина ја преместува грешката на друго место.
Концепти: Стак трага: депонија што покажува кои функции биле повикани по кој редослед во моментот на грешката. Минимален репро: наједноставниот, најкраток код/влез што ја активира грешката. Основна причина: Вистинскиот извор на проблемот, а не симптомот. Регресивно тестирање: Тестирање кое осигурува дека истата грешка не се повторува.
Опишување бубачка на вештачката интелигенција
Веројатноста вештачката интелигенција да ја пронајде основната причина е директно пропорционална со квалитетот на информациите што ги давате. Добриот опис на грешката вклучува: што сте се обиделе да направите, што очекувавте, што се случило, точниот текст на грешката и трагата на оџакот, вклучената шифра, околината (јазик/верзија/оперативен систем) и најмалиот примерок што ја предизвикал грешката.
- Разјаснете го симптомот. Во формат „Очекувано X, актуелизирано Y“.
- Залепете го целосниот текст на грешката и следењето на магацинот. Не го скратувајте, цензурирајте, но не ја кршете структурата.
- Дајте најмала репродукција. Минимален влез и код што ја активира грешката.
- Наведете ја околината. Јазична верзија, верзија на библиотека, околина за извршување.
Ефективна порака за опис на грешка: „Отстранувам грешка. Информации:- Што се обидувам да направам: [X]- Очекувано однесување: [Y]- Фактично однесување: [Z]- Целосна порака за грешка и трага на магацинот: [залепи]- Околината: [јазик/верзија, библиотека/верзија]- најверојатниот минимум вклучен код е поправен: [code]. по редослед на веројатност и кажи ми каков чек да проверам за секој“.
Стеснување на протокот по хипотеза
Систематското дебагирање е уметност на елиминирање на можностите една по една. Користете вештачка интелигенција за генерирање хипотези и дизајнирајте го експериментот за тестирање на секоја хипотеза; Потоа извршете го експериментот и вратете го резултатот. Овој циклус е многу побрз од навиката за правење случајни промени и запирање, наречено „дебагирање со пушка“.
Помошник за бинарно пребарување (бисекција): "Оваа грешка ја немаше вчера, ја има денес. Сакам да откријам која од последните 20 промени ја донесе грешката со бисект. Дајте ми план чекор-по-чекор: која точка да тестирам, на која половина да одам во зависност од резултатот. Исто така, кажи ми што точно да проверувам на секој чекор."
Прашање за стратегија за вметнување дневник: „Не можам да ја најдам грешката бидејќи не можам да ги видам средните вредности во оваа функција. Кажете ми во кои точки треба да додадам линии за дневници кои печатат кои променливи. Додајте објаснување „што ќе научам од овој дневник“ за секој дневник. Исто така, наведете ги предупредувањата што ќе ме спречат да евидентирам доверливи податоци“.
Совет: Ако не можете да решите грешка, најчесто проблемот е некаде каде што погрешно сте претпоставувале. Прашајте ја вештачката интелигенција „која моја претпоставка може да биде погрешна? Прашувањето ќе ви го скрши слепилото. Најтешките грешки се кријат во местото каде што велите „Сигурен сум дека ова функционира правилно“.
Слаба навестување / Силен навестување
СЛАБ:"Мојот код дава грешка, поправете ја: [200 линии код]"(резултат: AI не знае за каква грешка станува збор, што се очекува; дава општи предлози засновани на претпоставки, повеќето од нив се бескорисни.)СИЛНО:"Добивам NullPointerException. Очекувано: списокот на корисници треба да се врати на Statlist:Urtual to gets. Околината: Java 17. Минимално повторување: се случува кога списокот на корисници е празен, но не и кога е полн.
Моќниот промпт ја става грешката во контекст: во кој случај се случува (празна листа), во кој случај не се случува (целосна листа). Овој единствен поим („се случува кога е празен“) речиси директно укажува на основната причина. Бидејќи оваа информација не е достапна во слабата линија, вештачката интелигенција прави слепо погодување.
Потврдување на поправката
Поправката е вистинска поправка само ако прави три работи:
контрола
Прашање
Како да се потврди
Дали грешката исчезна?
Дали истиот влез функционира сега?
Стартувај минимално репро повторно
Нема нови грешки?
Дали нешто друго е скршено?
Стартувај го целиот тест пакет
Нема да се повтори?
Дали повторно ќе се случи истата грешка?
Додадете тест за регресија за ова сценарио
Корекциите направени без да се најде основната причина честопати го потиснуваат симптомот. На пример, премолчувањето на нулта грешка со „прескокнете ако е нула“ ја прави вистинската причина, „зошто податоците стануваат нула?“ невидлив, а грешката се повторува на друго место.
Мини футроли
Случај 1 - Замка за сузбивање на симптомите. Тимот замолчува повремена нулта грешка со обид за фаќање; Грешката исчезнува, но по 2 недели податоците се појавуваат како исчезнати. Вистинската причина е што услугата се враќа нула на тајмаут. Кога ќе ја прашате вештачката интелигенција „зошто станува нула?“, се појавува основната причина; Вистинското поправање трае 1 час, но е трајно.
Случај 2 — Минимална репромоќ. Програмерите не можат да поправат бубачка што вели „се урива одвреме-навреме“. Ја намалува грешката на најмал влез со предлог на AI: проблемот се јавува само со имиња на датотеки што содржат турски знаци (грешка во кодирањето). Кога 300 линии на несигурност се сведени на 5 линии на дефинитивен репро, решението станува очигледно.
Случај 3 - Анти-регресивен тест. Вештачката интелигенција поправа грешка во пресметувањето на датумот. Инженерот не е задоволен со ова; додава регресивен тест за погрешното сценарио (крајот на месецот, 31 јануари + 1 месец). Кога друга промена ќе ја допре истата област 4 месеци подоцна, тестот станува црвено и бубачката се фаќа пред да стигне до производство.
Вообичаени грешки
- Тоа значи „не работи, поправете го“. Без текст за грешка, очекување и репро, претпоставува вештачката интелигенција.
- Не давајќи ја трагата на магацинот. Трагата на оџакот често директно укажува на основната причина.
- Продолжете да правите случајни промени. Експериментите без воспоставување хипотеза губат време.
- Потиснување на симптомот и пропуштање на основната причина. Грешката повторно се раѓа на друго место.
- Необезбедување на поправка со регресивно тестирање. Истата грешка се враќа тивко во иднина.
Сумирано
Ефективното отстранување грешки е систематско стеснување, а не погодување. Давањето на вештачката интелигенција на целосниот текст за грешка, трага на стек, минимална репродукција и информации за околината експоненцијално ги зголемува шансите за наоѓање на основната причина. Користете вештачка интелигенција за генерирање хипотези и дизајнирајте го експериментот за тестирање на секоја хипотеза; Вие водете го експериментот. Размислете за поправка „готово“ само кога ќе видите дека грешката ја нема, не се воведени нови грешки и е заштитена со регресивно тестирање.
Задача за апликација
Размислете за вистинска или вештачка грешка. Прво намалете ја грешката на најмалата репродукција (во кој влез се појавува, во кој не). Користејќи го известувањето за ефективни рецепти за грешки, побарајте од вештачката интелигенција 3 хипотези за основната причина и чекор за верификација за секоја од нив. Најдете ја основната причина со тестирање на хипотезите една по една, поправете ја, потоа напишете и извршете регресивен тест за ова сценарио за да покажете дека грешката исчезнала и тестот обезбедува заштита.
листа за проверка
- [ ] Симптомот го појаснив како „очекувано наспроти реализирано“.
- [ ] На вештачката интелигенција му го дадов целосниот текст за грешка и трагата на магацинот.
- [ ] Ја намалив грешката на најмала репродукција.
- [ ] Со тестирање на хипотезите една по една, ја најдов основната причина.
- [ ] Наместо да го потиснам симптомот, ја поправив основната причина.
- [ ] Додадов и извршив регресивен тест за истата грешка.