Ответ
Мутационное тестирование — это метод оценки качества модульных тестов путем внесения небольших, синтаксически корректных изменений (мутаций) в исходный код и проверки, обнаруживают ли эти изменения существующие тесты.
Как работает:
- Создание мутантов: Инструмент автоматически вносит изменения в код (например, заменяет операторы, изменяет значения).
- Запуск тестов: Для каждого мутанта выполняется набор тестов.
- Анализ результата:
- Если тесты падают — мутант убит (тесты эффективны).
- Если тесты проходят — мутант выживает (это указывает на возможную недостаточность тестового покрытия).
Пример мутации в Java:
// Исходный код
public int add(int a, int b) {
return a + b;
}
// Мутант (замена оператора)
public int add(int a, int b) {
return a - b; // Мутация
}
Если тесты для метода add не проваливаются на этом мутанте, значит они не проверяют корректность именно операции сложения.
Популярные инструменты: Pitest (Java), Stryker (.NET, JavaScript).
Преимущества:
- Выявляет слабые, неэффективные тесты (которые проходят, но не проверяют логику).
- Помогает найти недостижимый или избыточный код.
Недостатки:
- Высокие вычислительные затраты (генерируется и проверяется множество мутантов).
- Может создавать эквивалентные мутанты (которые семантически не меняют поведение программы), что приводит к ложным срабатываниям.