одиниця 5 / 12

Налагодження та усунення несправностей

Прибуток:

  • Здатність ефективно описати помилку ШІ за допомогою повідомлення про помилку, трасування стека та найменшого екземпляра відтворення
  • Можливість запускати систематичний потік налагодження за допомогою штучного інтелекту, щоб знайти першопричину, висунувши гіпотезу та звужуючи її крок за кроком
  • Можливість перевірити, чи виправлення, запропоноване штучним інтелектом, справді вирішило проблему шляхом відтворення та регресійного тестування

Налагодження — це завдання з'ясувати, чому програма поводиться не так, як очікувалося, і виправити це, і це забирає багато часу більшості інженерів. Гарне усунення несправностей базується не на грі вгадування, а на систематичному звуженні: уточніть симптом, висуніть гіпотезу, перевірте гіпотезу, дійдіть до першопричини. ШІ є дуже потужним партнером у цьому циклі; Але тільки якщо ви дасте йому правильну інформацію. Сказати «код не працює, виправте це» змушує штучний інтелект здогадуватися та робити загальні пропозиції. Надайте йому повне повідомлення про помилку, трасування стека та найменший зразок відтворення, і разом ви знайдете першопричину.

У цьому розділі ми побачимо, як ефективно описати помилку ШІ, поетапно звузити гіпотези та перевірити за допомогою регресійного тестування, що запропоноване виправлення дійсно вирішує проблему. Пам’ятайте: «виправлення» помилки та «придушення ознаки помилки» — це дві різні речі; Виправлення, зроблене без виявлення першопричини, переносить помилку в інше місце.

Поняття: трасування стека: дамп, що показує, які функції викликалися в якому порядку під час виникнення помилки. Мінімальне відтворення: найпростіший, найкоротший код/введення, що викликає помилку. Основна причина: справжнє джерело проблеми, а не симптом. Регресійне тестування: тестування, яке гарантує, що та сама помилка не повторюється.

Опис помилки для ШІ

Імовірність того, що ШІ знайде першопричину, прямо пропорційна якості наданої вами інформації. Хороший опис помилки містить: те, що ви намагалися зробити, що ви очікували, що сталося, точний текст помилки та трасування стека, використаний код, середовище (мова/версія/ОС) і найменший зразок, який викликав помилку.

  1. Уточніть симптом. У форматі «Очікуваний X, актуалізований Y».
  2. Вставте повний текст помилки та трасування стека. Не скорочуйте його, цензуруйте, але не порушуйте структуру.
  3. Дайте найменшу репродукцію. Мінімальний вхід і код, який викликає помилку.
  4. Укажіть середовище. Мовна версія, бібліотечна версія, середовище виконання.

Підказка з ефективним описом помилки: «Я виправляю помилку. Інформація:– Що я намагаюся зробити: [X]– Очікувана поведінка: [Y]– Фактична поведінка: [Z]– Повне повідомлення про помилку та трасування стека: [вставити]– Середовище: [мова/версія, бібліотека/версія]– Мінімальний код, який використовується: [код] Не давайте мені прямого виправлення. Спочатку перелічіть 3 найімовірніші основні причини в порядку ймовірність і скажіть мені, яку перевірку перевірити для кожного».

Звуження потоку за гіпотезою

Систематичне налагодження — це мистецтво усувати можливості одну за одною. Використовуйте ШІ для створення гіпотез і плануйте експеримент для перевірки кожної гіпотези; Потім запустіть експеримент і поверніть результат. Цей цикл набагато швидший, ніж звичка вносити випадкові зміни та зупинятися, що називається «налагодженням рушниці».

Підказка допоміжного бінарного пошуку (розділу навпіл): «Цієї помилки не було вчора, вона є сьогодні. Я хочу дізнатися, які з останніх 20 змін привели до помилки з бісекцією. Дайте мені покроковий план: яку точку я маю перевірити, до якої половини мені слід перейти залежно від результату. Також скажіть мені, що саме перевіряти на кожному кроці».

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

Порада. Якщо ви не можете усунути помилку, найчастіше проблема полягає в тому, що ви неправильно припустили. Запитайте ШІ: «Яке моє припущення може бути помилковим?» Запитання розірве вашу сліпоту. Найважчі помилки ховаються в тому місці, де ви говорите "Я впевнений, що це працює правильно".

Слабка підказка / Сильна підказка

