Что такое параллельное тестирование в тестировании программного обеспечения?

⚡ Умное резюме

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

  • 👥 Также называемый: Многопользовательское тестирование, поскольку триггером является одновременный доступ, а не только большой объем данных.
  • 🎯 На что он нацелен: Общие записи базы данных, общие модули и общий код приложения, доступные более чем одной сессии.
  • 🔒 Что он измеряет: Уровни взаимоблокировок, блокировок, однопоточного кода и ограниченного доступа к общим ресурсам.
  • 🧭 Как это работает: Выявите потоки, подверженные параллельному выполнению, установите целевой уровень параллельного выполнения, напишите сценарии реальных действий, а затем постепенно увеличивайте количество пользователей.
  • 🐞 Классы дефектов: Состояние гонки, взаимоблокировки, потерянные обновления, повреждение данных и голодание потоков.
  • ⚠️ Честные границы: Недетерминированность, асинхронные обратные вызовы и неинформативный стек вызовов затрудняют воспроизведение сбоев.

Что такое параллельное тестирование в тестировании программного обеспечения с участием нескольких пользователей, работающих одновременно?

Что такое параллельное тестирование?

Тестирование параллельного выполнения Это метод тестирования, используемый для обнаружения дефектов в приложении, когда в систему одновременно входят несколько пользователей. Другими словами, он отслеживает эффект, когда несколько пользователей одновременно выполняют одно и то же действие.

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

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

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

Зачем нужно параллельное тестирование?

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

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

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

Как проводить тестирование параллельного выполнения

Тестирование параллельного выполнения выполняется в повторяющейся последовательности. Описанные ниже шаги следуют из описания алгоритма.ping к разрешению.

  • Шаг 1) Выявите потоки, подверженные параллелизму. Обратите внимание на наличие общего состояния: одновременные входы в систему, резервирование мест или акций, обновления баланса, пакетные задания, записывающие данные в одну и ту же таблицу, а также любые однопоточные компоненты в пути выполнения.
  • Шаг 2) Установите целевой показатель параллельного выполнения. Определите, сколько пользователей должны действовать одновременно, исходя из реальных пиковых нагрузок, а не из округленного числа.
  • Шаг 3) Разработайте тестовые примеры. Каждый прецедент сопоставляет общий ресурс, конкурирующие действия и ожидаемое конечное состояние — например, две сессии вывода средств с одной учетной записи не обязательно должны быть успешными.
  • Шаг 4) Создайте скрипт и выберите инструмент. Требуется генератор нагрузки, создающий настраиваемых виртуальных пользователей; JMeter является распространенным выбором среди решений с открытым исходным кодом, и его настройки групп потоков напрямую соответствуют сценариям параллельного выполнения.
  • Шаг 5) Ramp постепенно. Увеличивайте количество одновременно подключенных пользователей поэтапно, а не резко.ping к цели, чтобы был виден уровень, на котором начинается конкуренция.
  • Шаг 6) Мониторинг и анализ. Внимательно изучите задержки блокировок, разброс времени ответа, частоту ошибок и блокировку базы данных — дефект параллельного выполнения часто проявляется как аномалия времени, прежде чем отобразится как ошибка.
  • Шаг 7) Устраните проблему и запустите повторно. Устраните причину, связанную с синхронизацией, индексированием или блокировкой, затем повторите тот же запуск, чтобы убедиться, что поведение изменилось, а не просто сместилось.

Распространенные дефекты параллельного выполнения

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

дефект Что происходит Типичный симптом
Условия гонки Результат зависит от того, какая сессия завершилась первой. В одних сериях итоговые результаты были правильными, в других — нет.
Deadlock Две сессии удерживают друг друга, другая нуждается в... Транзакции зависают вместо возврата ошибки.
Потерянное обновление Вторая операция записи перезаписывает первую, не считывая её. Сохранённые изменения незаметно исчезают.
Повреждение данных Общая структура записывается лишь частично. Записи находятся в состоянии, в котором не может быть создана действительная транзакция.
Голодание Одна сессия так и не получает ресурс, которого ожидает. При попытке доступа к одному из пользовательских путей происходит таймаут, хотя система выглядит работоспособной.

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

Пример тестирования параллельного выполнения

Рассмотрим интернет-магазин, в котором остался последний экземпляр товара. Два покупателя одновременно открывают товар и оба нажимают на кнопку «Открыть». Купить.

  • Сценарий: В двух сессиях значение запаса равно 1, обе проходят проверку наличия, и в обеих записывается значение запаса равное 0.
  • Ожидаемый результат: Один заказ подтверждается, по другому приходит сообщение об отсутствии товара на складе, и количество товара никогда не становится отрицательным.
  • Индикатор дефекта: Оба ордера подтверждаются, или же цена акций падает до -1, что указывает на то, что проверка наличия и уменьшение количества не выполняются как один атомарный шаг.
  • Варианты, которые стоит попробовать: Те же две сессии: редактирование одной записи профиля, два подтверждения одного и того же запроса и пакетное задание, обновляющее таблицу во время сохранения пользователем.

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

Преимущества параллельного тестирования

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

Недостатки параллельного тестирования

Перечисленные ниже недостатки обычно встречаются тестировщикам при проведении параллельного тестирования.

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

Часто задаваемые вопросы (FAQ)

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

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

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

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

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

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

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

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

Подведем итог этой публикации следующим образом: