Зачем тестировать модель информатика сообщение

Обновлено: 08.07.2024

Тестирование имеет много смысла. Но что вы должны проверить? Давайте посмотрим на тестирование моделей Django. Теги с Джанго, Питоном, тестированием.

Вступление

Программное тестирование – это дисциплина определения правильности программного обеспечения. Автоматизированные тесты, с другой стороны, это процесс написания программы, которую Тестирует программное обеспечение автоматически Отказ Вокруг Интернета есть целая множество дискуссий [1] О переворачивании автоматизированного тестовых люксов, поэтому я не собираюсь охватить вас своим собственным мнением по этому вопросу. Но если вы заботитесь о качестве программного обеспечения, который вы производите, и вы уже проверяете свои программы вручную, я могу уверенно убедиться, что наличие автоматизированного тестового набора будет повысить вашу производительность и уверенность в вашей кодовой базе.

Джанго Веб-каркас обеспечивает прочный набор Тестирующие объекты из коробки, придерживаясь Батареи включены Философия. С этими уже предоставленными, [2] Вы можете использовать коллекцию тестов – A Тестовый люкс – Решить или избежать, ряд проблем:

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

Проект Django содержит кучу движущихся частей, которые являются простыми кандидатами для записи испытаний. Эта статья сосредоточится на Модели Django Отказ

Анатомия модели Джанго

Давайте начнем с изучения того, как выглядит модель Django. Используя База данных аренды DVD Sakila Как ссылка ( ER Diagram [3] ), мы могли бы представлять Актер Таблица с этим кодом:

Этот код показывает как несколько вещей:

  1. Модель Django наследует от django.db.models. Модель Класс, позволяющий ему отображаться с определенной таблицей базы данных.
  2. Экземпляры django.db.models. Поле S затем можно прикрепить в качестве свойств к модели, позволяя им быть отображены в виде столбцов таблицы. Здесь мы определяем отношение многих ко многим между актером и фильмом. Обратите внимание, что null и on_delete Kwargs подразумевает, что актер не обязательно должен быть прилагается к нему фильма. являются неотъемлемой частью любых RDBMS, а Django позволяет нам удобно построить и получать доступ к этим отношениям в объектно-ориентированном способе.
  3. Наконец, модели – это просто классы Python под капотом, поэтому мы можем определить пользовательские (или Magic ) методы для бизнеса/презентации/мета-логики.

С этой информацией в уме мы можем теперь исследовать, как и то, что мы можем проверить модель Django.

Тестирование моделей полей

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

Вот что делает этот код:

  1. Мы подкласс Джанго Testcase класс, который в свою очередь наследует от Неизвестный модуль Testcase Отказ Это позволяет нам использовать методы утверждения, такие как apserttrue () и Assertequals () , а также некоторые объекты доступа к базе данных, такие как SUTUPTESTATA () Отказ
  2. Используя вышеупомянутые SUTUPTESTATA () Способ класса, мы создаем один экземпляр актера, который будет использоваться остальными методами испытаний. Прочитайте Документация Поэтому мы используем это вместо Настройка () Метод от модульный тест. Testcase Отказ
  3. Затем мы проверяем, что первое и фамилия поля существуют в созданном экземпляре актера. Мы делаем это с помощью утверждений о конкретных свойствах, которые они имеют определенный тип, в этом случае ул . | Отказ Точно так же мы проверяем, если
  4. last_update поле также существует, утверждая, что это datetime.dateTime тип.

Запуск вашего тестового набора, затем подтвердит, что в самом деле, модель актера имеет поля, которые вы ожидаете!

Тестирование модели отношений

Тестирование на модели отношений работает аналогично с моделей полями:

Новый метод испытаний должен быть самосознательным:

  1. Мы создаем кучу пленочных объектов для тестирования.
  2. Затем мы прикрепим экземпляр актера, который мы создали в SUTUPTESTATA () Метод для каждого из связанных актеров фильма.
  3. Наш экземпляр актера должен иметь такое же количество фильмов, как мы создали.
  4. И каждый из фильмов, который мы создали, должны быть в наборе актера связанных фильмов.

Теперь мы можем быть уверены, что наши модели подключены правильно.

Intermezzo: Что случилось с этими тестами?

Многие люди скажут, что эти методы тестируют Рамочный код и что мы не достигли много, написав эти тесты. Я говорю, что они тестируют Наша интеграция с рамками (I.e. Тестирование, которое мы используем правильные функции доступа к базе данных Django) вместо тестирования Как работает Рамочный код (то есть. Тестирование внутренней реализации integerfield ). И это прекрасно в моей книге.

По крайней мере, эти типы или тесты очень легко и быстро писать. И импульс очень важен в тестировании, вдвойне, так что если вы следите за TDD Отказ Если все еще сомневаюсь, такие тесты, как это Легко удалить по линии.

Учитывают их низкого риска, среднеоплачивающих инвестиций на ваш портфель тестовых люксов.

Тестирование методов модели

Наконец, давайте посмотрим, как можно написать тест для пользовательских методов модели:

  1. Быстрый совет: тесты предназначены для проверки, но они также идеальны в качестве добавленной документации. Не бойтесь писать чрезмерно описательные имена для ваших методов теста. Один должен быть в состоянии взглянуть на тест-тест и получить верхний вид на то, как работает специфический модуль или класс.
  2. Тестирование нашего __str __ () метод. Должен быть самоуверенным.

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

  1. Хороший – это check_ovailability (TimeDelta) Способ, который проверяет, может ли актер можно забронировать в течение определенного периода времени.
  2. Или Compute_Salary (фильм) Для расчета того, насколько актер должен быть оплачен для определенного фильма.
  3. Может быть, даже Уйти в отставку () Метод, который устанавливает некоторые поля базы данных для актера, означающие, что актер больше не принимает работу.

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

Заключение

В этой статье мы коснулись следующих моментов:

  • Какое программное тестирование есть, и то, что Django предоставляет в своих тестирующих объектах.
  • Из чего сделана модель Django.
  • Как проверить поля модели.
  • Как проверить отношения модели.
  • Как проверить пользовательские методы модели.

Я надеюсь, что вы получите что-то из этой статьи. Пусть ваши тесты будут зелеными и много. Оставайся в безопасности!

Тестирование на основе модели (англ. Model-based testing ) - это тестирование программного обеспечения, в котором варианты тестирования (англ. test case s) частично или целиком получаются из модели описывающей некоторые аспекты (чаще функциональные) тестируемой системы (англ. system under test ). Модели могут отображать желаемое поведение системы или использоваться для создания тестовых стратегий или среды тестирования.

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

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

Инструменты

Ссылки

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое "Тестирование на основе модели" в других словарях:

Тестирование по стратегии чёрного ящика — Тестирование чёрного ящика или поведенческое тестирование стратегия (метод) тестирования функционального поведения объекта (программы, системы) с точки зрения внешнего мира, при котором не используется знание о внутреннем устройстве… … Википедия

Тестирование программного обеспечения — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектирование • Программирование • Докумен … Википедия

Системное тестирование — программного обеспечения это тестирование программного обеспечения (ПО), выполняемое на полной, интегрированной системе, с целью проверки соответствия системы исходным требованиям. Системное тестирование относится к методам тестирования чёрного… … Википедия

Контрактное программирование — (design by contract (DbC), programming by contract, contract based programming) это метод проектирования программного обеспечения. Он предполагает, что проектировщик должен определить формальные, точные и верифицируемые спецификации… … Википедия

Авторегрессионная условная гетероскедастичность — (ARCH AutoRegressive Conditional Heteroskedastiсity) применяемая в эконометрике модель для анализа временных рядов (в первую очередь финансовых) у которых условная (по прошлым значениям ряда) дисперсия ряда зависит от прошлых значений … Википедия

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

IDEF — Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите статью в соответствии с правилами написания статей … Википедия

Программный проект — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ | Проектирование | Реализация | Тестирование | Внедрение | Сопровождение Модели / методы Agile | Cleanroom | Итеративная | Scrum | RUP | MSF | Спиральная | Во … Википедия

Проектирование ПО — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ | Проектирование | Реализация | Тестирование | Внедрение | Сопровождение Модели / методы Agile | Cleanroom | Итеративная | Scrum | RUP | MSF | Спиральная | Во … Википедия

Spec Explorer — это утилита Microsoft MBT, которая расширяет Visual Studio, предоставляя тесно интегрированную среду разработки для создания поведенческих моделей плюс средство графического анализа для проверки правильности этих моделей и генерации тестовых сценариев на их основе. Мы считаем, что появление этого инструмента стало своего рода переломным моментом: он облегчил применение MBT как эффективной методики в ИТ-индустрии, упростил обучение и предоставил современную среду.

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

Какую роль играет тестируемая модель в Spec Explorer?

