AI для математики, STEM та програмування

AI для пошуку помилок у коді

21 Серпня, 05:28

7 на хв читання

westudy

Як знаходити помилки в коді з AI: відтворення дефекту, гіпотези, максимум від’ємного списку та контроль після правки.

Налагодження починається з розбіжності між очікуванням і фактичною поведінкою. AI може запропонувати багато правдоподібних причин, але корисною стає лише та, яку можна перевірити. Потрібні короткий відтворюваний приклад, точна умова та спостережуваний збій. Такий маршрут зменшує випадкове редагування й залишає авторові розуміння причини виправлення.


Умова власної практики

Авторська функція max_value(values) помилково починає максимум із нуля. Для додатних чисел вона може працювати, але для −5, −2, −9 повертає нуль, якого у списку немає. У прийнятому контракті порожній список дає None, а непорожній — найбільше наявне число. Правильна початкова опора для непорожнього списку — його перший елемент.


Пропозиції виправлень можуть бути неповними або не відповідати задуму; потребу їх перегляду описує GitHub: можливості та межі пояснень і виправлень. Подальші приклади для теми «налагодження коду з AI» є авторськими навчальними сценаріями; вони не є звітом проведеного тестування продуктів.


Очікуване й фактичне окремо

Для заданого списку очікуємо мінус два, а отримуємо нуль. Такий запис точніший за загальну скаргу функція не працює.


Надайте вхід, очікуваний вихід, фактичний вихід і мінімальний код. Вкажіть контракт порожнього випадку.


Помічник має аналізувати саме появу нуля у від’ємному наборі. Перевірте, що задача не змінилася на сумування.


Без очікування модель може прийняти нуль як домовлений результат. Спочатку поясніть, чому він непридатний.


У розборі пошуку максимального значення почніть із питання, яке можна перевірити виконанням. Запишіть на папері конкретний вхід і потрібний вихід, а потім назвіть властивість, що поєднує їх. Це залишає місце для власної гіпотези перед відповіддю помічника. Якщо програма надто велика, виділіть мінімальний фрагмент, який зберігає потрібну поведінку. Скорочення не повинно приховати умову, через яку виникає сумнів. Поясніть, які дані залишилися за межами прикладу та чому вони зараз не потрібні. Учень має знати, де закінчується висновок про маленьку функцію та починаються неперевірені припущення про весь проєкт; у цій пробі потрібний орієнтир — допустимий початковий кандидат максимуму. Так перша розмова з AI отримує предмет і спостережуваний результат.


Мінімальний приклад збою

Один від’ємний елемент уже виявляє проблему початкового нуля. Великий файл не потрібний для першої перевірки гіпотези.


Скоротіть вхід до [-5] і відтворіть поведінку. Збережіть довший приклад для перевірки після виправлення.


Повернення нуля для одного мінус п’яти показує, що проблема не в порядку трьох чисел.


Надто багато даних породжує зайві припущення. Зменшуйте приклад, доки лишається та сама розбіжність.


Для пошуку максимального значення розділіть допустимий вхід, спосіб проходження елементів і форму результату. Ці три частини можуть змінюватися незалежно. Коли помічник пропонує поліпшення, з’ясуйте, чи він лише переписує той самий алгоритм, чи додає нову поведінку; у цій пробі потрібний орієнтир — допустимий початковий кандидат максимуму. Наприклад, мовчазне вилучення повтору, сортування або зміна порожнього результату вже потребують погодженої вимоги; конкретний предмет перевірки тут — допустимий початковий кандидат максимуму. Позначте кожну зміну окремо, щоб не прийняти новий контракт за косметичну правку. Студентові корисно пояснити, який тест мав би лишитися незмінним після редагування, а який отримав би інше очікування, коли перевіряється допустимий початковий кандидат максимуму. Якщо відповідь невідома, відкладіть переписування та поверніться до опису того, що функція повинна робити; конкретний предмет перевірки тут — допустимий початковий кандидат максимуму.


Гіпотеза про початковий стан

Порівняння з нулем ніколи не замінює максимум від’ємним числом. Це пояснює спостереження без зміни інших частин алгоритму.


Трасуйте початковий стан і перевірку кожного числа. Сформулюйте гіпотезу одним причинним реченням.


За максимуму нуль жоден елемент заданого списку не більший. Стан залишається незмінним до повернення.


Список випадкових можливих помилок не є діагнозом. Оберіть гіпотезу, яка пояснює конкретний контрольний випадок.


Під час пояснення пошуку максимального значення не пропускайте проміжний стан заради короткого підсумку. Виберіть один елемент, назвіть стан перед його обробкою, перевірену умову й стан після дії. Потім попросіть учня продовжити наступний крок без готової таблиці. Помилка в такому продовженні показує конкретне місце нерозуміння: значення змінної, напрям порівняння, момент додавання або вихід із функції; конкретний предмет перевірки тут — допустимий початковий кандидат максимуму. AI можна просити поставити запитання саме про цей перехід. Довге пояснення всіх рядків не потрібне, якщо трудноща стосується одного зв’язку. Після короткої опори знову дайте власну дію, щоб учень не залишився слухачем правильного, але чужого трасування, коли перевіряється допустимий початковий кандидат максимуму.


Виправлення в межах контракту

Для непорожнього списку перший елемент є допустимою початковою величиною. Порожній випадок потрібно обробити до такого доступу.


Додайте перевірку порожнього входу та почніть максимум із першого числа. Поясніть, що змінюється в трасі.


Для [-5] результат мінус п’ять, для [-5, -2, -9] — мінус два, для [] — None.


Вибір дуже малого умовного числа не є універсальною заміною. Контракт не задає нижньої межі всіх можливих значень.


Перевірку пошуку максимального значення будуйте від очікування, визначеного за умовою, до фактичного виконання. Якщо тест і реалізація походять з одного невдалого припущення, вони можуть погодитися між собою та все одно не виконати задачу, коли перевіряється допустимий початковий кандидат максимуму. Тому спершу порахуйте маленький випадок вручну, а вже потім запускайте код. За розбіжності збережіть вхід, очікування та отриманий результат. Цього достатньо для предметного запиту до помічника: знайти першу точку, де виконання розходиться з контрактом; у цій пробі потрібний орієнтир — допустимий початковий кандидат максимуму. Не просіть загально зробити програму правильною, коли можете назвати точну поведінку. Після виправлення повторіть саме випадок розбіжності й додайте близький контроль, який перевіряє, чи правка не зламала іншу вимогу; у цій пробі потрібний орієнтир — допустимий початковий кандидат максимуму.


Чому нуль приховує помилку максимуму

Неправильне початкове значення може залишатися непомітним на звичних додатних прикладах. Якщо змінна максимуму починається з нуля, список мінус п’ять, мінус два, мінус дев’ять не оновить її жодного разу. Отримаємо нуль, якого у вході немає. Помилка стосується припущення про дані, а не випадкового невдалого числа.


def max_value(values):
    if not values:
        return None
    best = values[0]
    for value in values[1:]:
        if value > best:
            best = value
    return best

Ця авторська реалізація приймає список чисел, які можна порівнювати між собою. Для порожнього списку контракт повертає None. Для непорожнього входу best починається з реального елемента, тому подальші порівняння не вводять сторонньої межі. Ми не розширюємо тут функцію на довільні змішані типи чи особливі числові значення: такі вимоги потребують власного контракту.


Трасування від’ємного списку починається з мінус п’яти. Мінус два більше, тому best змінюється. Мінус дев’ять не перевищує поточне значення, отже результат лишається мінус два. Попросіть AI пояснити саме перше розходження з помилковою версією. Воно виникає ще до циклу, коли нуль приймається за допустимого кандидата без підстави у вході.


Після виправлення перевіряємо також три, сім, два; один нуль; мінус один і нуль; порожній список. Вони відповідають різним властивостям: звичайному оновленню, одиничному входу, допустимому нулю та прийнятій порожній поведінці. Очікуваний результат записуємо до запуску. Запропонований моделлю тест із власноруч прийнятим очікуванням корисніший за кілька тестів, які просто копіюють її припущення.


Тепер спробуйте змінити результат на індекс першого максимального елемента. Для семи, трьох, семи очікуємо нульовий індекс. Якщо використати оновлення при рівності, індекс стане останнім. Це нова вимога про повтори, тому її потрібно виділити в окремий тест. Розбір помилки тоді завершується правилом вибору початкового стану та точним розумінням того, які властивості змінює наступна правка.


Регресійні випадки

Виправлення від’ємних чисел повинно зберегти правильність додатних, нуля й одного елемента. Це окремі перевірки.


Додайте [3, 7, 2], [0], [-1, 0] та порожній список. Запишіть очікування вручну.


Маємо відповідно сім, нуль, нуль та None. Зіставте результат із початковим контрактом.


Тести тільки на знайденому збої можуть пропустити нову помилку. Перевірте властивість максимуму на різних прийнятих входах.


Контрприклад для пошуку максимального значення має відрізняти прийнятий алгоритм від конкретної хибної ідеї. Оберіть цю ідею до добору чисел чи рядків. Якщо неправильний спосіб проходить усі наявні приклади, потрібно шукати вхід, де його приховане припущення стає видимим; конкретний предмет перевірки тут — допустимий початковий кандидат максимуму. Змінюйте одну суттєву властивість: порядок, повтор, знак, межу або відсутність елементів. Попросіть учня зробити прогноз для обох способів і пояснити, чому очікування різні. Така пара дає підставу для виправлення, яку можна перевірити незалежно від авторитету AI. Якщо прогноз не вдається, поверніться до ручного виконання цього маленького входу, замість додавати кілька нових складнощів одночасно; у цій пробі потрібний орієнтир — допустимий початковий кандидат максимуму.


Логіка до оптимізації

Компактна вбудована операція може розв’язати задачу, але не пояснить, чому початкова версія була хибною.


Спочатку відновіть цикл і його початковий стан. Лише після пояснення порівняйте з іншим способом реалізації.


Студент має назвати причину нуля без готової відповіді. Перевірте її на ще одному від’ємному наборі.


Переписування до розбору перетворює виправлення на підміну. Збережіть початкову версію як матеріал для причинного пояснення.


Для навчального маршруту пошуку максимального значення підтримку зручно давати сходинками. Спочатку уточнювальне питання про результат, потім назва потрібної властивості, далі один показаний перехід стану; у цій пробі потрібний орієнтир — допустимий початковий кандидат максимуму. Повну реалізацію залиште для розбору після власної спроби або для ситуації, де її роль прямо визначена викладачем, коли перевіряється допустимий початковий кандидат максимуму. У кожній сходинці учень повинен мати що виконати сам: обрати очікування, продовжити цикл, запропонувати тест чи пояснити відступ; конкретний предмет перевірки тут — допустимий початковий кандидат максимуму. Занотуйте, яка опора розв’язала труднощу. У наступній вправі почніть із меншої підтримки, але збережіть достатню умову. Це дозволяє оцінювати потребу в допомозі за реальною дією, а не за загальним враженням, що студент усе зрозумів, коли перевіряється допустимий початковий кандидат максимуму.


Повідомлення про помилку й відсутність помилки

Ця функція може виконуватися без винятку й давати неправильний результат. Успішний запуск не підтверджує змістової правильності.


Розділіть синтаксичні, виконавчі й логічні збої. Для нашого прикладу перевіряйте конкретний вихід.


Журнал повинен містити порівняння очікування з результатом, а не тільки відсутність червоного повідомлення.


AI може описати помилку, якої середовище не видавало. Не вигадуйте traceback; надавайте тільки реально спостережену поведінку.


Після правки пошуку максимального значення перегляньте змінені рядки окремо від пояснювального тексту моделі. Кожна прийнята зміна повинна мати причину в контракті та перевірку у виконанні. Не потрібно перетворювати маленьку навчальну функцію на складний універсальний компонент без відповідної задачі; у цій пробі потрібний орієнтир — допустимий початковий кандидат максимуму. Якщо з’явилися нові типи входу, обробка пошкоджених даних або зовнішні залежності, запишіть їх як окреме розширення; у цій пробі потрібний орієнтир — допустимий початковий кандидат максимуму. Початковий контроль при цьому залишається потрібним. Учень має вміти сказати, які старі властивості збережено й що тепер перевіряється додатково. Саме така коротка рецензія на зміну показує відповідальне читання коду, а не лише згоду з готовою пропозицією; конкретний предмет перевірки тут — допустимий початковий кандидат максимуму.


Причина правки в конспекті

Навчальний підсумок має пояснювати зв’язок початкового стану з допустимими значеннями входу.


Запишіть збій, мінімальний приклад, прийняту гіпотезу й контроль після виправлення. Додайте нове близьке завдання.


Для пошуку мінімуму подумайте про аналогічну проблему початкового нуля. Поясніть, чому перший елемент знову доречний.


Якщо лишилася тільки правильна функція, причина помилки швидко губиться. Збережіть коротке пояснення вибору початкової опори.


Завершення роботи з пошуку максимального значення варто перевіряти на новому вході та без попереднього розбору перед очима. Залиште той самий принцип, але змініть зовнішні дані. Попросіть спочатку передбачити вихід, потім запустити власний код і пояснити збіг або розбіжність. Далі змініть одну вимогу, щоб учень назвав потрібну правку до її виконання. Якщо він може пояснити лише старий готовий приклад, перенесення ще не показано. Це не привід одразу починати все заново: поверніть конкретну пропущену опору та дайте інший близький контроль; конкретний предмет перевірки тут — допустимий початковий кандидат максимуму. У конспекті залиште правило вибору, один перевірений випадок і відкриту межу застосування функції.


Друга проба: від зразка до власного рішення

Для початку розбору помилки залиште тільки один від’ємний елемент. Якщо функція з нульовим початком повертає нуль замість нього, цикл ще не може приховати причину складними переходами. Учень має побачити стороннього кандидата, якого немає у вході. Потім поверніть три елементи й поясніть, чому та сама проблема зберігається на кожному порівнянні.


Не замінюйте нуль іншим довільним дуже малим числом. Для нового допустимого входу може знайтися ще менше значення, і приховане припущення повернеться. У прийнятому непорожньому списку перший елемент дає кандидата без такого зовнішнього припущення. Порожній список потрібно обробити до цього доступу. Саме послідовність перевірок пов’язує коректність початкового стану з межами контракту.


Попросіть AI запропонувати дві гіпотези причини розбіжності, але не приймайте їх без перевірки. Одна може стосуватися початкового значення, друга — знака порівняння. Учень добирає окремі маленькі входи для кожної гіпотези. Якщо помічник одразу змінює обидва місця, складніше зрозуміти, яка правка розв’язала спостережувану проблему. Для навчальної діагностики ясна причина важливіша за швидкість великого переписування.


У журналі помилки залиште короткий відтворюваний випадок, очікування, фактичний результат і першу розбіжність. Причину опишіть реченням про припущення: початковий кандидат має бути допустимим для всього прийнятого входу. Формулювання просто був неправильний нуль занадто вузьке. Воно не допоможе в іншій задачі, де накопичувач або початкова межа обираються так само без перевірки.


Після правки навмисно поверніть початкову помилку та запустіть контроль. Він повинен знову показати розбіжність. Це перевіряє, чи тест справді ловить потрібний дефект, а не лише виконує кілька рядків. Додатковий приклад із нулем потрібен, щоб не зробити хибний висновок, нібито нуль завжди є недопустимим результатом. Його допустимість визначається конкретним входом.


Для підсумку учень пояснює різницю між виправленням знайденого дефекту та розширенням функції. Повернення індексу, робота з повторними максимумами або інша поведінка порожнього входу потребують нових домовленостей. AI може допомогти скласти карту таких змін, але студент повинен назвати відповідне очікування для кожної. Тоді діагностика не перетвориться на неконтрольоване додавання можливостей.


Запит для наступної власної спроби

Допоможи знайти причину, чому max_value([-5, -2, -9]) повертає 0. Спочатку порівняй контракт і фактичну трасу. Запропонуй одну перевірювану гіпотезу, не переписуючи весь код.


