Открыть главное меню

Стресс-тестирование программного обеспечения

Стресс-тести́рование (англ. Stress Testing) — один из видов тестирования программного обеспечения, которое оценивает надёжность и устойчивость системы в условиях превышения пределов нормального функционирования. Стресс-тестирование особенно необходимо для «критически важного» ПО, однако также используется и для остального ПО. Обычно стресс-тестирование лучше обнаруживает устойчивость, доступность и обработку исключений системой под большой нагрузкой, чем то, что считается корректным поведением в нормальных условиях.

Термин «стресс-тестирование» часто используется как синоним «нагрузочного тестирования», а также «тестирования производительности», что ошибочно, так как эти виды тестирования отвечают на разные бизнес-вопросы и используют различную методологию.

Основные принципыПравить

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

Необходимость стресс-тестирования диктуется следующими факторами:

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

Основные направления применения стресс-тестирования:

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

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

Пропорциональная нагрузкаПравить

Стресс-тестирование может применяться как для обособленных приложений, так и для распределенных систем с клиент-серверной архитектурой. Простейшим примером стресс-тестирования обособленного приложения может являться открытие файла размером в 50 Мб программой Notepad, входящей в комплект ОС Windows. Условия стресс-тестирования приложения обычно формируются исходя из критических бизнес-процессов его функциональности, определенными на стадии разработки требований и анализа рисков группой, ответственной за производительность.

В общем случае в качестве условий для стресс-тестирования может использоваться линейно увеличенная ожидаемая нагрузка.

Диспропорциональная нагрузкаПравить

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

Пример 1:

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

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

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

Тестирование ёмкостиПравить

Тестирование ёмкости (англ. Capacity Testing) является одним из самых важных с точки зрения развития бизнеса направлений стресс-тестирования и самых сложных с точки зрения проведения и анализа. Тестирование ёмкости проводится с целью определить запас прочности системы при полном соответствии требованиям к производительности.

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

Пример 2:

Веб-сервис предназначен для отображения данных для зарегистрированных пользователей в формате .docx. Разрабатывающая компания собирается опубликовать возможность отображения данных в формате .pdf, при этом ожидается, что текущие пользователи будут продолжать работать со старым форматом, а новые будут использовать формат .pdf. Моделируя нагрузку на системы во время тестирования ёмкости, учитывается не только текущий сценарий её использования (отображение данных в .docx), но и предполагаемый сценарий использования в будущем (часть одновременно работающих с системой пользователей используют .docx, а часть - .pdf)

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

См. такжеПравить

СсылкиПравить

ЛитератураПравить

  • Лайза Криспин, Джанет Грегори. Гибкое тестирование: практическое руководство для тестировщиков ПО и гибких команд = Agile Testing: A Practical Guide for Testers and Agile Teams. — М.: «Вильямс», 2010. — 464 с. — (Addison-Wesley Signature Series). — 1000 экз. — ISBN 978-5-8459-1625-9.