AI-генерация тестов может создавать ложное чувство безопасно
Гипотетическая ситуация: вы попросили ИИ написать тесты для функции расчёта скидки. Он сгенерировал десять тест-кейсов, все они успешно проходят, а покрытие кода выросло с 40% до 95%. Выглядит отлично. Но давайте посмотрим на один из тестов.
const calculateDiscount = (price: number, discount: number) => price - price * (discount / 100);
test(‘calculates discount’, () => { expect(calculateDiscount(100, 10)).toBe(90); });
Тест корректный, вот только он ничего не говорит о том, что произойдёт, если скидка будет отрицательной, больше 100% или цена окажется нулевой. И если ИИ сгенерировал остальные тесты по тому же принципу, у нас может быть почти стопроцентное покрытие при довольно слабой проверке поведения.
Я сталкивалась с такими проблемами уже несколько раз, с самого начала использования иишки для тестов. Проблема в том, что coverage показывает, какой код выполнялся во время тестов, а не насколько хорошо мы проверили его корректность. Кроме того, ИИ часто опирается на существующую реализацию. Если в ней уже есть ошибка, модель может написать тест, который закрепит неправильное поведение как ожидаемое. Например, функция ошибочно разрешает скидку 150%, а сгенерированный тест проверяет, что результат равен −50. Тест проходит, хотя бизнес-логика явно требует дополнительной проверки. Поэтому не стоит оценивать качество AI-тестов только по их количеству и проценту покрытия, лучше проверьте:
• Есть ли тесты на граничные и некорректные значения? • Проверяются ли требования, а не просто повторяется текущая реализация? • Упадёт ли тест, если намеренно внести ошибку в код? • Есть ли проверки негативных сценариев?
Последний вопрос про намеренное внесение ошибок — основа mutation testing. Инструмент изменяет код небольшими способами, например заменяет > на >=, и проверяет, заметят ли это тесты.
ИИ 100% сильно ускоряет написание тестов, но принимать сгенерированные проверки без анализа — примерно то же самое, что принимать сгенерированный код без ревью.
Ребята, обязательно заходите в мой тг: https://t.me/ira_pro_it Пока что я дублирую сюда все, но скоро там будут отдельные рубрики, которые больше не попадут никуда 🩷
· 3 ч
да, это пойнт хороший-известный - но здесь удачно сформулирован к тому же - если в коде не обрабатываются какие-то кейсы, то генерить тесты строго по нему - это фактически дублировать этот самый код
к сожалению это даже без участия ИИ, прямо в головах у нас разработчиков так сидит порой - а потом смотришь МР исправляющий и код и тесты - потому что неправильная логика была покрыта тестом, подтверждающим эту самую неправильную логику.
грустный вывод: в идеале создание тестов желательно абстрагировать от кода, хотя это и вызывает необходимость думать головой (ну или хотя бы процессить требования с помощью ИИ)
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 2 ч
Идеальный вариант это вообще test first подход - сначала определить нужное поведение, и затем уже писать код)) но это уже из разряда фантастики конечно
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён