Что ИИ в тестировании ПО действительно изменил

  • Написание тестов перестало быть узким местом. Раньше основная часть работы состояла в том, чтобы перевести известное поведение в код теста. Сейчас это почти ничего не стоит, и ограничением становится решение о том, что вообще должно быть верным.

  • Тот, кто чинит, часто не человек. Когда падение разбирает агент, пишущий код, формат вывода важнее дашборда. Скриншот больше не считается результатом.

Что не изменилось

Решение о том, что считать правильным

  • По-прежнему продуктовое суждение. Ни одна модель не знает, что обещает ваш бизнес.

Тестовые данные и окружения

  • По-прежнему самая скучная и самая частая причина, по которой падают наборы тестов.

Нестабильность тестов

  • Адаптивное выполнение снимает хрупкость селекторов. Нестабильное окружение остаётся нестабильным.

Что стало сложнее

Объём кода вырос, а способность его ревьюить — нет. Это и есть настоящий кризис, стоящий за нынешним интересом к ИИ в тестировании ПО, и он не решается генерацией ещё большего числа тестов. Он решается независимой проверкой поведения: тесты, порождённые из тех же допущений, что и код, всегда согласуются с кодом.

Второй новый риск тоньше: агент, которому поручено добиться прохождения проверки, может удовлетворить саму проверку, а не починить продукт. Размытые проверки этому способствуют. Конкретные и опровержимые — нет.

Привычка, которую стоит завести

Намеренно сломайте что-нибудь и убедитесь, что проверка загорелась красным. Это займёт минуту и это единственное доказательство того, что проверка — сгенерированная или написанная руками — вообще связана с вашим продуктом.

Метрика, которая вводит в заблуждение быстрее всех

Процент покрытия всегда был несовершенным косвенным показателем, а генерация сломала его окончательно — и это важно, потому что именно по нему до сих пор отчитывается большинство команд.

Эта цифра измеряет, какие строки были выполнены. Она никогда не измеряла, было ли проверено что-то осмысленное, а при массовой генерации тестов разрыв резко растёт: легко получить набор, который затрагивает девяносто процентов кода и почти ничего значимого не утверждает. Покрытие растёт, график выглядит хорошо, а количество пропущенных дефектов не меняется.

Две метрики, у которых этой проблемы нет: какая доля дефектов найдена до релиза и сколько времени проходит от падения до исправления. Ни одну из них нельзя накрутить, написав больше тестов, обе сдвигаются, когда что-то улучшается по-настоящему, и обе сложнее собирать — именно поэтому команды продолжают отчитываться покрытием.

С чего начать

Терминал

npm install -g @testsprite/testsprite-cli
testsprite setup

Дашборд закрывает то же самое для тех, кто не хочет ничего ставить локально, а полный набор команд описан в репозитории CLI.

Если пайплайном владеет другая команда, GitHub App — путь наименьшего сопротивления: это вебхук, он ничего не меняет в вашем репозитории и срабатывает, когда ваша сборка сообщает, что новая версия развёрнута. Если же вы хотите видеть проверку прямо в репозитории, то шаг GitHub Actions делает именно это.

Что TestSprite делает с той частью, которая стала сложнее

Именно под проблему объёма это и построено. Покрытие генерируется из вашего продукта, а не пишется вручную, поэтому оно не конкурирует за инженерное время с работой над функциональностью и запускается на каждое изменение, а не тогда, когда кто-то о нём вспомнит.

Проблема независимости решается тем, где находится проверка. Она прогоняет развёрнутое приложение против описанного вами поведения, а не против собственных допущений кода, — именно это делает её информативной, когда и реализация, и её юнит-тесты пришли от одного и того же агента.

Что не изменилось — не изменилось и здесь: вы по-прежнему решаете, что считать правильным, а тестовые данные и окружения по-прежнему на вас. Выигрыш в том, что покрытие перестаёт отставать от скорости, с которой появляется код.

Заменит ли ИИ тестировщиков?

Он заменяет механическую половину работы. Решать, что считать правильным, и думать о злоупотреблениях с позиции атакующего становится не менее, а более ценным.

Можно ли доверять сгенерированным тестам?

Насчёт структуры и статусов — по большей части да. Насчёт того, верное ли значение, они наследуют те же допущения, что и код, поэтому их нужно проверять.

Значит ли это, что тестов станет меньше?

Обычно покрытия становится больше, а написанных вручную тестов — меньше. Ваше внимание смещается с написания на проверку.

В чём главная ошибка команд?

Измерять покрытие вместо пропущенных дефектов. С генерацией покрытие растёт сразу и говорит очень мало.

Где человеческое суждение по-прежнему важнее всего?

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

Коротко

Писать тесты стало дёшево. Решать — нет.

ИИ в тестировании ПО убрал узкое место написания тестов и изменил то, кто разбирает падения. Решение о том, что считать правильным, тестовые данные и стабильность окружений не изменились, а новый риск — проверка, которую агент может удовлетворить, ничего не починив.