Как оценить способность набора ручных тестов обнаруживать ошибки, если в текущей версии продукта нет известного дефекта?
Используйте мутационное тестирование: внесите в тестовую версию продукта небольшие контролируемые изменения, имитирующие типовые ошибки, и проверьте, обнаруживает ли их существующий набор ручных тестов. Если тесты выявляют изменение, мутант считается обнаруженным; если продукт продолжает считаться корректным, мутант выживает и показывает пробел в проверках.
Обычная проверка показывает, что тесты находят конкретные дефекты, но не отвечает, насколько хорошо они обнаруживали бы другие ошибки. Мутационное тестирование появилось как способ оценивать не только факт выполнения тестов, но и их способность отличать корректное поведение от правдоподобно ошибочного.
В ручном тестировании этот подход применяют ограниченно: изменения создают в отдельной сборке или тестовой среде, а затем проверяют их целевыми сценариями. Это особенно полезно при оценке критичных регрессионных наборов.
Набор тестов может проходить полностью и при этом не проверять важный результат. Например, тест подтверждает, что форма отправлена, но не замечает неверный расчёт суммы или потерю данных.
Без искусственно внесённых изменений трудно отличить действительно сильный набор проверок от набора, который просто успешно выполняется на текущей версии. Ошибочный вывод создаёт ложную уверенность и может привести к сокращению регрессии без достаточных оснований.
Сначала определяют типовые риски и выбирают небольшие изменения, каждое из которых имитирует одну возможную ошибку: неверный знак сравнения, пропуск обязательного условия, неправильный расчёт, игнорирование пустого значения или ошибочный переход состояния. Изменение должно быть изолированным, чтобы было понятно, какой тест его обнаружил.
Затем для каждого изменения формируют ожидаемое наблюдаемое последствие и запускают релевантные ручные проверки. Если тестировщик фиксирует расхождение с ожидаемым поведением, мутант «убит». Если все проверки проходят и изменение не замечено, мутант «выжил»; нужно проанализировать, отсутствует ли проверка, недостаточно ли точен ожидаемый результат или изменение не проявляется в выбранных данных.
Оценивают не только долю обнаруженных мутантов. Важнее понять, какие выжившие изменения затрагивают критичный бизнес-риск и требуют добавления или уточнения тестов. Один тест с высокой формальной эффективностью не заменяет покрытие требований, состояний, негативных сценариев и интеграционных рисков.
У подхода есть ограничения. Искусственная ошибка может быть нереалистичной или не приводить к наблюдаемому отличию — такой случай называют эквивалентным мутантом. Полный перебор дорог, поэтому для ручной проверки выбирают ограниченное число осмысленных мутаций, автоматизируют подготовку сборок, а ручные тесты используют для оценки наиболее рискованных областей.
Перед релизом команда имела стабильный регрессионный набор для расчёта стоимости заказа. Все тесты проходили, но было неизвестно, проверяют ли они отдельные правила скидок и округления.
Рассматривались три варианта. Можно было просто увеличить число позитивных сценариев, но это не показывало бы, способны ли тесты обнаруживать конкретные ошибки. Можно было ждать реальных дефектов после релиза, однако цена такого эксперимента была высокой. Третий вариант — подготовить несколько тестовых сборок с контролируемыми изменениями в расчёте и проверить их вручную.
Выбрали третий вариант и внесли отдельные изменения: пропуск скидки при граничной сумме, неверное округление и применение скидки дважды. Набор обнаружил пропуск скидки и двойное применение, но не выявил ошибочное округление. В результате уточнили ожидаемый результат теста и добавили данные, чувствительные к правилам округления. Это повысило диагностичность регрессии, хотя не доказало отсутствие всех возможных дефектов.
1. Достаточно ли высокого процента обнаруженных мутантов, чтобы считать набор тестов качественным?
Нет. Процент зависит от выбранных мутаций и может быть высоким даже при отсутствии проверок критичного сценария. Нужно анализировать выжившие мутанты по риску, а также сопоставлять результат с требованиями, пользовательскими потоками и известными типами дефектов.
2. Почему выживший мутант не всегда означает пропущенный дефект в тестах?
Изменение может быть эквивалентным исходной реализации с точки зрения наблюдаемого поведения или не затрагивать выбранные входные данные. Поэтому сначала проверяют, действительно ли мутант должен был изменить внешний результат. Только после этого делают вывод о пробеле в тест-дизайне или в формулировке ожидаемого результата.
3. Можно ли применять мутационное тестирование только к ручным тестам?
Да, но стоимость будет выше, поскольку выполнение и анализ каждой проверки требуют участия тестировщика. На практике метод применяют выборочно: для критичных требований, недавно изменённых областей и небольшого набора характерных ошибок. Он дополняет, а не заменяет обычное функциональное, регрессионное и исследовательское тестирование.