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":

  1. Сначала определите контракт. Напишите одно предложение простым языком о том, что должен доказать тест. Пример: «Истекший срок действия кода должен возвращать исходную сумму».
  2. Передайте это предложение ИИ. Пусть ИИ пишет код, но за намерение отвечаете вы.
  3. Мокайте только на границах. Используйте реальные экземпляры для внутренних модулей. Мокайте только внешние API или базы данных.
  4. Напишите один граничный случай предметной области вручную. ИИ справляется с «очевидными» случаями. Вы же должны обрабатывать те самые «ночные» граничные случаи, которые на самом деле приводят к инцидентам в продакшене.

Не позволяйте ИИ решать, что именно проверяет тест. Используйте его для написания кода, но логику предоставляйте вы.

Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm