Стресс-тестирование программного обеспечения
Стресс-тести́рование (англ. Stress Testing) — один из видов тестирования программного обеспечения, которое оценивает надёжность и устойчивость системы в условиях превышения пределов нормального функционирования. Стресс-тестирование особенно необходимо для «критически важного» ПО, однако также используется и для остального ПО. Обычно стресс-тестирование лучше обнаруживает устойчивость, доступность и обработку исключений системой под большой нагрузкой, чем то, что считается корректным поведением в нормальных условиях.
Термин «стресс-тестирование» часто используется как синоним «нагрузочного тестирования», а также «тестирования производительности», что ошибочно, так как эти виды тестирования отвечают на разные бизнес-вопросы и используют различную методологию.
Основные принципы
В общем случае методология стресс-тестирования основана на снятии и анализе показателей производительности приложения при нагрузках, значительно превышающих ожидаемые на стадии сопровождения, и несёт в себе цель определить выносливость или устойчивость приложения на случай всплеска активности по его использованию.
Необходимость стресс-тестирования диктуется следующими факторами:
- Большая часть всех систем разрабатываются с допущением о функционировании в нормальном режиме и даже в случае, когда допускается возможность увеличения нагрузки, реальные объёмы её увеличения не принимаются во внимание.
- В случае SLA-контракта (соглашения об уровне услуг) стоимость отказа системы в экстремальных условиях может быть очень велика.
- Обнаружение некоторых ошибок или дефектов в функционировании системы не всегда возможно с использованием других типов тестирования.
- Тестирования, проведенного разработчиком, может быть недостаточно для эмуляции условий при которых происходит отказ системы.
- Предпочтительнее быть готовым к обработке экстремальных условий системы, чем ожидать её отказа.
Основные направления применения стресс-тестирования:
- Общее исследование поведения системы при пиковых нагрузках.
- Исследование обработки ошибок и исключительных ситуаций системой при пиковых нагрузках.
- Исследование узких мест системы или отдельных компонент при диспропорциональных нагрузках.
- Тестирование ёмкости системы.
Стресс-тестирование, как и нагрузочное тестирование также может быть использовано для регулярной оценки изменений производительности с целью получения для дальнейшего анализа динамики изменения поведения системы за длительный период.
Пропорциональная нагрузка
Стресс-тестирование может применяться как для обособленных приложений, так и для распределенных систем с клиент-серверной архитектурой. Простейшим примером стресс-тестирования обособленного приложения может являться открытие файла размером в 50 Мб программой Notepad, входящей в комплект ОС Windows. Условия стресс-тестирования приложения обычно формируются исходя из критических бизнес-процессов его функциональности, определенными на стадии разработки требований и анализа рисков группой, ответственной за производительность.
В общем случае в качестве условий для стресс-тестирования может использоваться линейно увеличенная ожидаемая нагрузка.
Диспропорциональная нагрузка
В случае тестирования многозвенных распределённых систем необходимо учитывать уже не только фактический объём нагрузки, состоящей из множества элементов, но и их пропорции в общем объёме.
Пример 1:
Веб-сервис предназначен для обработки и отображения созданных пользователем страниц, каждая из которых может состоять из обычного текста и динамических элементов управления. Известно, что один пользователь создает 1 страницу в день, которая содержит в среднем 1000 символов текста и одну форму. Известно также, что к системе идет 1 запрос на отображение исходной страницы в минуту. При этом скорость отображения страницы является критическим бизнес-процессом. Используя описанную выше модель поведения использующих систему пользователей, несложно смоделировать изменение динамики нагрузки при их увеличении. Стресс-тест, в котором взята за основу такая модель нагрузки не адресует рисков, связанных с тем, что система перестанет удовлетворять требованиям производительности при изменении сценария её использования. Например, скорость отображения страницы может существенно снизиться, если пользователи будут добавлять на неё десятки форм вместо одной. |
Использование диспропорциональной нагрузки в стресс-тестах может также применяться для выявления узких мест отдельных компонент системы.
Тестирование ёмкости
Тестирование ёмкости (англ. Capacity Testing) является одним из самых важных с точки зрения развития бизнеса направлений стресс-тестирования и самых сложных с точки зрения проведения и анализа. Тестирование ёмкости проводится с целью определить запас прочности системы при полном соответствии требованиям к производительности.
При моделировании нагрузки для тестирования ёмкости системы учитывается как текущая нагрузка в виде количества и пропорций одновременно поступающих в систему запросов, так и ожидаемая в перспективе.
Пример 2:
Веб-сервис предназначен для отображения данных для зарегистрированных пользователей в формате .docx. Разрабатывающая компания собирается опубликовать возможность отображения данных в формате .pdf, при этом ожидается, что текущие пользователи будут продолжать работать со старым форматом, а новые будут использовать формат .pdf. Моделируя нагрузку на системы во время тестирования ёмкости, учитывается не только текущий сценарий её использования (отображение данных в .docx), но и предполагаемый сценарий использования в будущем (часть одновременно работающих с системой пользователей используют .docx, а часть - .pdf) |
Результатом тестирования ёмкости приложения или системы является набор максимально допустимых характеристик нагрузки системы, при которых приложение или система отвечает требованиям к производительности, разработанным и документированным на этапе проектирования архитектуры.
См. также
Ссылки
- Портал специалистов по тестированию и обеспечению качества ПО (рус.) — Проект посвящён вопросам тестирования и повышения качества программного обеспечения.
- База знаний тестировщика Архивная копия от 18 октября 2009 на Wayback Machine (рус.) — Багтрекеры, автоматизированное тестирование, нагрузочное тестирование, юзабилити тестирование, сообщества, печатные издания, книги
- Автоматизация нагрузочного тестирования (рус.)
- Заметки по нагрузочному тестированию (рус.)
Литература
- Лайза Криспин, Джанет Грегори. Гибкое тестирование: практическое руководство для тестировщиков ПО и гибких команд = Agile Testing: A Practical Guide for Testers and Agile Teams. — М.: «Вильямс», 2010. — 464 с. — (Addison-Wesley Signature Series). — 1000 экз. — ISBN 978-5-8459-1625-9.