РУКОВОДСТВО ПО ТЕСТИРОВАНИЮ МУТАЦИЙ: ЧТО ВЫ ДОЛЖНЫ ЗНАТЬ

РУКОВОДСТВО ПО ТЕСТИРОВАНИЮ МУТАЦИИ: ЧТО ВАМ НУЖНО ЗНАТЬ

Содержание

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

< strong>Что такое мутация

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

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

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

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

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

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

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

РУКОВОДСТВО ПО ТЕСТИРОВАНИЮ МУТАЦИЙ: ЧТО ВЫ ДОЛЖНЫ ЗНАТЬ

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

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

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

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

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

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

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

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

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

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

РУКОВОДСТВО ПО ТЕСТИРОВАНИЮ МУТАЦИИ: ЧТО ВЫ ДОЛЖНЫ ЗНАТЬ

Value Мутация

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

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

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 < y)
z = 20;
else
z = 30;

Мутантный код:< p>if(x < y)
w = 20;
else
w = 30 ;

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

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

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

если(x > y)
z = 20;
иначе
z = 30;

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

if(x < y)
z = 20;
< em>else
z = 30;

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

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

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

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

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

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

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

Обнаружено

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

Убитые мутанты + время ожидания

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

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

< em>Выжившие мутанты + без покрытия

Покрыто

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

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

Действительно

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

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

Invalid

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

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

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

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

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

Показатель мутации

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

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

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

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

Обнаружено/покрыто * 100

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

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

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

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

Чтение чисел
если числа < 100
Тип = Double Digit()
Конец, если

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

Чтение чисел
если числа %% 100
Тип = Двойная цифра()
Конец, если

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

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

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

int i=0;
в то время как(…)
{
….;
i++;
if(i==10)
разрыв;
}

Мутантный код:

int i=0;
пока (…)
{
….;
i++;
если (i>=10)
break;
}

Простые мутанты

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

Пример:

Читать числа
если числа = 10
Удалить оператор присваивания
Конец, если

< h2 id=h-mutation-testing-benefits>Преимущества мутационного тестирования

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

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

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

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

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

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

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

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

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

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

  • Stryker Mutator
  • Jumble
  • PIT
  • Insure++.
  • Pester
  • MuClipse

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

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

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

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

Заключение

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

От QA genius

Adblock
detector