Разделы портала

Онлайн-тренинги

.
Терминология. Нагрузочное тестирование.
29.09.2008 10:57

Автор: Сергей Мартыненко

Термин «нагрузочное тестирование» обычно используют в значении «тестирование производительности». А что же тогда есть собственно нагрузочное тестирование?

 

RUP:

Load testing is a performance test which subjects the target-of-test to varying workloads to measure and evaluate the performance behaviors and ability of the target-of-test to continue to function properly under these different workloads. The goal of load testing is to determine and ensure that the system functions properly beyond the expected maximum workload. Additionally, load testing evaluates the performance characteristics (response times, transaction rates, and other time sensitive issues).

Вольный перевод.

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

Обычно нагрузочное тестирование проводят нагружая систему 75% от максимальной нагрузки в течении суток.

И зачем это надо спрашивается? Ну, то что система должна и через день нагрузки функционировать так же, как и при запуске это вроде понятно (в то время, как космические корабли...). Только вот, а с чего бы ей деградировать?

Долго я не понимал, зачем этот вид тестирования нужен. Потом поднял историю отрасли, и все встало на свои места. Вы когда нибудь слышали о такой вещи как «memory leak»? О, я прямо таки вижу, как вздрогнули C и C++ программисты. Это чудовище являлось им в кошмарных снах. И с криком просыпались они.

Для тех, кто не в курсе даю историческую справку. C и C++ предоставляют прекрасные возможности по прямому управлению памятью. И требуют высочайшей культуры работы. Однако, несмотря на все усилия, как правило, остаются участки кода, приводящие к утечкам памяти. Кроме того происходит фрагментация памяти. Результатом этого является замедление работы системы и необходимость регулярной перезагрузки. Для систем 24х7х365 это настоящий бич. Сами посудите, к чему приведет необходимость перезагрузки дважды в сутки авиадиспетчерской системы.

Я предполагаю, что именно для подобных систем и родились эти тесты. Т.е. для систем с требованиями класса:

  • Круглосуточная работа
  • Перерывы не чаще раза в месяц, не более чем на 15 мин

Много лет назад начался переход на управляемый код (Java, C#). И управление памятью стало проще. Хотя, как говорят, кривые руки способны испортить любую систему. Достаточно просто не отпускать ресурсы.

Ну а теперь выводы.

  • Для систем с нежесткими требованиями к перезагрузке нагрузочное тестирование необязательно.
  • Для систем 24х7х365 на неуправляемом коде нагрузочное тестирование практически обязательно.
  • Для систем 24х7х365 на управляемом коде менее актуально, чем для систем на неуправляемом коде.
 

Нагрузочное тестирование определяет, находится ли степень деградации системы в допустимых пределах.

Комментарии программистов

  • Первоначально наша система на С++ деградировала за час работы. Так что это тестирование полезно не только для систем 24х7х365.
  • И на С++ можно делать недеградирующие системы. Просто это сложнее