AI For Test Generation: Where It Helps And Where It Lies

ШІ для генерації тестів: де він допомагає, а де обманює

ШІ пише тести швидко. Але він також пише тести, які виглядають справжніми, проте перевіряють не те.

Ви вставляєте функцію в ШІ. Через тридцять секунд у вас є дванадцять тестів, що проходять. Показник покриття зростає. Ви відчуваєте себе продуктивним.

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

ШІ протестував те, що ваш код робить, а не те, що він має робити.

ШІ корисний, але ви повинні знати, як ним користуватися.

Де ШІ перемагає:

  • Генерація шаблонного коду (boilerplate), такого як блоки setup та teardown.
  • Написання повторюваних хелперів-фабрик та об'єктів даних.
  • Створення багатьох варіацій одного вдалого тестового шаблону.
  • Обробка очевидних граничних випадків, таких як null, порожні рядки або нуль.

Де ШІ зазнає невдачі:

  • Тести, засновані на реалізації: він пише тести, які повторюють структуру коду замість бізнес-логіки. Якщо ви проведете рефакторинг коду, тести зламаються, навіть якщо результат залишиться правильним.
  • Поверхневі граничні випадки: він знаходить очевидні помилки, але пропускає баги, специфічні для вашої предметної області. Він не знає про особливості ваших часових поясів, обмеження вашої бази даних або ваші специфічні бізнес-правила.
  • Крихкі моки (mocks): він створює моки для внутрішніх сервісів, які мають залишатися реальними. Це ускладнює підтримку тестів і робить їх вразливими до рефакторингу.

Як використовувати ШІ, не створюючи «театральщини з тестами»:

  1. Спочатку визначте контракт. Напишіть одним реченням простою мовою, що саме має довести тест. Приклад: «Протермінований код має повертати початкову суму».
  2. Передайте це речення ШІ. Нехай ШІ пише код, але ви повинні контролювати мету (intent).
  3. Мокайте лише на межі системи. Використовуйте реальні екземпляри для внутрішніх модулів. Мокайте лише зовнішні API або бази даних.
  4. Напишіть один граничний випадок предметної області вручну. ШІ справляється з «очевидними» межами. Ви ж повинні опрацювати ті «тригодинні» випадки, які насправді спричиняють інциденти в продакшені.

Не дозволяйте ШІ вирішувати, що саме перевіряє тест. Використовуйте його для написання коду, але логіку забезпечуйте ви.

Джерело: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm