AI For Test Generation: Where It Helps And Where It Lies
ШІ для генерації тестів: де він допомагає, а де обманює
ШІ пише тести швидко. Але він також пише тести, які виглядають справжніми, проте перевіряють не те.
Ви вставляєте функцію в ШІ. Через тридцять секунд у вас є дванадцять тестів, що проходять. Показник покриття зростає. Ви відчуваєте себе продуктивним.
Потім у продакшені з'являється баг. Ви дивитеся на ці дванадцять тестів і розумієте, що жоден із них його б не виявив.
ШІ протестував те, що ваш код робить, а не те, що він має робити.
ШІ корисний, але ви повинні знати, як ним користуватися.
Де ШІ перемагає:
- Генерація шаблонного коду (boilerplate), такого як блоки setup та teardown.
- Написання повторюваних хелперів-фабрик та об'єктів даних.
- Створення багатьох варіацій одного вдалого тестового шаблону.
- Обробка очевидних граничних випадків, таких як null, порожні рядки або нуль.
Де ШІ зазнає невдачі:
- Тести, засновані на реалізації: він пише тести, які повторюють структуру коду замість бізнес-логіки. Якщо ви проведете рефакторинг коду, тести зламаються, навіть якщо результат залишиться правильним.
- Поверхневі граничні випадки: він знаходить очевидні помилки, але пропускає баги, специфічні для вашої предметної області. Він не знає про особливості ваших часових поясів, обмеження вашої бази даних або ваші специфічні бізнес-правила.
- Крихкі моки (mocks): він створює моки для внутрішніх сервісів, які мають залишатися реальними. Це ускладнює підтримку тестів і робить їх вразливими до рефакторингу.
Як використовувати ШІ, не створюючи «театральщини з тестами»:
- Спочатку визначте контракт. Напишіть одним реченням простою мовою, що саме має довести тест. Приклад: «Протермінований код має повертати початкову суму».
- Передайте це речення ШІ. Нехай ШІ пише код, але ви повинні контролювати мету (intent).
- Мокайте лише на межі системи. Використовуйте реальні екземпляри для внутрішніх модулів. Мокайте лише зовнішні API або бази даних.
- Напишіть один граничний випадок предметної області вручну. ШІ справляється з «очевидними» межами. Ви ж повинні опрацювати ті «тригодинні» випадки, які насправді спричиняють інциденти в продакшені.
Не дозволяйте ШІ вирішувати, що саме перевіряє тест. Використовуйте його для написання коду, але логіку забезпечуйте ви.
Джерело: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm
