Не всегда тесты проверяют корректные программы. Иногда они проверяют код, специально сделанный с ошибками. Все, что Вы хотели знать о мутантах в тестировании, но боялись спросить, – в нашей статье.
Не всегда тесты проверяют корректные программы. Иногда они проверяют код, специально сделанный с ошибками. Все, что Вы хотели знать о мутантах в тестировании, но боялись спросить, – в нашей статье.
Оглавление
ToggleТестировщик (QA-специалист) должен заботиться о том, чтобы его тесты могли находить максимально возможное количество дефектов. Программисты могут ошибаться, тестирование помогает исправлять их ошибки. Но как проверить, не пропустит ли случайно тест ошибки в очередной версии ПО?
Для ответа на такой вопрос применяется концепция мутационного тестирования. Тесты проверяются на версии программы, которая заведомо содержит ошибку. Если тесты ее выявляют – значит, им можно доверять.
Мутационное тестирование (Mutation testing) – метод тестирования программного обеспечения, который проверяет действенность разработанных тестов при незначительных изменениях в коде.
Версия ПО с такими изменениями называется мутантом (Mutant). Если тесты обнаруживают мутанта – значит, они эффективны. Если нет – значит, их надо переделать или дополнить.
Подход Mutation testing был предложен в 1971 году Ричардом Липтоном. Завершенная концепция мутационного тестирования была доработана и опубликована им же совместно с ДеМиллом и Сейвардом.
Первая реализация Mutation testing была создана Тимоти Баддом в 1980 году и называлась «Мутационный анализ».
Mutation testing используется следующим образом. Допустим, у нас есть корректная версия ПО. Исследователь меняет одно место в коде так, как это мог бы случайно сделать программист, например – вместо точки с запятой поставить двоеточие, или вместо переменной «а» записать переменную «b». В итоге получился код-мутант.
Тестировщик прогоняет мутанта через батарею тестов. Если хотя бы один из тестов обнаруживает дефект – мутант считается убитым (Killed mutant). Если нет – то мутант считается убежавшим (Escaped) или выжившим (Survived). В идеале тесты должны «убить» всех мутантов. Наличие убежавших/выживших мутантов – причина еще раз проанализировать тесты на их покрытие.
Все зависит от языка программирования. Чаще используют замены переменных и логические перестановки, но могут быть и специфические мутации. Примеры преобразований кода для создания мутантов:
В Mutation testing, чтобы признать тест результативным, считается необходимым выполнить три условия (правило RIP по первым буквам их названий):
В названии правила RIP для мутантов нетрудно заметить аллюзию на сокращение «R.I.P.» (Rest in peace, т.е. «покойся с миром») – еще один образец экстравагантного юмора в тестировании.
КВМ = (В / С) * 100%, где С – количество созданных мутантов, В – количество выявленных мутантов.
Мутационное тестирование — это тестирование ПО методом белого ящика, когда в код намеренно вносят ошибки и проверяют на нем действенность тестов. Такие версии кода называют мутантами. Чем больше мутантов выявят тесты – тем лучше покрытие и качество самих тестов.
Автор Михаил Кулешов
Михаил, профессиональный партнерский маркетолог, является основателем компании South Media OÜ, которая была создана в 2018 году и базируется в Таллинне. С 2016 года Михаил уехал из Финляндии и жил как настоящий «цифровой кочевник» в IT-индустрии, путешествуя по миру только с ноутбуком. Михаил работает и пишет статьи, связанные с IT-индустрией.
© Copyright 2023 Testirovshik.com