⚛️
Мутационное тестированиеОсновная идея мутационного тестирования:Пробуем изменить код и смотрим, проходят ли после этого тесты.
Обычно применяется к unit тестам.
Если тесты прошли, то:1) данный код не покрыт тестами
или
2) в тестах не учтена данная область
Мутационное тестирование состоит в выборе мутирующих операторов и применения их одного за другим к каждому фрагменту исходного кода программы.
Результат одного применения мутационного оператора к программе называется
мутантом. Если набор тестов способен обнаружить изменение (то есть один из тестов не проходит), то мутант называется убитым.
Например, есть код на C++:
if (a & & b) {
c = 1;
} else {
c = 0;
}
Оператор мутации условий заменит & &(и) на || (или), и создаст следующий мутант:
if (a || b) {
c = 1;
} else {
c = 0;
}
Для того, чтобы тест мог убить этого мутанта, необходимо чтобы были выполнены следующие условия:
1️⃣Тест должен достигнуть (Reach) мутированного оператора.
2️⃣Входные данные теста должны привести к разным состояниям программы-мутанта и исходной программы. Например, тест с a = 1 и b = 0 приведет к этому.
3️⃣Значение переменной c должно повлиять на вывод программы и быть проверено тестом.
Данные условия вместе называются
RIP моделью.
Слабое мутационное тестирование (или слабое мутационное покрытие) требует выполнение только первых двух условий.
Сильное мутационное тестирование требует выполнение всех трех условий и гарантирует что набор тестов в действительности может обнаружить изменение. Слабое мутационное тестирование тесно связано с методами покрытия кода.
🙂😜 вот такие они, мутанты в тестировании💡
#виды_тестирования
@testorest