Обзоры
Тестирование – кому и зачем это нужно?
0

Тестирование – кому и зачем это нужно?

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


Д. Гантер, С. Барнет, Л. Гантер.
Интеграция Windows NT и Unix

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

Что и зачем тестируется

Таблица
Ресурсы Internet, посвященные тестированию серверов

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

Итак, какие факторы учитываются в таких случаях, что является объектом исследований и какого рода испытания наиболее популярны?

Критерии тестирования обычно таковы:

  • функциональные возможности продукта;
  • простота освоения;
  • легкость установки;
  • качество документации и поддержки;
  • производительность;
  • для аппаратуры иногда учитывается конструктивное исполнение.

Встречаются и весьма двусмысленные критерии. Не так давно в одном из обзоров Web-серверов при выставлении общей оценки в качестве положительного фактора рассматривалась "высокая степень интеграции с операционной системой". Но если сбой приложения вызывает сбой операционной системы (вероятность чего пропорциональна степени интегрированности) — то такое ли уж это преимущество?

Равна ли сотня кроликов одному тигру?

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

Типичный пример — сравнение старших моделей систем на процессорах Intel с младшими в линии RISC-платформ. Да, действительно, в заданном ценовом диапазоне машины с Intel-архитектурой сопоставимы или, в некоторых случаях, даже превосходят RISC-системы. Однако то, что является потолком для одних платформ, — лишь начальный уровень для других и т. д.

Выводы: относитесь критически к критериям, по которым оценивается продукт, — у вас и у тестеров могут оказаться разные вкусы. Попробуйте сказать приверженцам Unix, что ради удобства графического интерфейса конфигурирования системы стоит смириться с необходимостью перезагрузки после изменения IP-параметров. Что же касается компактности исполнения системного блока, то это хорошо до тех пор, пока вам не понадобится вставить в slim-корпус дополнительный винчестер.

Одним словом — переосмысливайте результаты тестов в соответствии со своими нуждами.

Специфика тестирования серверов

Если компьютер не включается — он неисправен.
Если не выключается — он сервер.
Народная примета

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

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

И наконец, характерной особенностью функционирования серверов является наличие пиковых нагрузок. Причины их появления могут быть самыми разными — от начала рабочего дня в большой организации (особенно если все пользователи приходят на работу вовремя) до восстановления "упавшего" соединения у поставщика услуг Internet, когда на коммуникационные серверы обрушиваются накопившаяся почта и группы новостей.

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

К сожалению, большинство обзоров, публикуемых в компьютерной периодике, посвящено либо сопоставлению производительности разных аппаратных решений на наборе тестовых задач, выполняемых последовательно, либо сравнительному тестированию того или иного сервиса (например, испытание Web-серверов разных производителей). Один из наихудших вариантов такого подхода — когда сравнительный обзор возможностей аналогичных решений называют тестированием только потому, что автор публикации провел инсталляцию и немного "погонял" продукт.

Условия проведения тестирования

Для начала немного теории. Гленфорд Майерс в своей работе "Надежность программного обеспечения" приводит несколько "аксиом тестирования". Попробуем, следуя им, рассмотреть, что и как надо тестировать.

Время от времени в компьютерной прессе появляются сообщения почти спортивного характера: продукт фирмы N показал рекордное быстродействие в тесте M. Насколько информативны тесты, проведенные фирмами-производителями?

Невозможно тестировать свою собственную программу

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

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

С таким явлением автор столкнулся, пытаясь настроить Netscape Enterprise Web Server под Solaris (SPARC). Производительность сервера по http-протоколу удалось поднять почти в 6 (!) раз (по данным тестирования с MS InetLoad), однако на комплексном тесте увеличение оказалось трехкратным, в то время как быстродействие POP3-сервера возросло вдвое, News-сервера — осталось неизменным, а SMTP показал в два раза худшие результаты, чем до внесения изменений.

Кроме того, производители, зная характеристики того или иного тестового набора, могут оптимизировать параметры системы именно под него. Пример тому — Web-страничка Netscape, где приведены рекомендации, как настроить Netscape Enterprise Server для проведения тестирования с помощью SPECweb96.

