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

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

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

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

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

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

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

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

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

Что такое тестирование мутаций< /strong>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;
иначе
z = 30;

Код мутанта:< p>if(x < y)
w = 20;
иначе
w = 30 ;

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

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

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

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

Мутировавший код:< /strong>

if(x < y)
z = 20;
иначе
z = 30;

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

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

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

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

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

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

Другие метрики мутаций< /strong>

Обнаружено

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

Убитые мутанты +Timeout

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

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

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

< strong>Покрыто

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

int i=0;
while(…)
{
….;
i++;
if(i==10)
< em>break;

Код мутанта:

int i=0;
пока(…)
{
….;
i++;
if(i>=10)
break;

Тривиальные мутанты< /h4>

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

Пример:

Читать числа
if Numbers = 10
Удалить оператор присваивания
Завершить if

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

От QA genius

Adblock
detector