Для практики пошуку максимального значення додайте свою початкову версію та назвіть місце, де потрібна допомога. Залиште в запиті ту частину, яку хочете виконати самі. Після відповіді щодо пошуку максимального значення запишіть прийнятий крок і його підставу. Якщо модель відкрила все рішення раніше власної спроби, використайте іншу близьку умову для самостійної перевірки, коли перевіряється допустимий початковий кандидат максимуму.


Що перевірити перед завершенням

Етап | Свідчення прийнятого результату; Очікуване й фактичне окремо | Помічник має аналізувати саме появу нуля у від’ємному наборі. Перевірте, що задача не змінилася на сумування.; Гіпотеза про початковий стан | За максимуму нуль жоден елемент заданого списку не більший. Стан залишається незмінним до повернення.; Регресійні випадки | Маємо відповідно сім, нуль, нуль та None. Зіставте результат із початковим контрактом.; Повідомлення про помилку й відсутність помилки | Журнал повинен містити порівняння очікування з результатом, а не тільки відсутність червоного повідомлення.


Матеріал для уроку

LMS платформа WeStudy може бути місцем організації заняття за темою «налагодження коду з AI». Підготуйте вихідну умову, інструкцію до власної спроби та окремий викладацький ключ. Для опрацювання пошуку максимального значення важливо визначити доступні опори до початку роботи. Конкретні можливості подання матеріалу та зворотного зв’язку перевірте у своєму навчальному середовищі, коли перевіряється допустимий початковий кандидат максимуму.


У матеріалах WeStudy для розбору пошуку максимального значення доречно залишити початковий фрагмент, прийняту редакцію та контрольну умову. Викладачеві потрібне пояснення власного вибору щодо пошуку максимального значення, а не тільки завершений файл чи довга історія чату. У наступному завданні змініть зовнішні дані та перевірте ту саму навчальну дію з меншою підтримкою.


FAQ

Чи потрібна готова відповідь на початку теми «налагодження коду з AI»?

Для пошуку максимального значення почніть із власного прогнозу або фрагмента. Зразок використовуйте після спроби для аналізу конкретної відмінності. Якщо вивчаєте вже готовий приклад, прямо назвіть його навчальну роль і залиште іншу умову для власного продовження, коли перевіряється допустимий початковий кандидат максимуму. Самостійна дія щодо пошуку максимального значення повинна бути видимою окремо від роботи помічника.


Як діяти, коли пояснення пошуку максимального значення суперечливе?

Поверніться до прийнятої умови та знайдіть першу розбіжність. Для пошуку максимального значення запишіть конкретне питання й матеріал, що дозволяє його перевірити. Джерело правила, ручна перевірка або розбір викладача мають відповідати саме сумнівній тезі. Кількість відповідей AI щодо пошуку максимального значення сама по собі не визначає, яка з них обґрунтована.


Як зменшити допомогу під час практики пошуку максимального значення?

Залиште одну коротку опору та запропонуйте виконати наступний крок. Якщо власне продовження пошуку максимального значення вдається, приберіть опору в новому близькому випадку. Якщо ні, уточніть, що саме не зрозуміло. Повернення до конкретної труднощі щодо пошуку максимального значення корисніше за випадкове збільшення кількості готових прикладів.


Що зберегти після заняття за темою «налагодження коду з AI»?

Для пошуку максимального значення достатньо власної початкової спроби, прийнятого рішення, причини зміни та нового контрольного випадку. Такий запис дозволяє відновити потрібну дію без читання всієї розмови. Висновок про пошуку максимального значення обмежте перевіреною властивістю; ширший результат потребує інших власних проб із визначеними умовами.


Джерела та додаткове читання

Ваш наступний крок

Спробуйте Westudy безкоштовно

Від першої ідеї до власної онлайн-школи. Створюйте, навчайте та розвивайте свій проєкт разом із WeStudy.

Розпочати безкоштовно

30днів безкоштовно

Доступ до всіх функцій безкоштовно на 30 днів