AI For Test Generation: Where It Helps And Where It Lies
ИИ пишет тесты быстро. Но он также пишет тесты, которые выглядят правдоподобно, но проверяют не то.
Вы вставляете функцию в ИИ. Через тридцать секунд у вас уже есть двенадцать проходящих тестов. Показатель покрытия растет. Вы чувствуете себя продуктивным.
А затем в продакшене вылетает баг. Вы смотрите на эти двенадцать тестов и понимаете, что ни один из них его бы не поймал.
ИИ протестировал то, что ваш код делает, а не то, что он должен делать.
ИИ полезен, но вы должны знать, как им пользоваться.
Where AI wins:
- Генерация шаблонного кода (boilerplate), такого как блоки setup и teardown.
- Написание повторяющихся фабричных хелперов и объектов данных.
- Создание множества вариаций одного удачного паттерна теста.
- Обработка очевидных граничных случаев, таких как null, пустые строки или ноль.
Where AI fails:
- Тесты, привязанные к реализации: он пишет тесты, которые следуют структуре кода, а не бизнес-логике. Если вы проведете рефакторинг, тесты сломаются, даже если результат останется верным.
- Поверхностные граничные случаи: он находит очевидные ошибки, но пропускает специфичные для предметной области баги. Он не знает о нюансах ваших часовых поясов, ограничениях базы данных или ваших специфических бизнес-правилах.
- Хрупкие моки: он мокает внутренние сервисы, которые должны оставаться реальными. Из-за этого тесты становится сложно поддерживать, и они легко ломаются при рефакторинге.
How to use AI without creating "test theater":
- Сначала определите контракт. Напишите одно предложение простым языком о том, что должен доказать тест. Пример: «Истекший срок действия кода должен возвращать исходную сумму».
- Передайте это предложение ИИ. Пусть ИИ пишет код, но за намерение отвечаете вы.
- Мокайте только на границах. Используйте реальные экземпляры для внутренних модулей. Мокайте только внешние API или базы данных.
- Напишите один граничный случай предметной области вручную. ИИ справляется с «очевидными» случаями. Вы же должны обрабатывать те самые «ночные» граничные случаи, которые на самом деле приводят к инцидентам в продакшене.
Не позволяйте ИИ решать, что именно проверяет тест. Используйте его для написания кода, но логику предоставляйте вы.
Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm
