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

В настоящее время системы становятся все более сложными, а из-за сложности систем увеличивается и объем исходного кода. Тестирование программного обеспечения становится важным этапом жизненного цикла разработки ПО, поскольку весь этот код должен быть безошибочным. Для проверки качества исходного кода существуют различные техники “белого ящика”, одна из них – мутационное тестирование.

Содержание

Друзья, поддержите нас вступлением в наш Телеграм-канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.

Определение мутационного тестирования

Мутационное тестирование – это структурная, основанная на ошибках техника тестирования “белого ящика”, используемая для оценки пригодности тестовых наборов.

Мутация – это небольшое изменение в программе. Эти изменения малы настолько, что не влияют на высокоуровневое предназначение системы, но позволяют выловить простые низкоуровневые баги.

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

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

Давайте попробуем детально разобраться в шагах, которые необходимо выполнить при мутационном тестировании.

  1. Во-первых, подготовьте тест-кейсы для выбранной программы, в которой необходимо применить мутационное тестирование. Запустите тест-кейсы для этой программы.
  2. Создайте мутации, внеся в программу изменения, которые приведут к ошибкам. Запустите тест-кейсы для этой программы.
  3. Сравните результаты обоих тестов, т. е. тестов исходной программы и мутанта.
  4. Если результаты отличаются, можно предположить, что тест-кейс смог выявить ошибку в программе и мутант будет убит.
  5. Если же результаты одинаковы, можно предположить, что тест-кейс не смог выявить ошибку в программе, и мутант будет существовать и дальше.
  6. Повторите шаги со 2 по 5 для оставшихся тест-кейсов тестового набора.

Тестирование мутаций работает на основе двух гипотез.

1. Гипотеза компетентного программиста (CPH)

Эта гипотеза подразумевает, что программист компетентен, а значит, он/она будет писать программы, близкие к совершенству. И даже если будут найдены ошибки, предполагается, что это незначительные синтаксические ошибки, которые можно легко устранить.

2. Эффект сцепления

Эта гипотеза касается ошибок, используемых в мутационном тестировании. Она гласит, что простые мутации с простыми дефектами могут сцепляться и формировать более сложные дефекты. И если тестовый набор способен обнаружить простые дефекты в системе, он также обнаружит высокий процент сложных дефектов.

Оценка мутаций

Оценка мутации – это отношение числа обнаруженных мутаций к общему числу мутаций. Этот показатель используется для количественной оценки качества тестового набора. Идеальный показатель мутации должен составлять 100 % или 1, т. е. тестовый набор должен находить все мутации.

Оценка мутации = (количество убитых мутантов / общее количество мутантов)

А если в процентах, то:

Оценка мутации = (количество убитых мутантов / общее количество мутантов) * 100%

Типы мутаций

В основном существует три типа мутаций.

1. Мутации значений. Мутации этого типа изменяют значения констант или параметров.

Оригинальная программа выглядит следующим образом:

Int x = 5, y = 10, total;
print ("Total = x^y");

Программа-мутант:

Int x = 55897, y = 10, total;
print ("Total = x^y");

2. Мутации утверждений. Мутации этого типа изменяют утверждения кода, либо удаляя их, либо заменяя другими утверждениями, либо изменяя порядок утверждений.

Оригинальная программа выглядит следующим образом:

Int x, y, total;
If (x>y)
total = x+y;
else
total = x-y;

Программа-мутант:

Int x, y, total;
If (x>y)
total = x+y;
else
total = x*y;

3. Мутации решений. Мутации этого типа изменяют логические или арифметические операторы в программе.

Оригинальная программа выглядит следующим образом:

Int x, y, total;
If (x>y)
total = x+y;
else
total = x-y;

Программа-мутант:

Int x, y, total;
If (x<y)
total = x+y;
else
total = x-y;

Преимущества мутационного тестирования

Давайте рассмотрим, какую пользу может принести мутационное тестирование:

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

Недостатки мутационного тестирования

Ниже перечислены некоторые недостатки мутационного тестирования.

  • Это трудоемкий процесс, поскольку он включает в себя создание большого количества мутаций и выполнение тестовых наборов для каждой
  • Ручное тестирование требует большого количества ресурсов для создания мутаций и их обработки
  • Мутационное тестирование нельзя проводить методом “черного ящика”, поскольку оно требует внесения изменений в код.
  • Команда должна обладать подробными знаниями о средствах автоматизации, используемых для тестирования мутаций.

Инструменты для тестирования мутаций

  • Stryker – инструмент с открытым исходным кодом, доступный на GitHub. Из языков поддерживает JavaScript, C# и Scala. Поддерживает более 30 мутаций.
  • PIT – инструмент с открытым исходным кодом. Он обеспечивает тестовое покрытие для Java и JVM.
  • Jumble был разработан в 2003-2006 годах компанией Reel Two. Также имеет открытый исходный код. Поддерживает Java и работает в связке с JUnit.

Заключение

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

Перевод статьи «Mutation Testing».

Оставьте комментарий

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