СЛАБКО: «Мій код видає помилку, виправте її: [200 рядків коду]» (Результат: штучний інтелект не знає, яка це помилка, що очікується; він дає загальні пропозиції, засновані на припущеннях, більшість із них марні.) СИЛЬНО: «Я отримую NullPointerException. Очікується: має бути повернуто список користувачів. Фактично: розгортається під час виклику getUsers(). Трасування стека: [вставити].Середовище: Java 17. Мінімальне повторення: це трапляється, коли список користувачів порожній, але не повний. Пов’язані 15 рядків: [код].

Потужне підказка поміщає помилку в контекст: у якому випадку вона трапляється (порожній список), у якому випадку не відбувається (повний список). Ця єдина підказка («трапляється, коли порожньо») майже прямо вказує на першопричину. Оскільки ця інформація недоступна в слабкому запиті, штучний інтелект робить припущення наосліп.

Перевірка виправлення

Виправлення є справжнім лише тоді, коли воно виконує три речі:

контроль

Питання

Як перевірити

Помилка зникла?

Чи працює той самий запис зараз?

Знову запустіть мінімальне відтворення

Немає нових помилок?

Ще щось зламано?

Запустіть весь набір тестів

Чи не повториться?

Чи повториться та сама помилка?

Додайте регресійний тест для цього сценарію

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

Міні-чохли

Випадок 1 — Пастка для придушення симптомів. Команда вимикає випадкову нульову помилку за допомогою try-catch; Помилка зникає, але через 2 тижні дані зникають. Справжня причина полягає в тому, що служба повертає нуль після тайм-ауту. Коли ви запитуєте штучний інтелект «чому він стає нульовим?», виявляється основна причина; Справжнє виправлення займає 1 годину, але є постійним.

Випадок 2 — Мінімальна потужність відтворення. Розробник не може виправити помилку, у якій написано, що "час від часу відбувається збій". Це зменшує помилку до найменшого введення за допомогою штучного інтелекту: проблема виникає лише з іменами файлів, які містять турецькі символи (помилка кодування). Коли 300 рядків невизначеності скорочуються до 5 рядків остаточного відтворення, рішення стає очевидним.

Випадок 3 — Антирегресійний тест. AI виправляє помилку обчислення дати. Інженера це не влаштовує; додає регресійний тест для помилкового сценарію (кінець місяця 31 січня + 1 місяць). Коли інша зміна торкається тієї самої області через 4 місяці, тест стає червоним, і помилка виявляється до того, як вона досягне виробництва.

Поширені помилки

  • Це означає «не працює, виправте». Без тексту помилки, очікування та відтворення, здогадки ШІ.
  • Не дає трасування стека. Трасування стека часто прямо вказує на першопричину.
  • Продовжуйте робити випадкові зміни. Експерименти без встановлення гіпотези витрачають час.
  • Придушення симптому та відсутність першопричини. Помилка відроджується деінде.
  • Не забезпечується виправлення за допомогою регресійного тестування. Така сама помилка мовчки повертається в майбутньому.

Підсумовуючи

Ефективне налагодження - це систематичне звуження, а не вгадування. Надання штучному інтелекту повного тексту помилки, трасування стека, мінімального відтворення та інформації про середовище експоненціально збільшує шанси знайти першопричину. Використовуйте ШІ для створення гіпотез і плануйте експеримент для перевірки кожної гіпотези; Ви проводите експеримент. Вважайте виправлення «виконаним», лише коли ви побачите, що помилку зникло, нових помилок не з’явилося, і її захищено регресійним тестуванням.

Аплікаційне завдання

Розглянемо справжню чи штучну помилку. Спочатку зменшіть помилку до найменшого відтворення (у якому вході вона виникає, у якому ні). Використовуючи підказку ефективного рецепту помилок, попросіть штучного інтелекту надати 3 гіпотези першопричини та крок перевірки для кожної. Знайдіть першопричину, перевіряючи гіпотези одну за одною, виправте її, а потім напишіть і запустіть регресійний тест для цього сценарію, щоб показати, що помилку зникло і тест забезпечує захист.

контрольний список

  • [ ] Я пояснив симптом як "очікуваний проти реалізованого".
  • [ ] Я надав ШІ повний текст помилки та трасування стека.
  • [ ] Я зменшив помилку до найменшого відтворення.
  • [ ] Перевіряючи гіпотези одну за одною, я знайшов першопричину.
  • [ ] Замість того, щоб придушити симптом, я усунув першопричину.
  • [ ] Я додав і запустив регресійний тест для тієї самої помилки.