Модели обычно создаются вручную и охватывают системные требования и ожидаемое поведение. В случае Spec Explorer тестовые сценарии (test cases) автоматически генерируются по модели, ориентированной на состояния. Они включают как тестовые последовательности (test sequences), так и тестового оракула (test oracle). Тестовые последовательности, логически выводимые из модели, отвечают за приведение тестируемой системы (system under test, SUT) в различные состояния. Тестовый оракул отслеживает изменение SUT и определяет, соответствует ли это изменение поведению, заданному моделью, и в конце генерирует заключение (verdict).

Пример из практики: система чата

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

Рис. 1. Объявления действий

Поскольку эта система чата, по сути, состоит из взаимодействия между пользователями и системой, состояние модели — это просто набор пользователей с их состояниями (рис. 2).

Рис. 2. Состояние модели

Этот метод описывает условие активации и правило обновления для действия LogonRequest, которое было ранее объявлено в коде на Cord. Фактически это правило утверждает:

Композиция двух автоматов


Рис. 3. Композиция двух автоматов

Давайте проанализируем различные сущности в этом графе. Состояния в кружках являются контролируемыми (controllable states). Это состояния, где тест-векторы передаются в SUT. Состояния в ромбах являются наблюдаемыми (observable states). Это состояния, где от SUT ожидается одно или более событий. Тестовый оракул (ожидаемый результат тестирования) уже закодирован в графе событиями и их аргументами. Состояния с несколькими исходящими событиями называют недетерминированными, поскольку событие, предоставляемое SUT в период выполнения, не определено во время моделирования. Заметьте, что исследуемый граф на рис. 3 содержит несколько недетерминированных состояний: S19, S20, S22 и т. д.

Эта конструкция генерирует новое поведение, проходя исходное поведение и генерируя протоколы (traces) в нормальной форме теста. Критерий прохождения (traversal criterion) — охват границ (edge coverage). Каждый шаг в исходном поведении охватывается минимум раз. Граф на рис. 4 показывает поведение после такого прохождения.

Генерация нового поведения


Рис. 4. Генерация нового поведения

Spec Explorer может генерировать код набора тестов (test suite) по поведению с нормальной формой теста. По умолчанию генерируемый код представляет собой модульный тест в Visual Studio. Вы можете напрямую выполнять такой набор тестов с помощью средств тестирования в Visual Studio или воспользоваться утилитой командной строки — mstest.exe. Сгенерированный код теста читаем человеком и легко поддается отладке:

Генератор кода тестов можно настраивать в широких пределах и конфигурировать для генерации тестовых сценариев, ориентированных на разные инфраструктуры тестирования, например на NUnit.

Полная модель Chat включена в установщик Spec Explorer.

В каких случаях MBT оправдывает себя?

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

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

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

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

Когда эти условия выполняются, MBT может дать значительную экономию в усилиях, затрачиваемых на тестирование. Пример тому — Microsoft Blueline, проект, где в рамках инициативы соответствия стандартам протоколов Windows проверялись сотни протоколов. В этом проекте мы использовали Spec Explorer для проверки точности технической документации протоколов относительно реального поведения этих протоколов. На это потребовались гигантские усилия, и Microsoft потратила на тестирование порядка 250 человеко-лет. Microsoft Research провела статистическое исследование, которое показало, что применение MBT сэкономило Microsoft 50 человеко-лет работы тестеров, или примерно 40% усилий по сравнению с традиционным подходом к тестированию.

Тестирование на основе моделей — мощная методика, которая добавляет методологию систематизации в традиционные методики. Spec Explorer является зрелым инструментом, который использует концепции MBT в тесно интегрированной, современной среде разработки, и представляет собой бесплатный Visual Studio Power Tool.

Юминь Чоу (Yiming Cao) — старший руководитель разработок в группе Microsoft Interop and Tools, работает над Protocol Engineering Framework (в том числе Microsoft Message Analyzer) и Spec Explorer. До перехода в Microsoft работал в IBM Corp., потом в начинающей компании, занимающейся технологиями потоковой передачи медийной информации.

Серхио Мера (Sergio Mera) — старший менеджер программ в группе Microsoft Interop and Tools, работает над Protocol Engineering Framework (в том числе Microsoft Message Analyzer) и Spec Explorer. До перехода в Microsoft был научным сотрудником и лектором на факультете компьютерных наук Университета Буэнос-Айреса, работал над модальной логикой и машинным доказательством теорем.

Выражаем благодарность за рецензирование статьи эксперту Microsoft Нико Кисиллофу (Nico Kicillof).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также: