Табыстар:
- Қате туралы хабармен, стек ізімен және ең кіші репродукция данасымен AI үшін қатені тиімді сипаттау мүмкіндігі
- Гипотеза жасау және оны кезең-кезеңмен қысқарту арқылы негізгі себебін табу үшін AI көмегімен жүйелі жөндеу ағынын іске қосу мүмкіндігі
- Ұсынылған AI түзетуі репродукция және регрессиялық тестілеу арқылы мәселені шынымен шешкенін тексеру мүмкіндігі
Түзету - бұл бағдарламаның неге күтілгеннен басқаша әрекет ететінін анықтау және оны түзету міндеті және ол көптеген инженерлердің көп уақытын алады. Жақсы жөндеу болжау ойынына емес, жүйелі түрде қысқартуға негізделеді: симптомды нақтылаңыз, гипотеза жасаңыз, гипотезаны сынаңыз, негізгі себепке барыңыз. AI - бұл циклде өте күшті серіктес; Бірақ егер сіз оған дұрыс ақпарат берсеңіз ғана. «Код жұмыс істемейді, оны түзет» деп айту AI-ны болжауға және жалпы ұсыныстар жасауға мәжбүр етеді. Оған толық қате туралы хабарды, стек ізін және ең кіші қайта шығару үлгісін беріңіз, сонда сіз бірге негізгі себебін табасыз.
Бұл бөлімде біз AI үшін қатені қалай тиімді сипаттауға болатынын, гипотезаларды кезең-кезеңмен қысқартуды және ұсынылған түзетудің мәселені шынымен шешетінін регрессиялық тестілеу арқылы тексеруді көреміз. Есіңізде болсын: қатені «түзету» және «қате симптомын басу» екі түрлі нәрсе; Түбір себебін таппай жасалған түзету қатені басқа орынға жылжытады.
Ұғымдар: Стек ізі: қате орын алған кезде қандай функциялар қандай ретпен шақырылғанын көрсететін дамп. Минималды қайталау: қатені тудыратын ең қарапайым, ең қысқа код/енгізу. Түбірлік себеп: симптом емес, мәселенің нақты көзі. Регрессиялық тестілеу: Бір қатенің қайталанбауын қамтамасыз ететін тестілеу.
AI-ге қатені сипаттау
AI негізгі себебін табу ықтималдығы сіз берген ақпараттың сапасына тікелей пропорционалды. Жақсы қате сипаттамасы мыналарды қамтиды: сіз не істеуге тырысасыз, не күткенсіз, не болды, нақты қате мәтіні және стек ізі, қатысты код, орта (тіл/нұсқа/OS) және қатені тудырған ең кіші үлгі.
- Симптомды нақтылаңыз. «Күтілетін X, өзектілендірілген Y» пішімінде.
- Толық қате мәтінін және стек ізін қойыңыз. Оны қысқартпаңыз, цензуралаңыз, бірақ құрылымды бұзбаңыз.
- Ең кішкентай репродукцияны беріңіз. Қатені тудыратын минималды енгізу және код.
- Ортаны көрсетіңіз. Тіл нұсқасы, кітапхана нұсқасы, орындалу ортасы.
Қатені сипаттаудың тиімді нұсқауы: "Мен қатені түзетіп жатырмын. Ақпарат:- Мен істеуге тырысамын: [X]- Күтілетін әрекет: [Y]- Нақты мінез-құлық: [Z]- Толық қате туралы хабар және стек ізі: [қою]- Орта: [тіл/нұсқа, кітапхана/нұсқа]- Қатысқан ең аз код: [код] Ең алдымен түбірлік қателерді түзету тәртібін береді3. ықтималдығын және әрқайсысы үшін қандай тексеруді тексеру керектігін айтыңыз».
Гипотеза бойынша ағынның тарылуы
Жүйелі жөндеу - бұл мүмкіндіктерді бірінен соң бірін жою өнері. Гипотезаларды құру және әрбір гипотезаны тексеру үшін экспериментті құрастыру үшін AI пайдаланыңыз; Содан кейін экспериментті орындап, нәтижені қайтарыңыз. Бұл цикл кездейсоқ өзгертулер енгізу және «мылтық жөндеу» деп аталатын тоқтату әдетінен әлдеқайда жылдамырақ.
Екілік іздеу (бинарлы) көмекші сұрауы: "Бұл қате кеше болған жоқ, бүгін бар. Мен соңғы 20 өзгертудің қайсысы бисекпен қатені әкелгенін білгім келеді. Маған қадамдық жоспар беріңіз: нәтижеге байланысты қай нүктені тексеру керек, қай жартыға өту керек. Әр қадамда нені тексеру керектігін де айтыңыз."
Журналды енгізу стратегиясының шақыруы: "Мен қатені таба алмаймын, себебі бұл функциядағы аралық мәндерді көре алмаймын. Маған қандай айнымалы мәндерді басып шығаратын журнал жолдарын қосу керек екенін айтыңыз. Әрбір журналға "бұл журналдан не үйренемін" түсіндірмесін қосыңыз. Сондай-ақ құпия деректерді тіркеуге кедергі болатын ескертулерді көрсетіңіз."
Кеңес: Қатені шеше алмасаңыз, мәселе көп жағдайда сіз дұрыс ойламаған жерде болады. АИ-ден «менің қандай болжамым қате болуы мүмкін?» Деп сұраңыз. Сұрау сіздің соқырлығыңызды бұзады. Ең қиын қателер сіз «бұл дұрыс жұмыс істеп жатқанына сенімдімін» деген жерде жасырылады.
Әлсіз шақыру / Күшті шақыру
ӘЛІСІЗ:"Менің кодым қате берді, оны түзетіңіз: [200 код жолы]"(Нәтиже: AI оның қандай қате екенін, не күтілетінін білмейді; болжамға негізделген жалпы ұсыныстар береді, олардың көпшілігі пайдасыз.)STRONG:"Мен NullPointerException аламын. Күтілетін: пайдаланушылар тізімі қайтарылуы керек. Нақты: [Java: TrackUs to get] үшін жарылды. 17. Ең аз қайталау: пайдаланушылар тізімі бос болғанда орын алады, бірақ ол толы емес Қатысты 15 жол: [код] негізгі себебін түсіндіріңіз, содан кейін түзетуді ұсыныңыз."
Күшті шақыру қатені контекстке қояды: бұл жағдайда орын алады (бос тізім), бұл жағдайда болмайды (толық тізім). Бұл жалғыз анықтама («бос кезде пайда болады») дерлік негізгі себепке нұсқайды. Бұл ақпарат әлсіз нұсқауда қол жетімді болмағандықтан, AI соқыр болжам жасайды.
Түзетуді тексеру
Түзету үш нәрсені орындаса ғана нақты түзету болып табылады:
бақылау
Сұрақ
Қалай тексеруге болады
Қате кетті ме?
Дәл сол жазба қазір жұмыс істей ме?
Ең аз қайталауды қайта іске қосыңыз
Жаңа қателер жоқ па?
Тағы бір нәрсе бұзылды ма?
Бүкіл сынақ жиынтығын іске қосыңыз
Қайталанбайды ма?
Дәл сол қате қайталана ма?
Осы сценарий үшін регрессия сынағы қосыңыз
Түбір себебін таппай жасалған түзетулер көбінесе симптомды басады. Мысалы, «нөл болса, өткізіп жіберу» арқылы нөлдік қатені жылтырату «неліктен деректер нөлге тең?» деген нақты себеп жасайды. көрінбейді және қате басқа жерде қайталанады.
Шағын корпустар
1-жағдай – Симптомдарды басатын тұзақ. Команда кездейсоқ нөлдік қатені қадағалап көру арқылы өшіреді; Қате жоғалады, бірақ 2 аптадан кейін деректер жоқ болып шығады. Нақты себеп - қызмет күту уақытында нөлді қайтарады. AI-дан «неге ол нөлге айналады?» деп сұрағанда, негізгі себеп шығады; Нақты түзету 1 сағатты алады, бірақ тұрақты.
2-жағдай — Ең аз қайталау қуаты. Әзірлеуші «ол анда-санда бұзылады» деген қатені түзете алмайды. Ол AI ұсынысымен қатені ең аз енгізуге дейін азайтады: мәселе түрік таңбалары бар файл атауларында ғана пайда болады (кодтау қатесі). 300 белгісіздік сызығы 5 түпкілікті репро жолына дейін төмендегенде, шешім айқын болады.
3-жағдай — регрессияға қарсы тест. AI күнді есептеу қатесін түзетеді. Бұған инженердің көңілі толмайды; қате сценарий үшін регрессия сынағы қосады (айдың соңы, 31 қаңтар + 1 ай). 4 айдан кейін басқа өзгеріс сол аймаққа тигенде, сынақ қызылға айналады және қате өндіріске жеткенге дейін ұсталады.
Жалпы қателер
- Бұл «жұмыс істемейді, түзет» дегенді білдіреді. Қате мәтіні, күту және қайталаусыз AI болжайды.
- Стек ізін бермеу. Стек ізі көбінесе түбірлік себепті тікелей көрсетеді.
- Кездейсоқ өзгерістер жасауды жалғастырыңыз. Гипотезаны құрмайтын эксперименттер уақытты жоғалтады.
- Симптомды басу және негізгі себебін жоғалту. Қате басқа жерде қайта туады.
- Регрессиялық тестілеу арқылы түзетуді қамтамасыз етпеу. Сол қателік болашақта үнсіз қайтады.
Қысқаша
Тиімді жөндеу – болжау емес, жүйелі тарылту. AI-ға қатенің толық мәтінін, стек ізін, ең аз жаңғыртуды және қоршаған орта туралы ақпаратты беру негізгі себеп табу мүмкіндігін экспоненциалды түрде арттырады. Гипотезаларды құру және әрбір гипотезаны тексеру үшін экспериментті құрастыру үшін AI пайдаланыңыз; Сіз эксперимент жүргізесіз. Қате жойылғанын, жаңа қателер енгізілмегенін және регрессиялық тестілеу арқылы қорғалғанын көргенде ғана түзетуді «орындалды» деп есептеңіз.
Қолданбалы тапсырма
Нақты немесе жасанды қатені қарастырыңыз. Алдымен қатені ең кіші репродукцияға дейін азайтыңыз (ол қандай кірісте болады, қай жерде ол болмайды). Қателер туралы тиімді рецептті пайдаланып, AI-дан 3 негізгі себеп гипотезасын және әрқайсысы үшін тексеру қадамын сұраңыз. Гипотезаларды бір-бірлеп сынау арқылы негізгі себебін табыңыз, оны түзетіңіз, содан кейін қате жойылғанын және сынақ қорғауды қамтамасыз ететінін көрсету үшін осы сценарий үшін регрессия сынағы жазып, іске қосыңыз.
бақылау парағы
- [ ] Мен симптомды «күтілген және іске асырылған» деп түсіндірдім.
- [ ] Мен AI-ға толық қате мәтінін және стек ізін бердім.
- [ ] Мен қатені ең кішкентай көшірмеге дейін азайттым.
- [ ] Гипотезаларды бір-бірден сынау арқылы мен түпкі себебін таптым.
- [ ] Симптомды басудың орнына, мен негізгі себебін анықтадым.
- [ ] Мен сол қате үшін регрессия сынамасын қосып, орындадым.