Тестирование проводится для обнаружения ошибок

В случае серверов и серверного программного обеспечения это значит, что устройство следует заставить работать в максимально неблагоприятном режиме — провести тест на "живучесть". Этого можно достичь проведением тестирования сервера в следующей рабочей конфигурации:

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

Здесь уместны два примечания:

1. Модель поведения пользователя.

По отношению к пользователям администратор должен быть пессимистом. Соответственно должно строиться и тестирование "на выживание".

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

2. Сервис перестал справляться с обработкой запросов: возможные варианты.

По степени серьезности такие отказы можно разделить на 4 группы:

  • снижение производительности — сервис не успевает провести обработку, но отвечает корректно (возвращает соответствующий код ошибки — "Too many connections" и т. п.);
  • аварийное завершение работы сервиса, не влекущее за собой негативных последствий для системы: соответствующая программа завершила работу, выгружена из памяти, системные ресурсы освобождены;
  • аварийное завершение работы сервиса, отрицательно влияющее на производительность системы. Программа либо "висит" в списке процессов, не высвобождая ресурсы, либо в процессе завершения захватывает дополнительные ресурсы;
  • крах системы — в лучшем случае с последующей перезагрузкой, в худшем — с зависанием.

Готовьте тесты как для правильных, так и для неправильных входных данных

Эта аксиома детализирует предыдущую с точки зрения входных информационных потоков.

Как отреагирует система на отправление письма размером несколько десятков мегабайт? Застрянет ли оно в очереди, заблокировав тем самым на неопределенное время вашу почтовую систему (особенно если связь с хостом-получателем регулярно обрывается), или будет уничтожено, а пользователь уведомлен о недопустимости таких действий?

Совет, взятый из той же книги Г. Майерса: "старайтесь, чтобы система не рассердила пользователя, ибо это может привести к некоторым неожиданным ситуациям на входе — правило # 5 минимизации ошибок пользователя в диалоговых системах. Быть пессимистом — не значит быть мизантропом!".

А как насчет news-сервера — установлен ли там максимальный размер статьи?

Может ли кто-то, вознамерившись загрузить половину вашего FTP-сайта, открыть три десятка параллельных ftp-сессий, и если да, то как это повлияет на ваш канал и работу других желающих посетить FTP?

В качестве примера, подтверждающего корректность такого подхода, можно упомянуть инцидент с ракетным крейсером Yorktown, где ошибка ввода оператора повлекла за собой отказ системы управления двигателями. Или еще один, приведенный самим Майерсом: "Операторы Нью-Йоркской системы диспетчеризации полицейских машин SPRINT в свободное время развлекались тем, что пытались вывести ее из строя, вводя заведомо неправильные сообщения". Это происходило в начале 70-х. Может, с тех пор нравы и смягчились, но это маловероятно.

Избегайте невоспроизводимых тестов

В случае тестирования серверов и серверного ПО эта аксиома особенно актуальна. Во-первых, для их тестирования необходимо наличие аппаратно разделенных генераторов нагрузки (Client-Side Load Generators, CSLG) — обычно это группы рабочих станций, выполняющих клиентскую часть теста и обеспечивающих поток запросов на сервер. Во-вторых, на результаты может повлиять состояние сети, соединяющей сервер и CSLG. Кроме того, во многих случаях производительность зависит от предыстории обращений к серверу. Большинство серверных приложений использует кэширование. Скорость обращения к кэш-памяти значительно выше скорости обращения к дисковой подсистеме. Кэш приложения может наполняться вследствие предварительных или отладочных прогонов тест-программ — и соответственно могут меняться результаты. Более того, при комплексном тестировании возможно перекрестное влияние приложений — так, количество обработанных за единицу времени сложных запросов к POP3- или IMAP-серверам зависит от размера почтового спула, который может быть увеличен предыдущим проведением SMTP-теста. И наконец, на производительность влияют настройки операционной системы.

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

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

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

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


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: