
Разбор · Факты проверены 08.10.2026
Мутационное тестирование показывает, замечают ли тесты агента намеренно внесённую ошибку
Проверка тестов, которые написал тот же ИИ-агент, что и код. На учебном примере и поломках нашей машины. Опубликованного мутационного прогона и клиентского кейса этого метода у нас нет.
Текст подготовлен инженером, который ведёт vibecoding.ru, вместе с машиной агентов · факты проверены 8 октября 2026
Мутационное тестирование проверяет, краснеют ли зелёные тесты, когда код намеренно портят. Тест может выполнить строку и не заметить неверный результат.
Когда ИИ-агент пишет код и тесты к нему, оба могут повторить одно ошибочное понимание задачи. Руководителю нужен отчёт о том, какие нарушения бизнес-правила тесты обнаруживают.
Не хотите разбираться сами? Внедряем ИИ в ваш бизнес: задачи без лимита, одна цена в месяц, отмена в любой момент.
1. Зелёный прогон не проверяет, умеют ли тесты замечать ошибки.
Почему много тестов ещё не ответ? Каждый тест проверяет своё утверждение. Если он проверяет только наличие результата, неверная сумма может пройти незамеченной.
Повторяемость ответа модели ещё не гарантирует одинаковую правку агента при новом запуске.
На открытой странице машины 8 октября 2026 гейт описан как 2 685 тестов на каждом пуше и ревью. Это описание контура выпуска, а не результат проверки тестов мутациями.
При разборе технического долга тесты нужны как страховка перед правкой. Следующий вопрос к этой страховке: какое изменение поведения заставит её сработать?
Зелёные тесты, покрытие и мутации отвечают на разные вопросы
Документация Stryker и PIT, проверена 08.10.2026. Последняя колонка описывает вопросы приёмки, предложенные автором.
2. Одну мутацию проверяют неизменными тестами.
Как выглядит проверка на бизнес-правиле? Возьмём учебный пример: скидка положена при заказе от 10 000 ₽ включительно. В коде это сравнение суммы с порогом через «больше или равно».
Мутатор заменяет его на «больше». Заказ ровно на 10 000 ₽ теперь остаётся без скидки. Такая маленькая правка называется мутацией, а изменённая версия кода называется мутантом.
Тесты на суммы ниже и выше порога эту ошибку не поймают. Нужен тест ровно на границу, с ожидаемым результатом из требования.
Соседние суммы не обнаруживают пропущенную границу скидки
Учебная схема автора, 08.10.2026, не запущенный эксперимент. Тип замены границы описан в документации PIT.
На время прогона тесты фиксируют. Мутации применяют по одной в копии кода, которую не выпускают пользователям. Подгонка тестов под ошибку испортит измерение.
Ожидаемый результат нужно записать до прогона. Если скидка по ошибке задана «строго выше порога» и код с тестом согласны, мутатор не восстановит настоящее требование бизнеса.
3. Выжившую мутацию разбирают по причине.
Зелёные тесты не отличили изменённый код от исходного. Найдите причину в отчёте: просьба агенту «проверить внимательнее» её не объяснит.
У скидки не проверена граница. Другие причины: тесты не запускают код или мутация не меняет результат на допустимых входных данных.
Разные статусы требуют разных действий инженера
Официальные описания статусов Stryker и PIT, 08.10.2026. Действия в последней колонке предложены автором для приёмки.
Эквивалентная мутация сохраняет результат. Прибавление нуля и умножение на единицу дают ту же сумму: тест на их различие не защитит скидку.
Эквивалентность нужно объяснить. Исключив неудобную мутацию ради процента, можно скрыть пропущенную границу скидки.
4. Процент обнаруженных мутаций не равен доле найденных дефектов.
Общий mutation score Stryker учитывает мутации с упавшим тестом или таймаутом. В знаменателе все пригодные мутации, включая код без покрытия.
Возьмём учебный отчёт с 10 мутациями. Из них 6 заметили тесты, 1 закончилась таймаутом, 2 выжили и 1 не имела покрытия.
В учебном отчёте 70 % включают таймаут
Вымышленные данные автора для объяснения, 08.10.2026. Формула сверена с Stryker. Мутационный инструмент не запускался.
Ни 70 %, ни 100 % не обещают такую долю найденных дефектов. Прогон ограничен выбранными изменениями, пропущенное требование может в них не попасть.
Сравнивать следующие прогоны имеет смысл на одной области кода с одними правилами исключений. Если убрать из проверки проблемную функцию, процент вырастет без нового теста.
5. Поломка закрывает петлю, когда получает проверку повторения.
24 сентября 2026 тесты пропустили несовместимый ответ функции: тестовая среда обходила валидатор ответа. Сначала нужна проверка этого слоя.
Человек, который принимает результат, несёт ответственность за выпуск. После поломки он принимает тест, который падает на дефекте и проходит после исправления.
Каждая поломка получила проверку повторения
31.07
Поле обложки терялось на отдельных путях создания новости. Защита: общая передача полей и проверка её применения.
08.09
Защита от обрыва страницы принимала настоящий пустой ответ за сбой. Защита: тесты различают пустую выдачу и оборванный ответ.
24.09
Функция вернула поле, которого не было в валидаторе ответа. Защита: тест сверяет ответ с валидатором и падает без исправления.
Записи журналов vibecoding.ru по указанным датам, сверены 08.10.2026. Это регрессионные проверки, не мутационные прогоны.
В правилах для агентов проверка не даёт вернуть уже известное нарушение. Мутационное тестирование добавляет другой вопрос: какой ещё маленький дефект эта проверка пропустит?
6. Первый прогон нужен критичной функции, а не всему репозиторию.
Начните с функции, где ошибка меняет деньги или доступ. Подойдут расчёт скидки или права пользователя. Ожидаемое поведение запишите заранее.
Задача исполнителю должна включать ограниченную область и условия приёмки. Это та же постановка задачи агенту, только результатом служит доказательство силы тестов.
Инженер сначала проверяет, что исходные тесты проходят устойчиво. Если они падают сами по себе, красный результат после мутации ещё не объясняет, что именно обнаружено.
Шесть шагов проверки одной функции
Порядок проверки предложен автором по документации Stryker и PIT, 08.10.2026. Это план задачи, не наш исполненный прогон.
Принимайте отчёт, по которому можно повторить проверку. В нём нужны изменение кода и тест, заметивший его, а для выжившей мутации нужны объяснение и решение инженера.
Область проверки и исключения должны остаться видимыми. Скриншот с процентом не покажет, что расчёт скидки исчез из задания мутатору.
После доработки повторяют ту же мутацию. В учебном примере тест проходит на исходном правиле и падает после замены границы на «строго больше».
Отчёт принимают по воспроизводимым доказательствам
Критерии приёмки автора, 08.10.2026.
Если такой проверки пока нет, следующий шаг можно обсудить через страницу для руководителя. Нужна конкретная функция и её правило, а не обещание «улучшить тесты».
Если некому вести эту работу, проверку критичной функции можно поставить отдельной задачей в очередь агентной разработки. «Один проект» стоит 250 000 ₽ в месяц, один поток работы.
Цена проверена на /services 8 октября 2026. Это подписка на работу над проектом, а не цена разового мутационного аудита.
Что и как мы проверяли
| Факт | Что известно | Проверено |
|---|---|---|
| Механика и статусы | Официальная документация Stryker и PIT: мутации границы, реакция тестов, эквивалентность и результаты прогона. Формула общей метрики Stryker включает таймауты и код без покрытия. Совместимость с конкретным проектом здесь не проверялась | 2026-10-08 |
| Учебные числа | Порог скидки 10 000 ₽, соседние суммы и отчёт с 10 мутациями придуманы для объяснения. 70 % посчитаны как (6 + 1) / 10 × 100. Это не клиентские данные и не результат запущенного инструмента | 2026-10-08 |
| Наш опыт | Записи журналов vibecoding.ru от 31 июля, 8 и 24 сентября 2026 сверены по первичке. На живом /open гейт описан как 2 685 тестов на каждом пуше и ревью, снимок 8 октября. Число не пересчитывалось. Собственного опубликованного мутационного отчёта и клиентского кейса метода нет | 2026-10-08 |
| Цена существующей подписки | Живая /services, 8 октября: «Один проект», один продукт, один поток работы, 250 000 ₽ в месяц. В статье предложено поставить проверку функции в очередь, отдельный аудит по этой цене не обещается | 2026-10-08 |
7. Частые вопросы
Можно ли начать мутационное тестирование без автотестов?+
Сначала нужны тесты, которые выполняют выбранную функцию и проверяют её результат. Без них мутатор создаст изменённый код, но сравнивать его поведение будет нечем.
Нужен ли другой ИИ-агент, чтобы создавать мутации?+
Мутации может вносить обычный инструмент по заданным правилам. Второй агент может помогать разбирать отчёт, но ожидаемое поведение всё равно задаёт требование бизнеса.
Нужен ли мутационный прогон на каждый коммит?+
Частоту задают после первого замера времени и пользы. Вначале можно запускать проверку при правках выбранной критичной функции, затем расширять область по найденным пробелам.
Stryker подходит любому проекту?+
Инструмент выбирают под язык и тестовый раннер. StrykerJS предназначен для JavaScript и TypeScript, PIT для Java. Совместимость с конкретной сборкой проверяет инженер, название инструмента её не гарантирует.
Источники
- What is mutation testing? · Stryker (проверено 8 октября 2026) — официальная документация
- Mutant states and metrics · Stryker (проверено 8 октября 2026) — официальная документация
- Equivalent mutants · Stryker (проверено 8 октября 2026) — официальная документация
- StrykerJS configuration (проверено 8 октября 2026) — официальная документация
- PIT basic concepts (проверено 8 октября 2026) — официальная документация
- Открытая машина vibecoding.ru · описание гейта, 8 октября 2026; истории сверены по журналам — наша публичная страница
- Агентная разработка по подписке · тариф «Один проект», 8 октября 2026 — наша публичная страница
Запомнить
1. Зелёный прогон сообщает, что тесты прошли. Проверьте, падают ли они при нарушении критичного правила.
2. Начните с одной функции и требования, записанного отдельно от кода.
3. На время измерения зафиксируйте тесты и вносите мутации по одной.
4. Разбирайте выжившие изменения, таймауты и исключения отдельно от процента.
5. После нового теста повторите ту же мутацию и сохраните результат.