Мутационное тестирование

Не всегда тесты проверяют корректные программы. Иногда они проверяют код, специально сделанный с ошибками. Все, что Вы хотели знать о мутантах в тестировании, но боялись спросить, – в нашей статье.

Тестировщик » QA-блог » Методы » Мутационное тестирование

RIP: как убить мутанта в тестировании

Тестировщик (QA-специалист) должен заботиться о том, чтобы его тесты могли находить максимально возможное количество дефектов. Программисты могут ошибаться, тестирование помогает исправлять их ошибки. Но как проверить, не пропустит ли случайно тест ошибки в очередной версии ПО?

На изображение как убить мутанта в тестировании.

Для ответа на такой вопрос применяется концепция мутационного тестирования. Тесты проверяются на версии программы, которая заведомо содержит ошибку. Если тесты ее выявляют – значит, им можно доверять.

Что такое мутационное тестирование

Мутационное тестирование (Mutation testing) – метод тестирования программного обеспечения, который проверяет действенность разработанных тестов при незначительных изменениях в коде.

Версия ПО с такими изменениями называется мутантом (Mutant). Если тесты обнаруживают мутанта – значит, они эффективны. Если нет – значит, их надо переделать или дополнить.

Откуда произошло мутационное тестирование

Подход Mutation testing был предложен в 1971 году Ричардом Липтоном. Завершенная концепция мутационного тестирования была доработана и опубликована им же совместно с ДеМиллом и Сейвардом. 

Первая реализация Mutation testing была создана Тимоти Баддом в 1980 году и называлась «Мутационный анализ».

Суть мутационного тестирования

Mutation testing используется следующим образом. Допустим, у нас есть корректная версия ПО. Исследователь меняет одно место в коде так, как это мог бы случайно сделать программист, например – вместо точки с запятой поставить двоеточие, или вместо переменной «а» записать переменную «b». В итоге получился код-мутант.

Тестировщик прогоняет мутанта через батарею тестов. Если хотя бы один из тестов обнаруживает дефект – мутант считается убитым (Killed mutant). Если нет – то мутант считается убежавшим (Escaped) или выжившим (Survived). В идеале тесты должны «убить» всех мутантов. Наличие убежавших/выживших мутантов – причина еще раз проанализировать тесты на их покрытие.

Как создают мутантов в ПО

Все зависит от языка программирования. Чаще используют замены переменных и логические перестановки, но могут быть и специфические мутации. Примеры преобразований кода для создания мутантов:

  • Заменить одну переменную на другую (того же типа);
  • Заменить переменную на константу;
  • Удалить одну из переменных из арифметического выражения;
  • Заменить в арифметическом выражении «+» на любой другой знак математического действия;
  • Удалить в арифметическом выражении один из знаков;
  • Добавить в выражение «+» и какую-либо переменную;
  • К знаку «>» добавить «=» (чтобы вместо «больше» получилось «больше или равно»);
  • Заменить в логическом выражении «истину» на «ложь»;
  • Заменить в логическом выражении «AND» на «OR» (или наоборот);
  • Удалить оператор программы.

Правило RIP для мутантов в тестировании

В Mutation testing, чтобы признать тест результативным, считается необходимым выполнить три условия (правило RIP по первым буквам их названий):

  • R (Reach, достигнуть) – тест добрался до мутированного оператора;
  • I (Infect, заразить) – в мутант введены те входные данные, которые действительно дадут другой («зараженный») результат, нежели корректная версия программы;
  • P (Propagate, распространиться) – выходные данные мутанта, отличающиеся от правильного результата, выявлены тестом.

В названии правила RIP для мутантов нетрудно заметить аллюзию на сокращение «R.I.P.» (Rest in peace, т.е. «покойся с миром») – еще один образец экстравагантного юмора в тестировании.

Важное в мутационном тестировании

  • Мутанты создаются не хаотично, а на основе системного подхода (все изменения в коде заранее продуманы);
  • Данный метод требует большого вычислительного ресурса, т.к. за короткое время надо проверить значительное количество мутантов (поэтому пока не так часто применяется);
  • Оценку тестов в Mutation testing можно сделать через коэффициент выявления мутантов КВМ: 

КВМ = (В / С) * 100%, где С – количество созданных мутантов, В – количество выявленных мутантов.

Резюме

Мутационное тестирование — это тестирование ПО методом белого ящика, когда в код намеренно вносят ошибки и проверяют на нем действенность тестов. Такие версии кода называют мутантами. Чем больше мутантов выявят тесты – тем лучше покрытие и качество самих тестов.

на изображение автор Михаил Кулешов

Автор Михаил Кулешов

Михаил, профессиональный партнерский маркетолог, является основателем компании South Media OÜ, которая была создана в 2018 году и базируется в Таллинне. С 2016 года Михаил уехал из Финляндии и жил как настоящий «цифровой кочевник» в IT-индустрии, путешествуя по миру только с ноутбуком. Михаил работает и пишет статьи, связанные с IT-индустрией.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *