atesting.ru Блог Руководство по тестированию мутаций: что вы должны знать

Руководство по тестированию мутаций: что вы должны знать

Руководство по тестированию мутаций: что Вы должны знать

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

Что такое мутация

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

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

Мутантные программы можно определить как просто измененную версию исходного кода. Другими словами, он вводит ошибки в программу, переписывая исходный код. В исходный код вносится несколько ошибок, чтобы найти двусмысленность внутри кода. Когда тестовые данные проходят через программу-мутант, мы должны получить результат, отличный от исходного кода.

Состояние мутантов

  • Выжившие мутанты: Мутанты, которые еще живы, то есть не обнаруживаются при выполнении теста, называются выжившими мутантами. Их также называют живыми мутантами. В идеале они должны быть идентифицированы с помощью тестового примера.
  • Убитые мутанты: Мутанты, выявленные при тестировании, — это убитые мутанты. Это происходит, когда мы получаем другой вывод из исходного кода.
  • Эквивалентные мутанты: Эти мутанты должны сохранять значение как исходный код с другим синтаксисом. Они все еще живы после обработки тестовых данных, они связаны с живыми мутантами.
  • Нет покрытия: В этом случае мутант выжил, потому что для этого мутанта не проводилось никаких тестов. Этот мутант находится в части кода, не затронутой ни одним из ваших тестов. Это означает, что наш тестовый пример не смог его охватить. это.
  • Тайм-аут . Выполнение тестов с этим активным мутантом привело к тайм-ауту. Например, мутант привел к бесконечному циклу в вашем коде. Не обращай внимания на этого мутанта. Он считается «обнаруженным». Логика здесь в том, что если бы этот мутант был внедрен в ваш код, ваша CI-сборка обнаружила бы его, потому что тесты никогда не завершатся.
  • Ошибка выполнения: Выполнение тестов привело к ошибке (а не к провалу теста). Это может произойти, когда средство запуска тестов не работает. Например, когда средство выполнения теста выдает ошибку OutOfMemoryError или для динамических языков, когда мутант привел к неразборчивому коду. Не тратьте слишком много внимания на этого мутанта. Он не отражен в вашей оценке мутации.
  • Ошибка компиляции: Это состояние возникает, когда это скомпилированный язык. Мутант привел к ошибке компилятора. Он не отображается в оценке мутации, поэтому вам не нужно уделять слишком много внимания изучению этого мутанта.
  • Игнорируется: мы можем видеть это состояние, когда пользователь устанавливает конфигурации для игнорирования. Он будет отображаться в отчетах, но не повлияет на оценку мутации.

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

Мутационное тестирование — это метод тестирования «белого ящика» при тестировании программного обеспечения, при котором мы специально вставляем определенные утверждения в исходный код (ошибки), чтобы проверить, может ли существующий тестовый пример обнаружить эти проблемы.

Руководство по тестированию мутаций: что вы должны знать

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

Это метод модульного тестирования. Он использует метод внедрения ошибок для вставки мутантов в программу.

Проще говоря, взаимное тестирование проверяет эффективность тестовых примеров.

Тест на мутацию можно выполнить с помощью четырех простых шагов, они заключаются в следующем

  1. Измените исходный код с помощью мутанты.
  2. Разработайте тестовые примеры для этих конкретных областей.
  3. Запустите тестовые примеры как для исходной, так и для мутантной программы.
  4. Сравните результаты

Целями тестирования на мутации являются:

  • Найти неправильный набор кода.
  • Для выявления скрытых дефектов, которые нельзя обнаружить с помощью других методов тестирования.
  • Для выявления новых видов ошибок или багов.
  • Для расчета оценки мутации.
  • Чтобы проверить охват и эффективность тестовых случаев.

Типы мутационного тестирования

< p> Мутационные тесты бывают нескольких типов, каждый из которых имеет свою цель и использование.

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

Руководство по тестированию мутаций: что вам следует Know

Мутация значений

В этом типе мутации значения основного параметра изменяются для проверки вывода программы.

Исходный код:

int num = 101;
int x = 98765432;
int y = 12345678;
int z = (x + y)% num;

Код мутанта:

int num = 1000000001;
int x = 98765432;
int y = 12345678;
int z = (x + y)% num;

Мутация оператора

В этом типе мутации оператор можно редактировать, удалять или переставлять. Эта модификация кода оказывает определенное влияние на вывод.

Исходный код:

if (x & lt; y)
z = 20;
else
z = 30;

Код мутанта:

if (x & lt; y)
w = 20;
else
w = 30;

Мутация решения

В этом типе мутации изменяются логические или арифметические операторы для обнаружения ошибок в программе.

Исходный код:

if (x & gt; y)
z = 20;
else
z = 30;

Мутированный код:

