Нагрузочное тестирование ПО

воскресенье, 11 мая 2008 г.

Цели нагрузочного тестирования

1.Оценка производительности и работоспособности приложения на этапе разработки и передачи в эксплуатацию.

2. Оценка производительности и работоспособности приложения на этапе выпуска новых релизов, патч-сетов.

3. Оптимизация производительности приложения, включая настройки серверов и оптимизацию кода.

4. Подбор соответствующей для данного приложения аппаратной (программной платформы) и конфигурации сервера.


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

Виды нагрузочных тестов

В нагрузочное тестирование входят следующие тесты.

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

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

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

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

суббота, 3 мая 2008 г.

Терминология в нагрузочном тестировании

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


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


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


1. Приложение - тестируемое прикладное программное обеспечение.
2. Виртуальный пользователь - программный процесс, циклически выполняющий моделируемые операции.
3. Итерация – это один повтор выполняемой в цикле операции.
4. Интенсивность выполнения операции - частота выполнения операции в единицу времени, в тестовом скрипте задается интервалом времени между итерациями.
5. Нагрузка - совокупное количество попыток выполнить операции на общем ресурсе. Создается или пользовательской (клиентской) активностью или нагрузочными скриптами.
6. Производительность - количество выполняемых приложением операций в единицу времени.
7. Масштабируемость приложения - пропорциональный рост производительности при увеличении нагрузки.
8. Профилем нагрузки называется набор операций с заданными интенсивностями, полученными на основе статистики.
9. Нагрузочной точкой называется расчитанное (либо заданное Заказчиком) количество виртуальных пользователей в группах, выполняющих операции с определенными интенсивностями.


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

четверг, 1 мая 2008 г.

Вступление

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