Мутаційне тестування коду, написаного агентами
Тестові набори, згенеровані LLM, можуть досягати 100% покриття рядків і розгалужень, проте нещодавнє дослідження показує, що вони набирають лише 4% у мутаційному тестуванні, що виявляє прогалину в надійності, яку розробники можуть пропустити під час оглядів спринтів.
Дослідники оцінили тестові набори, створені кодувальними агентами на базі великих мовних моделей, за допомогою бенчмарка HumanEval-Java. Один із наборів покривав кожен рядок коду та охоплював кожну умовну гілку. Коли той самий набір пройшов мутаційне тестування — техніку, яка впроваджує невеликі помилки, щоб перевірити, чи виявлять їх тести, — він виявив лише крихітну частку впроваджених багів.
Покриття виглядає непогано, але що воно означає насправді?
Традиційні метрики покриття підраховують, скільки операторів або розгалужень виконує тест. Команди люблять високі показники під час демо спринтів. Однак ця метрика нічого не говорить про те, чи провалилися б тести, якби код був неправильним. Мутаційне тестування заповнює цю прогалину, навмисно вносячи помилки (мутанти) та вимірюючи відсоток тих мутантів, що призводять до провалу тесту — так називається «mutation score».
У дослідженні набір із 100% покриття пропустив майже кожного мутанта, включаючи прості логічні помилки, такі як неправильна обробка дат високосного року. Мутаційний скор у 4% означає, що цей набір виявить лише кілька реальних багів.
Чому це важливо для розробки за допомогою ШІ
- Хибна впевненість: розробники можуть довіряти тестовому набору, який на папері виглядає ідеальним.
- Приховані дефекти: багато багів залишаються непоміченими.
- Вартість виправлення: виправлення багів пізніше коштує набагато дорожче, ніж їх раннє виявлення.
Контраргумент: покриття не є марним
Покриття все ж таки вказує на те, чи виконуються шляхи коду, але воно не гарантує виявлення помилок.
На що звернути увагу далі
- Інтеграція інструментарію: впроваджуйте мутаційне тестування в CI-пайплайни.
- Покращення LLM: навчайте агентів генерувати тести, які «вбивають» мутантів.
- Галузеві рекомендації: впроваджуйте стандарти, що поєднують покриття з мутаційними скорами.
Висновок: Високих показників покриття від тестів, згенерованих ШІ, вже недостатньо для підтвердження якості; низький мутаційний скор свідчить про те, що тести можуть не виявити реальні баги, що спонукає розробників використовувати мутаційне тестування як захисний механізм.