if (x & lt; y)
z = 20;
else
z = 30;

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

Если мы убьем всех мутантов в программе, мы можем сказать, что обеспечили полное покрытие программы.

  • Оценка мутации может быть определена как степень покрытия.
  • Здесь мы рассматриваем мутантов как требование теста.
  • Мы используем случайную выборку, чтобы назначить количество мутантов программе, следовательно, случайное выборка

Оценка мутации может быть определена как процент убитых мутантов от общего числа мутантов.

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

Если оценка мутации составляет 100%, то тестовых случаев будет достаточно. Это эффективный подход к измерению адекватности тестовых примеров. Но создание мутантов и выполнение тестовых примеров для каждой мутантной программы может быть трудоемким и требует огромных затрат.

Другие показатели мутаций

Обнаружено

Это количество мутантов, обнаруженных нашим тестом, т. е. убитых мутантов.

Убитые мутанты + Тайм-аут

Не обнаружено

Это количество мутантов, которые не были обнаружены нашим тестом, то есть выживших мутантов.

Выжившие мутанты + отсутствие покрытия

Покрытые

Это количество мутантов, для которых наши тесты создали покрытие кода.

Обнаруженные мутанты + Выжившие мутанты

Допустимый

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

Обнаруженные мутанты + необнаруженные мутанты

Недействительный

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

Ошибки времени выполнения + ошибки компиляции

Всего мутантов

Он содержит все мутанты, он фокусируется на всем.

Действителен + Недействителен + Игнорируется

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

Подсчитывает процент от общего числа погибших мутантов.

Обнаружено/действительно * 100

Оценка мутаций на основе покрытого кода

Он оценивает общий процент убитых мутантов на основе покрытия кода

Обнаружено/обнаружено * 100

Неправильный синтаксис

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

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

Исходный код:

Прочитать числа
< em> если числа & lt; 100
Type = Double Digit ()
End if

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

Читать числа
если числа %% 100
Type = Double Digit ()
End if

Эквивалентные мутанты

Если мутант имеет то же семантическое значение, что и исходный код, он является эквивалентным мутантом.

Исходный код:

int i = 0;
while (…)
{
… .;
i ++;
if (i == 10)
break;
}

Код мутанта:

int i = 0;
while (… )
{
… .;
i ++;
if (i & gt; = 10)
break;
}

Тривиальные мутанты

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

Пример:

Прочитать числа
if numbers = 10
Удалить оператор присваивания
End if

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

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

Как проводить мутационное тестирование

Шаг 1: команда представит несколько мутантов, т.е. ошибки в исходном коде. В программу помещается одна ошибка, которая помогает нам понять слабые стороны программы и эффективность наших тестовых примеров.

Шаг 2: Обычно скрипты автоматизации запускаются через программу. Сценарии, которые используются для тестирования исходной программы, выполняются как в исходной программе, так и в программе-мутанте. Тестовые примеры/тестовые сценарии должны быть достаточно эффективными, чтобы идентифицировать дефекты в программе, когда оба теста выполняются параллельно, это помогает нам найти точные места, где код слабый.

Шаг 3: Затем команда сравнивает результаты исходной программы и программы-мутанта.

Шаг 4: Если результаты теста различаются, т. Е. Обнаружены дефекты, значит, мутант убит тестовым примером/тестовым сценарием. Тестовый пример/тестовый сценарий достаточно эффективен, чтобы обнаружить разницу между исходной программой и программой-мутантом.

Шаг 5: Если нет разницы между выходными данными, мутант все еще в живых. Команда пытается определить слабые места в тестовых примерах/тестовом сценарии, чтобы убить мутантов в следующий раз.

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

Мутационное тестирование может занять очень много времени и его сложно выполнить вручную. Желательно использовать инструменты автоматизации, чтобы ускорить процесс.

Они также помогают сократить затраты и время команды. Эти инструменты помогут нам обработать генерацию мутантов. Ниже перечислены некоторые инструменты для тестирования мутантов:

  • Stryker Mutator
  • Jumble
  • PIT
  • Insure ++.
  • < li> Приставать

  • MuClipse

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

  • Повышает доверие к коду, поскольку он переводится в стабильные и надежные системы.
  • Благодаря тестированию на мутации клиенты получают максимальную отдачу стабильная и надежная система.
  • Мутационное тестирование помогает команде обнаружить все ошибки в исходном коде.
  • Мутационное тестирование выявляет неоднозначности в исходном коде на начальных этапах.
  • < li> Мутационное тестирование обеспечивает высокий охват исходной программы.

  • Общее качество программного продукта повышается.
  • Бреши в коде и тестовых данных могут быть обнаружены с помощью мутационного тестирования.
  • Заказчик получает безопасный и надежный продукт

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

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

Заключение

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

TAG: qa