Что такое мутационное тестирование?
Mutation Testing — это тип тестирования программного обеспечения, в котором мы изменяем (меняем) определенные утверждения в исходном коде и проверяем, способны ли тестовые примеры найти ошибки. Это тип тестирования белого ящика, который в основном используется для модульного тестирования . Изменения в мутантной программе сохраняются крайне небольшими, поэтому это не влияет на общую цель программы.
Цель Mutation Testing — оценить качество тестовых случаев, которые должны быть достаточно надежными, чтобы не выполнять мутантный код. Этот метод также называется стратегией тестирования на основе ошибок, так как он включает в себя создание ошибки в программе.
Мутация была первоначально предложена в 1971 году, но потеряла пыл из-за высоких затрат. Теперь он снова набирает обороты и широко используется для таких языков, как Java и XML.
В этом уроке вы узнаете
- Что такое мутационное тестирование?
- Как выполнить мутационное тестирование?
- Как создавать мутантные программы?
- Что изменить в программе мутантов?
- Типы мутационного тестирования
- Оценка мутации:
- Преимущества мутационного тестирования:
- Недостатки мутационного тестирования:
Как выполнить мутационное тестирование?
Ниже приведены шаги для выполнения мутационного тестирования (мутационного анализа):
Шаг 1 : Ошибки вводятся в исходный код программы путем создания множества версий, называемых мутантами. Каждый мутант должен содержать одну ошибку, и цель состоит в том, чтобы заставить версию мутанта потерпеть неудачу, что демонстрирует эффективность тестовых случаев.
Шаг 2 : Контрольные примеры применяются к исходной программе, а также к программе мутанта. Пример теста должен быть адекватным, и она переделана , чтобы обнаружить ошибки в программе.
Step 3: Compare the results of an original and mutant program.
Step 4: If the original program and mutant programs generate the different output, then that the mutant is killed by the test case. Hence the test case is good enough to detect the change between the original and the mutant program.
Step 5: If the original program and mutant program generate the same output, Mutant is kept alive. In such cases, more effective test cases need to be created that kill all mutants.
How to Create Mutant Programs?
A mutation is nothing but a single syntactic change that is made to the program statement. Each mutant program should differ from the original program by one mutation.
Original Program | Mutant Program |
---|---|
If (x>y)
Print «Hello» Else Print «Hi» |
If(x<y)
Print «Hello» Else Print «Hi» |
What to change in a Mutant Program?
There are several techniques that could be used to generate mutant programs. Let’s look at them
Operand replacement operators | Expression Modification Operators | Statement modification Operators |
---|---|---|
Replace the operand with another operand (x with y or y with x) or with the constant value. | Replace an operator or insertion of new operators in a program statement. | Programmatic statements are modified to create mutant programs. |
Example-
If(x>y) replace x and y values If(5>y) replace x by constant 5 |
Example-
If(x==y) We can replace == into >= and have mutant program as If(x>=y) and inserting ++ in the statement If(x==++y) |
Example-
Delete the else part in an if-else statement Delete the entire if-else statement to check how a program behaves Some of sample mutation operators:
|
Automation of Mutation Testing:
Мутационное тестирование чрезвычайно трудоемко и сложно выполнить вручную. Чтобы ускорить процесс, желательно использовать инструменты автоматизации. Инструменты автоматизации также снижают стоимость тестирования.
Список доступных инструментов —
Типы мутационного тестирования
В программной инженерии тестирование на мутации можно разделить на три типа: мутация операторов, мутация решений и мутация значений.
- Мутация оператора — разработчик вырезает и вставляет часть кода, результатом которого может быть удаление некоторых строк
- Value Mutation — значения первичных параметров изменены
- Решение Мутация — операторы управления должны быть изменены
Оценка мутации:
Показатель мутации определяется как процент убитых мутантов от общего количества мутантов.
- Оценка мутации = (убитые мутанты / общее количество мутантов) * 100
Тестовые случаи соответствуют мутациям, если оценка составляет 100%. Экспериментальные результаты показали, что мутационное тестирование является эффективным подходом для измерения адекватности тестовых случаев. Но главный недостаток заключается в высокой стоимости генерации мутантов и выполнения каждого тестового примера для этой программы мутантов.
Преимущества мутационного тестирования:
Ниже приведены преимущества мутационного тестирования:
- Это мощный подход для достижения высокого охвата исходной программы.
- Это тестирование способно всесторонне протестировать мутантную программу.
- Мутационное тестирование обеспечивает хороший уровень обнаружения ошибок разработчику программного обеспечения.
- Этот метод раскрывает неоднозначности в исходном коде и способен обнаруживать все ошибки в программе.
- Клиенты получают выгоду от этого тестирования, получая самую надежную и стабильную систему.
Недостатки мутационного тестирования:
С другой стороны, ниже перечислены недостатки тестирования мутантов:
- Тестирование на мутации является чрезвычайно дорогостоящим и трудоемким, так как существует множество мутантных программ, которые необходимо создать.
- Так как это отнимает много времени, можно сказать, что это тестирование невозможно без инструмента автоматизации.
- У каждой мутации будет то же количество тестовых случаев, что и у исходной программы. Таким образом, большое количество мутантных программ, возможно, потребуется протестировать с использованием исходного набора тестов.
- Поскольку этот метод включает в себя изменения исходного кода, он совсем не применим для тестирования черного ящика .
Вывод:
Хотите исчерпывающее тестирование своего приложения? Ответ — мутационное тестирование. Это самая полная методика тестирования программы. Это метод, который проверяет эффективность и точность программы тестирования для обнаружения неисправностей или ошибок в системе.