Нагрузочные испытания прогнозирование ошибок

Мониторинг + нагрузочное тестирование = прогнозирование и отсутствие сбоев

Время на прочтение
4 мин

Количество просмотров 5.2K

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

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

Аналитика на коленке

Зарплатный проект — один из самых чувствительных в случае сбоя. Он же наиболее понятен для прогнозирования, поэтому начать решили с него. Из-за высокой связности в моменты пиковых нагрузок могли испытывать проблемы и другие подсистемы, включая дистанционное банковское обслуживание (ДБО). Например, клиенты, обрадованные SMS о поступлении денег, начинали активно ими пользоваться. Нагрузка при этом могла подскакивать более чем на порядок. 

Первую модель для прогноза создавали вручную. Мы взяли выгрузку за последний год и посчитали, в какие дни ожидаются максимальные пики: например, 1-го, 15-го и 25-го числа, а также в последние дни месяца. Эта модель требовала серьезных трудозатрат и не давала точного прогноза. Тем не менее она выявила узкие места, куда нужно было добавить «железа», и позволила оптимизировать процесс перечисления денег, договорившись с якорными клиентами: чтобы не давать зарплату «залпом», транзакции из разных регионов разнесли по времени. Теперь мы обрабатываем их частями, которые IT-инфраструктура банка способна «прожевать» без сбоев.

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

Комплексный подход

В ВТБ внедрили систему мониторинга компании MicroFocus. Оттуда мы взяли сбор данных для прогнозирования, систему хранения и систему генерации отчетов. По сути, мониторинг уже был, оставалось только добавить метрики, модуль предсказания и создать новые отчеты. Поддерживает это решение внешний подрядчик «Техносерв», поэтому основные работы по реализации проекта легли на его специалистов, но модель мы строили самостоятельно. Систему прогнозирования сделали на основе Prophet — этот открытый продукт разработан в Facebook. Он прост в использовании и легко интегрируется с установленными у нас средствами комплексного мониторинга и Vertica. Грубо говоря, система анализирует график загрузки и на основе рядов Фурье делает его экстраполяцию. Есть также возможность добавлять некие коэффициенты по дням, взятые из нашей модели. Метрики снимаются без участия человека, раз в неделю прогноз автоматически пересчитывается, новые отчеты рассылаются адресатам. 

Такой подход выявляет основные цикличности, например, годовые, месячные, квартальные и недельные. Выплата зарплат и авансов, периоды отпусков, праздники и распродажи — все это влияет на количество обращений к системам. Выяснилось, например, что некоторые циклы накладываются друг на друга, а основную нагрузку (75%) на системы дает Центральный федеральный округ. Юридические и физические лица ведут себя по-разному. Если нагрузка от «физиков» относительно равномерно распределена по дням недели (это очень много небольших транзакций), то у компаний 99,9% приходится на рабочее время, притом транзакции могут быть короткими, а могут обрабатываться в течение нескольких минут и даже часов.

На основании полученных данных определяются длительные тренды. Новая система выявила, что люди массово уходят в ДБО. Это всем известно, но таких масштабов мы не ожидали и поначалу в них не поверили: количество обращений в офисы банка чрезвычайно быстро снижается, и ровно на столько же растет количество дистанционных транзакций. Соответственно, нагрузка на системы тоже растет и будет расти дальше. Сейчас мы прогнозируем нагрузку до февраля 2020 года. Нормальные дни получается предсказать с погрешностью в 3%, а пиковые — с погрешностью в 10%. Это хороший результат.

Подводные камни

Без трудностей, как водится, не обошлось. Механизм экстраполяции с использованием рядов Фурье плохо переходит через ноль — мы знаем, что в выходные юридические лица генерируют мало транзакций, но модуль предсказания выдает далекие от нуля значения. Можно было поправить их принудительно, но костыли — не наш метод. Кроме того, пришлось решить проблему безболезненного съема данных с систем-источников. Регулярный сбор информации требует серьезных вычислительных ресурсов, поэтому мы построили быстрые кэши с использованием репликации, получаем бизнес-данные уже с реплик. Отсутствие дополнительной нагрузки на мастер-системы в таких случаях — блокирующее требование.

Новые вызовы

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

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

Что такое нагрузочное тестирование?

Нагрузочное тестирование — это подмножество тестирования производительности, используемое для программного обеспечения, веб-сайтов, приложений и связанных с ними систем. Это нефункциональный тест, который имитирует поведение нескольких пользователей, одновременно обращающихся к системе. Также называемое «объемным тестированием», нагрузочное тестирование воспроизводит производительность, стабильность и функциональность веб-системы в реальных условиях, поэтому оно является одним из последних и наиболее важных видов тестирования, проводимых перед развертыванием.

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

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

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

Зачем нужно нагрузочное тестирование?

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

Компаниям необходимо проводить нагрузочное тестирование по трем основным причинам:

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

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

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

Преимущества нагрузочного тестирования

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

Автоматизация нагрузочного тестирования

1. Предотвращает простои и сбои в работе приложений

Использование нагрузочного тестирования помогает оптимизировать систему для нормальных и пиковых нагрузок и выявить возможные простои из-за неожиданной нагрузки.

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

2. Мониторинг стандартов производительности

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

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

3. Сокращение расходов

Время простоя сети обойдется компании в среднем в 5 600 долларов в минуту (300 000 долларов в час). Кроме того, пользователи, которые часто сталкиваются с нефункциональным приложением, с большей вероятностью никогда не вернутся к нему.

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

4. Повышает эффективность

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

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

5. Соблюдение соглашения об уровне обслуживания

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

6. Планирование мощностей

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

(Подробнее о разнице между нагрузочным и стресс-тестом вы узнаете далее в этом руководстве).

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

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

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

Вызов 1: Неосязаемость

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

Типы тестирования, ориентированные на сценарии «что если», обычно остаются без внимания. Хотя нагрузочное тестирование может помочь в анализе после перегрузки пользователей, оно гораздо более полезно для организации в качестве профилактического инструмента.

Вызов 2: Сложность

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

Исключением в этом вопросе является профессиональная платформа для нагрузочного тестирования, такая как ZAPTEST load testing, которая сосредоточится на предоставлении понятного, удобного интерфейса. ZAPTEST LOAD предлагает возможность создавать записанные и основанные на API сценарии, выполняющие бизнес-процессы конечного пользователя и измеряющие сквозные транзакции в системе под нагрузкой (SUL).

Виды нагрузочных испытаний

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

Часто задаваемые вопросы по автоматизации функционального тестирования

1. Нагрузочное тестирование вручную

Ручное нагрузочное тестирование — это когда система оценивается без автоматизированных инструментов нагрузочного тестирования, то есть симулированные пользователи создаются вручную.

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

2. Инструменты для внутреннего тестирования

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

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

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

3. Инструменты тестирования с открытым исходным кодом

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

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

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

4. Инструменты автоматизации нагрузочного тестирования корпоративного класса

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

Преимущества использования услуг по тестированию нагрузки на предприятии включают:

  • Способность генерировать огромное количество пользовательского трафика
  • Возможность захвата/воспроизведения
  • Возможность поддержки нескольких протоколов
  • Возможность восстановления утраченных документов
  • Ввод тестовой документации одним щелчком мыши

К популярным компаниям, занимающимся нагрузочным тестированием предприятий, относятся ZAPTEST и их партнер по технологической отрасли, компания Gartner. (Те, кто знаком с индустрией автоматизации, могут также узнать ZAPTEST по их известной работе в области автоматизации роботизированных процессов). Более того, БЕСПЛАТНАЯ версия ZAPTEST предлагает бесплатную функциональность LOAD, позволяющую пользователям проводить тестирование производительности с использованием новейших функций и углубленного анализа.

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

Что следует тестировать с помощью нагрузочного тестирования?

Контрольный список тестирования программного обеспечения

Автоматизированные инструменты нагрузочного тестирования генерируют данные, используемые для точного ответа на несколько жизненно важных вопросов:

  • Сколько пользователей у приложения (сайта, системы и т.д.) в обычные часы? В часы пик?
  • На какие элементы приложения влияет какое количество пользователей?
  • Какое количество пользователей приведет к тому, что сайт перейдет в автономный режим?
  • Когда у системы закончатся ресурсы?
  • Как быстро загружается сайт?

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

1. Базовые показатели

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

2. Производительность эталона

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

Метрики/цели нагрузочного тестирования

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

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

что такое автоматизация тестирования программного обеспечения

1. Время реакции

Время отклика является основной метрикой, измеряемой при автоматическом нагрузочном тестировании. Сколько времени требуется системе для ответа после того, как пользователь отправил запрос? (Время ответа более 10 секунд, скорее всего, заставит пользователя уйти).

2. Пропускная способность

Пропускная способность — это количество отправленных и полученных данных. При нагрузочном тестировании он обычно выражается в количестве посещений в секунду (hps) или транзакций в секунду (tps).

3. Метрики, специфичные для аппаратного обеспечения

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

4. База данных

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

Устранение некоторой путаницы

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

Тестирование производительности в сравнении с нагрузочным тестированием

Тестирование производительности — это общий термин для всех методов, используемых для измерения стабильности, отзывчивости, потребности в ресурсах и других показателей производительности программной системы, особенно в том, что касается пользовательского опыта.

Нагрузочное тестирование является подкатегорией тестирования производительности. Другие распространенные типы включают:

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

Тесты производительности — это нефункциональные тесты, которые обычно проводятся в конце цикла разработки или после завершения разработки.

Стресс-тестирование и нагрузочное тестирование

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

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

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

Функциональное тестирование и нагрузочное тестирование

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

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

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

Характеристики эффективного нагрузочного испытания

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

1. Использует реалистичные сценарии

Сценарии тестирования должны как можно ближе напоминать реальное поведение пользователей. Внимательно изучите поведение пользователей. Почему они используют ваше приложение? Какие типы устройств они используют для доступа к нему?

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

2. Не начинается с нуля

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

3. Использует реальные данные

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

Следует рассмотреть две полезные категории данных:

  • Данные о движении пользователя: используемые устройства и браузеры, пройденные пути и точки падения.
  • Системные данные: время первого прощания, загрузка DOM

4. Анализ и повторение

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

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

Кто участвует в процессе нагрузочного тестирования?

кто должен заниматься инструментами автоматизации тестирования программного обеспечения и планированием

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

1. Инженеры по развитию

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

2. Другие испытатели

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

3. Конечные пользователи/заинтересованные стороны

Их цели определяют их поведение в приложении. Понимание их мотивации в системе помогает составить сценарии тестирования.

Процесс нагрузочного тестирования

как работает автоматизация тестирования в таких отраслях, как, например, банковское дело

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

Хотя специфика нагрузочного тестирования зависит от бизнес-модели, аппаратного обеспечения, пользовательской базы и других индивидуальных факторов, в большинстве случаев тестирование следует этой базовой структуре:

1. Определение целей

Четкие цели приводят к более полезным результатам. Определите наиболее важные функции приложения для тестирования.

2. Установление базового уровня

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

3. Создание среды нагрузочного тестирования

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

4. Разработка сценариев нагрузки

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

5. Выполнение тестов

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

6. Послетестовый осмотр

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

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

Примеры нагрузочных испытаний

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

1. Сайты

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

2. Сервер

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

3. Жесткие диски

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

4. Почтовый сервер

Почтовые серверы тестируются на нагрузку путем имитации активности пользователей. Большинство тестов нагрузки почтового сервера имитируют не менее 1 000 пользователей.

5. Интерфейс прикладного программирования

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

6. Принтер

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

Нагрузочные тестовые примеры

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

1. Рекламные мероприятия

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

2. Публичные веб-порталы

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

3. Тестирование сервера

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

4. Тестирование передачи файлов

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

Как написать тестовый пример нагрузки

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

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

Убедитесь, что план нагрузочного тестирования включает следующие элементы:

1. Цели и требования

Почему вы проводите этот тест? Какие конкретные метрики вы тестируете, и какие результаты определят тип ответа относительно производства?

2. Границы

Опишите объем нагрузочного тестирования системы или браузера. Вы проводите тестирование компонентов или комплексное тестирование? Какую нагрузку на трафик вы тестируете (пиковую, нормальную или какую-то другую)?

Масштаб может измениться во время тестирования, особенно если вы столкнетесь с неожиданным событием. Тем не менее, вы все равно хотите изначально определить четкие границы тестирования.

3. Рабочая нагрузка

Вам необходимо подробно описать свой профиль нагрузки, который состоит из следующего:

  • Ключевые сделки
  • Распределение нагрузки на транзакцию
  • Сроки проведения сделки

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

4. Здоровье сервера

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

5. Сценарий тестирования

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

6. Примеры тестовых примеров нагрузки

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

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

Обратите внимание, что в вышеприведенных сценариях четко определены цели, границы и метрики.

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

Часто задаваемые вопросы по автоматизации функционального тестирования

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

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

1. Бесплатные инструменты нагрузочного тестирования

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

  • JMeter — Java-приложение, основанное на корпоративном инструменте LoadRunner.
  • Taurus — Инструмент, позволяющий писать собственные нагрузочные тесты.
  • k6 — Инструмент нагрузочного тестирования, ориентированный на инфраструктуру back-end и предназначенный для опытных разработчиков.
  • SoapUI — Нагрузочный тест SoapUI использует простой протокол доступа к объектам. Также доступна коммерческая версия этого приложения.
  • Locust — инструмент нагрузочного тестирования, известный своим относительным удобством для пользователя и небольшими потребностями в ресурсах.
  • ZAPTEST FREE Edition предлагает бесплатное тестирование производительности через LOAD Studio, где пользователи могут использовать записанные и основанные на API сценарии и даже коррелировать с функциональным тестированием.

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

Преимущества бесплатных инструментов нагрузочного тестирования

Бесплатные инструменты нагрузочного тестирования имеют несколько заметных преимуществ.

1. Низкая стоимость

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

2. Гибкость

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

3. Более быстрая модернизация

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

Ограничения бесплатных инструментов нагрузочного тестирования

Хотя бесплатные инструменты нагрузочного тестирования имеют значительные преимущества, компаниям следует обратить внимание на потенциальные недостатки.

1. Отсутствие поддержки

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

2. Сложность

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

3. Ограничения нагрузки на пользователя

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

Инструменты для нагрузочного тестирования предприятий

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

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

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

Преимущества инструментов корпоративного тестирования

Хотя конкретные функции и простота работы зависят от конкретного продукта, лучшие инструменты нагрузочного тестирования имеют следующие преимущества.

1. Простота использования

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

2. Поддержка клиентов

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

3. Надежность

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

Ограничения инструментов корпоративного тестирования

Хотя инструменты корпоративного тестирования имеют множество преимуществ по сравнению с другими типами, они также содержат некоторые потенциальные ограничения.

1. Стоимость

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

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

2. Кривая обучения

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

Когда следует использовать корпоративные и бесплатные инструменты нагрузочного тестирования?

Бесплатные инструменты нагрузочного тестирования имеют свое место во многих организациях. Они являются наиболее экономичным вариантом, что делает их популярными среди стартапов и других предприятий с ограниченными ресурсами.

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

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

Контрольный список нагрузочного тестирования

Контрольный список тестирования программного обеспечения

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

1. Веб-сервер

  • Достаточно ли у вас пропускной способности для предотвращения образования узких мест?
  • Может ли система обрабатывать достаточное количество транзакций в секунду?
  • Достаточно ли у вас веб-серверов, чтобы справиться с загруженными и простаивающими угрозами?

2. Хозяин

  • Есть ли у сетевых интерфейсов проблемы с процессором, памятью или дисковым пространством?
  • Какие процессы выполняются на хосте?

3. Сервер приложений

  • Какое использование ЦП необходимо для каждого уровня нагрузки?
  • Утечка памяти в системе при различных уровнях нагрузки?
  • Правильно ли серверы приложений распределяют нагрузку?

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

Заключение

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

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

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

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

РУКОВОДСТВО ПО НАГРУЗОЧНОМУ ТЕСТИРОВАНИЮ | МАТЕРИАЛЫ ДЛЯ ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

В этом руководстве по нагрузочному тестированию мы рассмотрим следующее

Что такое нагрузочное тестирование?

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

Нагрузочное тестирование — это подмножество производительности. Тестирование и является типом нефункционального тестирования.

Подробнее: более 100 типов тестирования программного обеспечения

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

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

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

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

Примеры нагрузочного тестирования:

Некоторые основные примеры нагрузочного тестирования:

  • Тестирование веб-сайта путем загрузки серии больших файлов из приложения
  • Тестирование сервера путем одновременного запуска нескольких приложений на сервере
  • Тестирование принтера путем одновременного назначения принтеру большого количества заданий в очереди на печать
  • Тестирование жесткого диска путем непрерывной записи и чтения данных
  • Тестирование почтового сервера с тысячами одновременных пользователей

Почему важно нагрузочное тестирование?

Нагрузочное тестирование важно, потому что оно отвечает на некоторые ключевые вопросы производительности и дает уверенность в системе.

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

Важность нагрузочного тестирования — примеры

Возьмем, к примеру, один из самых больших дней продаж Amazon (Prime Day) в Июль 2018 г. Не удалось защитить достаточно серверов, чтобы справиться с всплеском трафика в Prime Day, который произошел в течение 15 минут после начала Prime Day. Один час простоя Amazon в Prime Day может стоить компании от 72 до 99 миллионов долларов упущенных продаж

Нью-Йоркская фондовая биржа внезапно закрылась и не возобновляла торги более 3 часов в 2018 году. Было сказано, что сбой был вызван технической «проблемой с конфигурацией».

Рейсы United Airlines в США были остановлены более чем на час из-за «проблем с автоматизацией». Авиакомпания опубликовала заявление, в котором говорится, что из-за проблем с подключением к сети рейсы не выполняются. Это приводит к потере дохода и доли рынка.

Как проводить нагрузочное тестирование

Процесс нагрузочного тестирования включает следующие этапы.

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

Преимущества и недостатки нагрузочного тестирования:

Преимущества нагрузочного тестирования:

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

Недостатки нагрузочного тестирования:

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

< h3>Разница между нагрузочным тестированием и стресс-тестированием (нагрузочное тестирование и стресс-тестирование)

НАГРУЗОЧНОЕ ТЕСТИРОВАНИЕ НАГРУЗОЧНОЕ ТЕСТИРОВАНИЕ
Это подмножество тестирования производительности Это подмножество тестирования производительности
Целью нагрузочного тестирования является определение ограничить систему, установить SLA приложения и проверить, как система справляется с большой нагрузкой Цель стресс-тестирования — выяснить, как система ведет себя при экстремальных нагрузках и как она восстанавливается после сбоя
Ограничение нагрузки – это порог обрыва Ограничение нагрузки выше порога перерыва
Атрибуты, которые проверяются при нагрузочном тестировании: пиковая производительность, пропускная способность сервера, время отклика при различных уровнях нагрузки , требования к балансировке нагрузки и т. д. Атрибуты, которые проверяются при стресс-тестировании, – это стабильность, время отклика, пропускная способность и т. д.,
Нагрузочное тестирование выполняется для проверки производительности системы при экстремальной нагрузке. Стресс-тестирование выполняется для проверки устойчивости системы при экстремальной нагрузке.
Это помогает нам понять, как система ведет себя при ожидаемой нагрузке. Это помогает нам понять, как система ведет себя при экстремальной нагрузке, превышающей ожидаемую мощность.
Здесь тестовыми данными будет огромное количество пользователей . Здесь тестовыми данными будет огромное количество пользователей и огромный объем данных.
Используется для определения верхнего предела емкости системы. Используется для определения производительности и возможности восстановления системы, когда она подвергается нагрузке, превышающей верхний предел емкости системы. .
Нагрузочные тесты помогают тестировщику определить узкое место, а также понять основную причину таких проблем. Стресс-тесты помогают тестировщику выявлять утечки памяти, замедления работы, проблемы безопасности и повреждение данных.

< strong>Какие популярные инструменты нагрузочного тестирования используются для нагрузочного тестирования?

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

Некоторые из инструментов: LoadRunner, Apache JMeter, WebLOAD, LoadView и Loadrunner.

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

Посмотрите наш полный список популярных инструментов нагрузочного тестирования.

Вывод:

Нагрузочное тестирование проверяет потенциальные ограничения производительности приложения. Успешное нагрузочное тестирование направлено на создание качественных приложений, которые могут обслуживать большое количество пользователей.
TAG: qa

Всем привет!

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

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

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

Автор арта на «обложке» — Orest Terremoto.

Содержание

  1. О Miro и об авторе
  2. Что такое нагрузочное тестирование?
  3. Что нужно для нагрузочного тестирования?
  4. Этапы нагрузочного тестирования
  5. С чего начинали нагрузочное тестирование в Miro
  6. С какими препятствиями столкнулись при развитии нагрузочного тестирования в Miro
  7. Роли, которые в Miro решили воспитывать в инженерах команды нагрузочного тестирования
  8. Некоторые общие принципы работы QA в Miro
  9. Распределённая команда нагрузочного тестирования в Miro
  10. Процесс нагрузочного тестирования в Miro

    1. Детализация требований
    2. Подготовка тестового окружения
    3. Подготовка сценария
    4. Запуск теста и измерения
    5. Анализ
    6. Отчёт
  11. Результаты внедрения нагрузочного тестирования в Miro
  12. Планы в отношении нагрузочного тестирования в Miro
  13. Пожелания читателям
  14. Полезные ссылки

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

Цель Miro — дать возможность распределённым командам работать так эффективно, как будто они находятся в одном помещении.

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

В прошлом году внезапно множество людей перешло на удалёнку по известным причинам и им понадобились инструменты для удалённой работы, подобные нашему. Количество зарегистрированных пользователей в Miro с начала 2020 до весны 2021 выросло в 8 раз, другие метрики росли схожим образом. Поэтому нам понадобилось срочно развивать все имеющиеся наработки по нагрузочному тестированию. Причём это не краткосрочная задача, а, учитывая перспективы рынка, весьма долгоиграющая. Что получилось и что ещё предстоит — об этом и будет статья.

Сам я уже около 12 лет занимаюсь разработкой ПО и последние несколько лет — разработкой инструментов автоматизации тестирования. Ещё я активно участвую в работе над публичной базой знаний по НТ вместе с соответствующим сообществом, ссылки про это и многое другое будут в конце статьи.

Что такое нагрузочное тестирование?

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

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

Что нужно для нагрузочного тестирования?

Итак, мы определились, НТ нам нужно, теперь перед его проведением необходимо наличие ряда ресурсов:

  1. Общие требования. Нам нужно понимать, чего мы ожидаем от нашей системы в контексте нагрузки и производительности, хотя бы в общих чертах. Это может звучать просто, но не всегда у людей есть ясное представление о таких требованиях. «Система должна отвечать быстро под высокой нагрузкой» — это не требование, это пожелание. Я покажу примеры удачнее дальше в статье.
  2. Специалисты. Для проведения НТ нужны инженеры. Поскольку серьёзное тестирование всегда требует автоматизации, нужны инженеры с навыками тестирования и разработки, а также аналитики и девопсы.
  3. Платформа для тестового окружения. Если вы делаете НТ в первый раз — вам определённо понадобится подготовить инфраструктуру. Хорошо если у вас внедрён подход IaC (англ. infrastructure as a code, инфраструктура как код), он очень пригодится для создания окружения, подобного проду. Если нет — надо внедрять или придётся страдать даже на небольших конфигурациях. И в подавляющем большинстве случаев тестирование на проде — плохая идея. Но есть и исключения, можете погуглить «Netflix testing in production».
  4. Время. НТ — это очень затратный по времени процесс, особенно когда вы делаете его впервые. Автоматизация экономит много времени, но всё равно нужно быть готовым потратить на подготовку и проведение НТ несколько дней или существенно больше, зависит от масштабов прода, используемого стэка, сценариев использования и поставленных задач.

Этапы нагрузочного тестирования

Мы собрали то, что необходимо для НТ. Перейдём к плану действий.

  1. Детализация требований — что требуется от системы в терминах нагрузки и производительности, какой тип теста проводим и какие метрики необходимо собрать для проверки требований. Как я писал ранее, общие требования нужны ещё до тестирования, а когда процесс начат, нужно их декомпозировать в предельно конкретные и технические требования. Также нужно выбрать тип теста, реализуемого в тестовом сценарии, и составить список метрик, на сбор которых нужно настроить приложение, сценарий и инфраструктуру. Это аналитическая задача.
  2. Подготовка тестового окружения — где будем моделировать прод и пользователей. Необходимо выбрать одно из доступных или создать новое тестовое окружение под разработанные требования и настроить сбор метрик, нужных для оценки степени соответствия требованиям. Это задача DevOps специалистов.
  3. Выбор инструмента тестирования и подготовка сценария — как будем моделировать поведение пользователей. В сценарии тоже нужно запрограммировать сбор метрик. Это задача разработки.
  4. Проведение теста и замеры — каковы значения метрик. Это может звучать просто, но весьма редко всё работает с первого раза. Бывает нужно откатиться на один из предыдущих шагов и что-то поправить. На данном этапе проводится анализ некоторых ключевых показателей, чтобы убедиться, что нет критических ошибок теста. Этот шаг — задача тестирования. Основная работа по анализу будет вестись на следующем этапе.
  5. Анализ — соответствует ли система требованиям, есть ли проблемы. Если собираются правильные метрики, всё должно быть относительно просто, хотя и трудоёмко, а если нет — опять может понадобиться откатиться вплоть до первого шага. Здесь, в отличие от предыдущего шага, мы глубоко погружаемся в большое количество метрик чтобы выявить все возможные значимые факты. Это аналитическая задача.
  6. Подготовка отчёта — какие знания мы получили?.. Это самый важный этап. НТ — процесс очень затратный по ресурсам и вы явно захотите получить максимум знаний от него. Снова аналитическая задача.

Есть ещё один этап, опциональный — план улучшения системы, то есть ответ на вопрос «как можно исправить обнаруженные недостатки?». Это не относится напрямую к нагрузочному тестированию, но упомянуто здесь, потому что результаты НТ в большинстве случаев должны быть «actionable», побуждать к действиям. Как видно из списка выше, нужны разные роли для проведения всего процесса НТ и эти роли должны сочетать в себе или одни люди, или нужно привлекать разных специалистов.

С чего начинали нагрузочное тестирование в Miro

К росту нагрузки мы начали готовиться задолго до пандемии и вот что у нас было:

  1. Несколько человек занимались НТ часть своего времени.
  2. Мы использовали JMeter как наиболее популярное решение. У нас был свой плагин для WebSocket, так как ключевой функционал Miro связан с работой с досками и требует очень быстрого клиент-серверного взаимодействия, как в играх. Кстати движок, с которого много лет назад начинала компания, был как раз игровым. Это с самого начала дало высокую интерактивность и скорость отклика.
  3. Наш кластер был prod-like. К счастью, у нас был IaC. Нельзя сказать, что IaC — это серебряная пуля, сложности с ним тоже есть, но без него сложности с ростом масштаба становятся фатальными препятствиями.
  4. Один достаточно объёмный и сложный WebSocket&HTTP API тест.

Ссылки на подробности про предыдущие наработки и многое другое будут в конце статьи.

С какими препятствиями столкнулись при развитии нагрузочного тестирования в Miro

НТ, особенно для сложной системы, — задача непростая. Чем глубже мои коллеги погружались в неё, тем больше возникало сложностей.

Технические препятствия:

  1. JMeter перестал нас устраивать. В нём было очень неудобно программировать и отлаживать. Сложные сценарии — это почти всегда разработка, а не заполнение форм или написание отдельных небольших скриптов. Сценарий в JMeter — это не программа в обычном понимании, а сочетание инструкций, заполненных в формах, с встроенным кодом скриптов. Также в JMeter плохо с контролем версий, т.к. сценарий хранится в огромном XML. А у нас большое количество WebSocket взаимодействия со своим бинарным протоколом и достаточно сложные сценарии, над которыми работает несколько человек. Не хотелось изобретать обходные пути вокруг «особенностей» JMeter.
  2. Много ручных действий для каждого запуска НТ на тестовом окружении. TODO лист состоял из 16 пунктов для каждого запуска, которые надо было проделывать вручную… И это была боль… А боль — это сильный стимул что-то поменять.
  3. Не хватало инструментов для генерации разных распределений тестовых данных. А сценарии тестирования для разных компонентов возможны разные и нужно было уметь быстро создать нужное распределение. Идеально использовать базу максимально близкую проду и откатывать после каждого теста, но не всегда это возможно: это могут быть огромные объёмы и надо чистить сенситивные данные пользователей, а воспроизводить синтетические данные в нужном объёме — тоже сложная задача.

Организационные препятствия:

  1. Много задач.
  2. Недостаточно опыта.
  3. Недостаточно доступных людей.

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

Итак, мы столкнулись с рядом трудностей в проведении НТ и конечно можно было подумать «а давайте просто наймём больше QA инженеров» и действительно надо было нанимать людей специально для НТ, но вопрос на самом деле шире. QA инженеров нанять недостаточно, учитывая сложность этого направления необходимо было строить многопрофильную команду. Причём часть ролей отводилась будущим сотрудникам, а часть — имеющимся.

Так почему нам было недостаточно просто QA? Главная причина — прогнозируемый уровень сложности задач по НТ. У нас несколько десятков команд, все разрабатывают компоненты, которые должны работать в соответствии с требованиями по производительности в составе сложной системы. Но у каждой компании свой масштаб разрабатываемых систем. Кому-то может хватить просто одного человека, который умеет в JMeter, и может даже особо большого кластера для подачи нагрузки не понадобится. Кому-то нужно будет значительно больше, чем надо было нам. Всё зависит от уровня сложности системы.

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

  1. QA. Должен уметь искать проблемные места и выстраивать процесс обеспечения качества.
  2. Аналитик. Должен уметь выявлять причинно-следственные связи, исследовать паттерны поведения пользователей и разбираться в сложных системах.
  3. Разработчик. Должен уметь проектировать и программировать средства автоматизации и тестовые сценарии.
  4. Преподаватель*. Должен уметь помогать учиться специалистам из других команд и готовить базу знаний, причём здесь речь не только про документацию.
  5. DevOps*. Должен ориентироваться в архитектуре тестового окружения и уметь её модифицировать.

* 4-я и 5-я роли только для участников «центра» НТ команды, а не для всех НТ инженеров, о конкретной структуре я расскажу чуть позже.

Некоторые общие принципы работы QA в Miro

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

Вот ключевые из этих принципов:

  1. Ответственность за качество лежит на всей команде. Не только на QA инженерах.
  2. Тесты всех уровней пишут QA и разработчики. Чтобы не было пинг-понга «сделал-проверь-поправь-проверь-поправь-проверь-вроденорм».
  3. Минимизация эффекта «единой точки отказа». Чтобы не было так, что QA в отпуске, а критичные баги просочились на прод.
  4. Главный фокус QA инженеров — построение процесса разработки с точки зрения качества. Не столько искать ошибки, сколько предотвращать. Уровень задач становится выше, чем просто тестирование.

Распределённая команда нагрузочного тестирования в Miro

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

  1. «Центр» — команда НТ — центр компетенций и поддержки. Зоны ответственности:

    1. Разработка инструментария (особое внимание к качеству!). У функциональных команд заказчик — клиенты Miro, у нашей команды заказчик — функциональные команды. Внутренние инструменты не должны быть поделками, сделанными «на коленке». Это должны быть полноценные и качественные продукты с должным уровнем поддержки всех видов. Функциональные команды и так загружены и повышать их уровень стресса плохими инструментами — недопустимо. Поэтому у нас есть:
      1. Мастер-классы.
      2. Miro доски-презентации.
      3. Confluence документация.
      4. Версии, changelog, детальная отладочная информация в ходе работы инструмента.
      5. Общий репозиторий с примерами кода и всеми НТ сценариями, чтобы было единое место, где собрана вся практика НТ.
      6. Отдельные чаты на каждый инструмент для поддержки, сообщений о релизах, багрепортов и фичереквестов.
    2. Помощь в обучении и консультирование коллег из функциональных команд, не только QA инженеров.
    3. Проведение больших тестов, когда нужна проверка суммы функционала от множества команд.
    4. Поддержка тестовых окружений совместно с QA Automation Team и DevOps Team.
  2. «Агенты» — QA инженеры и разработчики в функциональных командах — проводят более узконаправленные тесты.

Процесс нагрузочного тестирования в Miro

Шаг 1/6. Детализация требований

Мы рассмотрели, что такое НТ и посмотрели на то, как устроена распределённая команда НТ в Miro. Теперь пройдёмся по этапам НТ, наложенным на наш процесс. Начнём с самого важного этапа.

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

Источники требований

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

Остановлюсь подробнее на паре используемых нами инструментов:

  1. Looker — инструмент для сбора и анализа бизнес-показателей. Мы сформулировали требования, далее в ходе составления сценария в большинстве случаев нам нужно опираться на множество текущих показателей работы прода. Здесь могут помочь такие бизнес-показатели, как данные о том, какой диапазон размера досок используется каким количеством пользователей.
  2. Grafana — примерно то же самое, но для системных метрик. Например, мы хотим проверить требование «Miro должен держать 500К онлайн пользователей с такими-то показателями скорости ответа по критичным компонентам». Чтобы смоделировать это, нужно знать, как при существующем уровне нагрузки используется сайт, какими функциями и с какой частотой пользуются клиенты, чтобы в итоге перевести абстрактных «500К пользователей» в RPS по основных типам запросов. В получении RPS как раз помогает Grafana.

Выбор модели нагрузки

Различают две модели нагрузки:

  1. Закрытая. В генераторе нагрузки есть очередь определённого размера: если она заполнена и ответы от сервера ещё не пришли, то новые запросы не отправляются до тех пор, пока не поступят ответы на старые запросы. Серверу стало плохо? Подождём, пусть разгребёт.
  2. Открытая. Генератор нагрузки отправляет запросы, не дожидаясь ответов сервера и не обращая внимания на его состояние. Серверу стало плохо? Это его проблемы, жизнь такая, продолжаем грузить.

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

Выбор типа теста

Для разных требований нужны разные тесты. Вот основные примеры типов тестов:

  1. Smoke-тесты — проверка всех составляющих НТ на малом масштабе.
  2. Тесты на базовый уровень — снимаем текущие метрики работы системы.
  3. Тесты на объём — выдержит ли система повышенную нагрузку при «нормальном» сценарии использования?
  4. Тесты на лимиты — до какого уровня можно грузить систему, прежде чем она начнёт деградировать?
  5. Тесты на стабильность — как долго система сможет держать определённый уровень нагрузки?
  6. Тесты на масштабируемость — ведёт ли добавление новых серверов к поддержке большего числа запросов?
  7. Тесты на пиковые нагрузки — выдержит ли система резкое повышение нагрузки?
  8. Тесты на восстанавливаемость — достаточно ли быстро система восстанавливается после сбоя?
  9. Тесты на взаимодействие — эффективно ли взаимодействуют компоненты системы?
  10. Деградационные тесты — один или несколько тестов, описанных ранее, запускаются автоматизированно и регулярно, с построением отчётов с отображением динамики за длительный период.

Эти тесты могут быть совмещены и не все могут быть нужны.

Декомпозиция требований

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

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

Детализация означает конвертацию пользователей в RPS, основываясь на существующем и ожидаемом профилях использования. Такая конвертация уместна только для Stateless протоколов, как самые распространённые HTTP и HTTP, а для Stateful число подключенных клиентов может быть очень важно, как например для FTP, протокола работы с MySQL или некоторых банковских протоколов. Ещё один важный момент — не доверяйте средним значениям времён ответа, используйте персентили, т.к. среднее зачастую является плохой метрикой.

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

  1. RT1. Запрос типа #1 при нагрузке X1 RPS должен иметь p(50) в A1 ms, p(95) в B1 ms …
  2. RT2. Запрос типа #2 при нагрузке X2 RPS должен иметь p(50) в A2 ms, p(95) в B2 ms …
  3. ER1. Процент ошибок для критичных сервисов не должен превышать N%
  4. ER2. Процент ошибок для некритичных сервисов не должен превышать M%
  5. IS1. Нагрузка CPU не должна превышать P%
  6. IS2. Система должна иметь резерв для обработки +10% нагрузки

Метрики

Есть очень хорошая книга по SRE от Google, где среди прочего описаны «4 золотых сигнала»:

  1. Время ответа. Именно то, что заметит пользователь.
  2. Трафик. RPS, число запросов в секунду, всё просто.
  3. Ошибки. Об их максимально допустимом проценте могут быть свои требования.
  4. Насыщение. Если даже требования по остальным показателям выполняются, но при этом сервера загружены по полной — это должно наводить на соответствующие выводы. Всегда нужно иметь запас.

И даже если попытаться, сложно придумать другие необходимые категории метрик. Все 4 необходимы и достаточны.

Естественно, метрики всех четырёх типов тесно взаимосвязаны. Повышение трафика и соответственно насыщения со временем приведёт к росту времени ответа и ошибок. Резко упавшее время ответа может говорить о том, что у нас отказала БД и время ответа упало из-за того, что все запросы просто быстро завершаются с ошибкой.

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

APDEX

Индекс производительности приложений Application Performance inDEX (APDEX) может быть использован для преобразования ряда времён ответов в одно число, если определены диапазоны удовлетворительных, допустимых и недопустимых времён.

Значения APDEX легки в сравнении, но тяжелы в интерпретации.

Шаг 2/6. Подготовка тестового окружения

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

Тестовое окружение состоит из двух частей:

  1. Целевая система (имитация прода).
  2. Кластер подачи нагрузки (имитация пользователей).

Для их реализации у нас используются:

  1. IaC

    1. AWS. Когда счёт используемых серверов идёт на десятки и сотни, без автоматизации никак. У нас был давно принят выбор перейти от арендованного железа в облако. Вопрос выбора конкретного провайдера (AWS, Google Cloud, Microsoft Azure) — тема отдельного доклада. Я лишь скажу, что в своих инструментах я активно использую AWS API и это на самом деле удобно, не знаю как можно было бы жить без этого или аналогичного инструмента.
    2. Terraform, Terragrunt (дефакто стандарт для IaC)
    3. Ansible. Систем управления конфигурациями много и многие по-своему хороши, тут надо девопсов спрашивать почему Ansible, хотя мне как в основном Python-разработчику нравится этот выбор :)
  2. Свой управляющий инструмент (консольная Python утилита с множеством команд, опций и конфигом), который выполняется в части подготовки тестового окружения (он же ещё используется при запуске сценария)

    1. Запуск кластеров целевой системы и подачи нагрузки.
    2. Деплой версий и запуск приложений на серверах приложений.
    3. Создание серверов подачи нагрузки.

Шаг 3/6. Подготовка сценария

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

Эскиз на человеческом языке

Перед началом разработки хорошей практикой является создание эскиза сценария на «человеческом языке». Это поможет выразить, какое поведение пользователей планируется моделировать без траты времени на погружение в детали инструментов НТ. И инструмент тоже поможет подобрать, если такой вопрос стоит. А ещё, при составлении отчёта, такой эскиз поможет ревьюерам понять моделируемое поведение пользователей, не погружаясь в код.

Как было показано ранее, на этапе детализации требований мы разделяем активность пользователей на отдельные RPS. Иногда бывает нужно ещё объединять запросы в подобие подсценария.

Вот пример такого эскиза сценария:

  1. Подсценарий #1 — получение уведомлений (X RPS)
  2. Подсценарий #2 — получение статуса серверов (Y RPS)
  3. Подсценарий #3 (Z SPS)
    1. Логин
    2. Открытие дэшбоарда
    3. Открытие доски с W1 виджетов для U1 доли пользователей, W2 для U2 и так далее
    4. Движение курсором
    5. Добавление нескольких виджетов
    6. Закрытие доски

Выбор инструмента

В данный момент у нас используется три инструмента для НТ:

  1. Свой инструмент для моделирования работы с досками.
  2. k6. Для него мы в своём управляющем инструменте реализовали обёртку для кластерного запуска и сбора результатов.
  3. JMeter (legacy, практически не используется).

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

Исследование

Ещё один шаг перед написанием кода — исследование того, как реальный фронтенд взаимодействует с бэкендом с помощью инструментов разработчика в браузере и попробовать несколько простых взаимодействий вручную, например через Postman.

Но иногда проще начать сразу с кода.

Данные

Было бы идеально тестировать на базе, подобной проду, и сбрасывать её перед каждым тестом, но это очень редко возможно из-за колоссальных объёмов данных и необходимости использования сложных инструментов чистки реальных данных. Поэтому у нас есть свой инструмент генерации данных, который умеет создавать в нужном объёме и в разумный срок основные бизнес-сущности: пользователей, команды, организации, доски разного размера, проекты и строить связи между ними. Этот генератор использует то же API, что и основное веб-приложение, и каждый сеанс генерации данных представляет собой немного хаотичный пример НТ. На выходе получается подробный лог и набор файлов, которые можно подключать к НТ сценариям.

Советы по коду

При написании кода может быть полезно следовать таким рекомендациям (известным, впрочем, и в других областях):

  1. Сценарий нужно разрабатывать насколько возможно настраиваемым, чтобы иметь возможность например запустить его на других RPS без изменения кода, поэтому хардкод подобных параметров должен быть минимальным.
  2. Не стоит пренебрегать документацией по инструменту НТ. Не изобретайте колесо, инструменты НТ разрабатываются на основе большого опыта и в большинстве случаев то, что вам нужно, уже существует.
  3. Мониторинг чаще всего придётся доделывать на основе базовых компонентов, гораздо реже можно найти то, что идеально подойдёт.
  4. Помните, что чем больше статистики, мониторинга и логирование — тем выше побочная нагрузка, нужно уметь найти баланс.
  5. Никогда не используйте код подобный `… request(); sleep(N); request() …` для моделирования 60/N RPM, это не работает, найдите компоненты для вашего инструмента НТ, реализующие требуемую частоту запросов, или хотя бы используйте асинхронный код.

Шаг 4/6. Запуск теста и измерения

Целевая система готова, переходим к самому интересному — запуску теста и снятию метрик. Как я говорил ранее, НТ — это не функциональное тестирование, поэтому мы не просто снимаем ряд булевых показателей типа работает/не работает, а получаем целый ряд разнообразных метрик. Как разбираться в них — большая тема, здесь я затрону только некоторые моменты из неё.

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

В ходе собственно выполнения теста у нас используются:

  1. Свой управляющий инструмент. Функции:

    1. Деплой тестового сценария и данных (поддерживается несколько сценариев и инструментов НТ).
    2. Запуск теста.
    3. Сбор результатов и логов инструмента НТ.
  2. Универсальные средства мониторинга и сбора логов.

Здесь ещё можно упомянуть Open Source проект Taurus, который, как и наше внутреннее решение, предназначен для запуска разных инструментов НТ и поддерживает более 20 инструментов тестирования. Ещё есть тоже открытый Яндекс.Танк. Свой инструмент я решил разрабатывать, потому что задумывалась тесная интеграция с управлением тестовым окружением и инструмент больше про это. Сделать просто распределённый запуск инструмента НТ — задача не такая уж сложная.

И пара советов:

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

Шаг 5/6. Анализ

Паттерны

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

  1. «Пила». Значимые скачки показателя вверх/вниз с достаточно большими промежутками между ними могут говорить, например, о насыщении какого-то ресурса до предела и падении ряда агентов, поднятии новых и повторе ситуации. Или такой может быть внутренняя логика работы приложения.
  2. «Полка». Может говорить о том, что мы достигли предела и дальше система не справляется, хотя и не падает. Здесь надо смотреть состояние генераторов нагрузки, возможно больше этого предела они и не грузят и это не ошибка, а просто достижение необходимого уровня. Ещё это может быть предельное значение, выше которого подняться в принципе невозможно — например, загрузка CPU под 100%. Такие случаи требуют особого внимания.
  3. «Всплеск». Резкий скачок, причину которого надо изучать. Это может быть, например, внезапно запустившаяся сборка мусора. Но если это график ошибок, то очевидны проблемы.
  4. Резкое падение. Например, в начале теста при постепенном увеличении нагрузки может умереть один из воркеров, генерирующих трафик. Или это может быть график общего числа RPS для всего кластера, что может говорить об отказе одного из серверов.
  5. Плавная деградация. Это может быть, например, график RPS на сервере, которые начали проседать при стабильной нагрузке. Или обратная ситуация, нагрузка тоже стабильна, а на графике использование оперативной памяти в течение продолжительного срока. Тоже однозначно нужно обратить внимание.
  6. Линейный/нелинейный рост связанных показателей. Если некоторый входной параметр растёт линейно, важно чтобы уровень нагрузки подсистем тоже рос хотя бы линейно, но никак не быстрее на несколько степеней. Здесь самое время вспомнить про сложность алгоритмов: O(n), O(log n), O(n^2) и подобное. Чем сильнее нелинейность — тем меньше будет толку от новых и новых серверов.

На графиках ниже показаны синтетические примеры описанных выше паттернов:

Пример

Разберём простейший пример, который может научить нескольким полезным вещам:

  1. Проблема: система отвечает слишком медленно на некоторый сценарий. Пусть 95-я персентиль времени выполнения стала 15 с вместо 2 с.
  2. Анализ:

    1. Найти узкое место, которое тормозит сценарий. Пусть это будет некоторый API запрос.
    2. Проверить насыщение API серверов. CPU, RAM, IO, очереди сообщений и прочее.
    3. Проверить зависимости. Допустим, в нашей системе используется другой компонент системы, который отвечает слишком медленно.
    4. Проверить сервер, на котором работает этот другой компонент. Допустим там ~100% CPU.
  3. Действие — добавить результаты разбора в отчёт. Какие действия предпринимать, чтобы исправить проблему — это не такой простой вопрос. Изменить тип инстанса на больший — это просто, но это не всегда правильное решение. Если используется алгоритм с сильно нелинейной сложностью, то даже увеличение мощности CPU сервера ненадолго поможет.
  4. Броки:

    1. Наблюдайте за всем, за чем можно, помня про побочную нагрузку от замеров.
    2. Ищите подлинные причины проблем.
    3. Простой вывод — не всегда правильный.

Шаг 6/6. Отчёт

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

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

  1. Для менеджера — насколько система соответствует требованиям, есть ли запас и какая ситуация может вызвать проблемы с системой?
  2. Для DevOps — есть ли слабые места системы со стороны инфраструктуры?
  3. Для разработчиков — есть ли слабые места системы со стороны кода?
  4. Для НТ инженера — какие инструменты НТ с какими настройками использовались, какой сценарий использовался, на какой конфигурации инфраструктуры проводился тест? Все эти знания в том числе для того, чтобы можно было воспроизвести сценарий при каких-либо изменениях кода или инфраструктуры для сравнения.

Нет отчёта — нагрузочное тестирование впустую!

Ещё один очень важный момент. Серьёзный подход требует регулярного НТ. Оно невозможно без автоматизации построения отчётов и степень этой автоматизации зависит от частоты проведения тестирования.

Результаты внедрения нагрузочного тестирования в Miro

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

  1. Понятный и описанный процесс. Чётко описано, какие шаги нужно выполнить и что нужно делать на каждом из шагов.
  2. Большие тесты: 200K, 500K пользователей online при типичном сценарии использования. Каждый сложный тест зачастую проходит много итераций перед успешным выполнением, поэтому без автоматизации столько раз гонять большие тесты было бы чрезвычайно долгим и утомительным занятием, полным ошибок.
  3. Проверка компонентов перед выкаткой на прод.
  4. Обоснованный выбор параметров компонентов для поддержки планируемой нагрузки. То есть не просто с потолка брать «ну наверное хватит сотни воркеров», а выбирать параметры на основе результатов проверок.
  5. Автоматизация, упрощение и ускорение проведения НТ. Я говорил в начале про список из 16 пунктов, которые надо было пройти вручную при каждом запуске НТ на кластере. Теперь это один конфиг и одна команда. Больше автоматизации даёт больше надёжности и больше возможностей уделить время более творческим и сложным задачам.
  6. Деградационное тестирование (начало). Автоматическое выполнение тестов по реалистичному API сценарию на типичной нагрузке каждую ночь на последней версии сервера и построение графиков трендов для отслеживания динамики показателей скорости ответа и числа ошибок.

Планы в отношении нагрузочного тестирования в Miro

Несмотря на то, что было сделано многое, ещё больше предстоит. Вот планируемые направления развития:

  1. Деградационное тестирование (полноценная интеграция с CI/CD). В идеале постоянное НТ должно быть встроено в пайплайн и так же как функциональные тесты влиять на принятие решения о релизе.
  2. Тестирование микросервисов. Мы в процессе переезда с монолита, и всё больше работы появляется в этом направлении.
  3. Вовлечение большего числа команд. У нас их несколько десятков и пока не все включены в процесс.
  4. Улучшение инструментария. При бурном росте не всегда получается выдержать хорошую архитектуру, так что есть немного техдолга.
  5. Дополнение внутренней документации НТ примерами конкретных кейсов: как тестировали, что и как выявили, как доработали. Общая документация — это хорошо, но дополнение её солидным набором описаний конкретных кейсов — бесценно.
  6. Более исследовательская работа: профилирование, хаос-тестинг и т.д.

Пожелания читателям

Напоследок пожелаю следующее:

  1. Верьте в свой проект. Если не будете верить вы, пользователи и подавно не будут.
  2. Делайте НТ. Высокие нагрузки должны стать источником дополнительной прибыли или других благ, а не источником проблем.
  3. Делайте НТ заранее. Профилактика всегда лучше лечения.
  4. Делайте НТ правильно. Ресурсы у всех ограничены, и лучше тратить их с умом.
  5. Делайте НТ регулярно. Всё течёт, всё изменяется.
  6. Автоматизируйте. Ну это очевидно в 21 веке, я думаю.

Полезные ссылки

В ходе работ по НТ мной и моими коллегами были в том числе использованы источники из базы знаний, создание которой было инициировано русскоязычным QA Load сообществом и в которой я один из мейнтейнеров, также мы многое почерпнули и из самого чата этого сообщества. Ссылки:

  1. Русскоязычное QA Load сообщество в Telegram
  2. База знаний QA Load сообщества

Предыдущие материалы о НТ в Miro:

  1. Достоверный нагрузочный тест c учетом непредвиденных нюансов (доклад с DUMP-2019)
  2. Достоверный нагрузочный тест с учётом непредвиденных нюансов
  3. Управление сотнями серверов для нагрузочного теста: автомасштабирование, кастомный мониторинг, DevOps культура

QA процесс в Miro:

  1. Качество — ответственность команды. Наш QA опыт
  2. QA-процесс в Miro: отказ от водопада и ручного тестирования, передача ответственности за качество всей команде

Прочие ссылки:

  1. Ликбез о том, кто такие QA инженеры и кто такие тестировщики (от Dodo Engineering) — «Кто ты, QA-инженер или тестировщик?»
  2. Глава про «4 золотых сигнала» в книге по SRE от Google

Мы поможем в написании ваших работ!

ЗНАЕТЕ ЛИ ВЫ?

Тестирование информационных систем

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

ГЛАВА 1. ОСНОВЫ ТЕСТИРОВАНИЯ ИНФОРМАЦИОННЫХ СИСТЕМ

Понятие «тестирования информационных систем»

Критерии тестирования

Принципы тестирования

ГЛАВА 2. МЕТОДЫ ТЕСТИРОВАНИЯ

Тестирование «белого ящика»

Тестирование «черного ящика»

ГЛАВА 3. ТЕСТИРОВАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ «УЧЕБНО-МЕТОДИЧЕСКИЙ РЕСУРС»

ЗАКЛЮЧЕНИЕ

СПИСОК ЛИТЕРАТУРЫ

ПРИЛОЖЕНИЕ. ПРИМЕНЕНИЕ СТАНДАРТА IEEE STD 829 ПРИ ПЛАНИРОВАНИИ И ВЫПОЛНЕНИИ ФУНКЦИОНАЛЬНОГО И НАГРУЗОЧНОГО ТЕСТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

ВВЕДЕНИЕ

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

Основной задачей 90-х годов XX и начала XXI века стало совершенствование качества компьютерных приложений, возможности которых целиком определяются программным обеспечением (ПО).

Современный персональный компьютер имеет производительность большой ЭВМ 80-х годов. Сняты практически все аппаратные ограничения на решение задач. Оставшиеся ограничения приходятся на долю ПО.

Чрезвычайно актуальными стали следующие проблемы:

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

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

  • управление проектом в виде координации усилий проектной команды, направленных на достижение целей проекта оптимальным путем;
  • постановка задачи в виде определения требований и последующих работ с ними;
  • управление изменениями в проекте: изменение может касаться как непосредственно самих требований к системе, так и затрагивать организационную схему процесса, и могут порождаться либо самим Заказчиком (бизнес-аналитиком) либо являться следствием обнаруженных в ИС дефектов;
  • разработка ПО, как непосредственное кодирование программной реализации функциональных требований и проектирование схем хранения и движения информации в ИС;
  • тестирование ПО – процесс, решающий задачу верификации соответствия требований выдвинутых к ИС и их программной реализации;
  • эксплуатация ПО как сумма задач, направленная на обеспечение технической и технологической поддержки процесса работы ИС, включая поддержку и необходимое системное администрирование.

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

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

В соответствии с целью были поставлены следующие задачи:

  1. проанализировать литературу по теме курсовой работы;
  2. рассмотреть и изучить понятие «тестирование программного обеспечения»;
  3. выделить виды тестирования программного обеспечения;
  4. изучить основные принципы и критерии, предъявляемые к тестированию программного обеспечения;
  5. изучить основные методы тестирования программного обеспечения;
  6. протестировать на основе изученного материала информационную систему «Учебно-методический ресурс».

Структуракурсовой работы: работа состоит из введения, трех глав, заключения, списка литературы и одного приложения.

Первая глава посвящена изучению такого понятия, как «тестирование программного обеспечения».

Вторая глава посвящена изучению методов тестирования, таких как метод «белого ящика» и метод «черного ящика».

В третьей главе рассматривается процесс тестирования фрагмента информационной системы «Учебно-методический ресурс».

ГЛАВА 1. ОСНОВЫ ТЕСТИРОВАНИЯ ИНФОРМАЦИОННЫХ СИСТЕМ

Виды тестирования.

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

  • Блочным тестированием называют тестирование полного класса, метода или небольшого приложения, написанного одним программистом или группой, выполняемое отдельно от прочих частей системы.
  • Тестирование компонента – это тестирование класса, пакета, небольшого приложения или другого элемента системы, разработанного несколькими программистами или группами, выполняемое в изоляции от остальных частей системы.
  • Интеграционное тестирование – это совместное выполнение двух или более классов, пакетов, компонентов или подсистем, созданных несколькими программистами или группами.
  • Регрессивным тестированием называют повторное выполнение тестов, направленное на обнаружение дефектов в программе, уже прошедшей этот набор тестов.
  • Тестирование системы – это выполнение ПО в его окончательной конфигурации, интегрированного с другими программными и аппаратными системами.

Фазы тестирования.

Реализация тестирования делится на три этапа:

  1. Создание тестового набора (test suite) путем ручной разработки или автоматической генерации для конкретной среды тестирования(testing environment).
  2. Прогон программы на тестах, управляемый тестовым монитором (test monitor, test driver) с получением протокола тестирования (testlog).
  3. Оценка результатов выполнения программы на наборе тестов с целью принятия решения о продолжении или остановке тестирования.

Критерии тестирования.

Можно выделить требования к идеальному критерию тестирования:

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

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

Классы критериев:

  • Структурные критерии используют информацию о структуре программы (критерии так называемого «белого ящика»).
  • Функциональные критерии формулируются в описании требований к программному изделию (критерии так называемого «черного ящика»).
  • Критерии стохастического тестирования формулируются в терминах проверки наличия заданных свойств у тестируемого приложения, средствами проверки некоторой статистической теории.
  • Мутационные критерии ориентированы на проверку свойств программного изделия на основе подхода Монте-Карло.

Принципы тестирования

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

Для большинства проектов этот процесс включает тестирование кода приложения с ожидаемыми результатами. Затем разработчики «фиксируют» приложение до тех пор, пока оно не обеспечит нужный результат. Либо происходит корректировка ожидаемого результата, если возникла ошибка. Такой подход фокусируется на коде приложения и его поведении на множестве тестовых условий. Оказывается, что тщательное тестирование приложения требует большого числа тестовых условий. При таком подходе к тестированию предполагается, что качество приложения является функцией от количества тестов – чем больше тестов, тем лучше качество.

  • Неэффективность существующих технологий тестирования.

Традиционный подход был тщательно разработан для пакетных и символьно-ориентированных диалоговых Кобол-приложений, но сегодня системы радикально изменились: произошел переход от монолитных программ к фрагментированным модулям на С, С++ и/илиJava. Данный тип разработки увеличивает число компонентов приложения и сложность их взаимодействия, что снижает эффективность тестирования, основанного на коде.

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

Как уже отмечалось, традиционные технологии тестирования ориентированы на код законченного приложения (т.е. приложение может тестироваться только после того, как оно собрано). Этот подход оказывается неэффективным с точки зрения как качества выполняемой работы, так и бюджета. Годы исследований показали – устранение ошибок при завершении процесса разработки обходится дороже и требует больше времени, чем их исправление на более ранних стадиях (анализ, проектирование и т.д.) [1]. Риск сбоя программного обеспечения в результате этих изменений также увеличивается на завершающих стадиях разработки приложения. Одновременно с увеличением цены и риска уменьшаются возможности разработчика по внесению изменений. Очевидно, что ошибки следует находить и исправлять как можно раньше.

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

Традиционный подход приводит к выделению половины (а иногда и более) бюджетных средств исключительно на тестирование [2]. Недостаток ресурсов и плана существующих технологий тестирования может сталкиваться с сокращением бюджета и срока разработки, заставляя в худшем случае вообще отказываться от тестирования. Эта ситуация достаточно опасна, если учесть возрастающую роль программного обеспечения в современном бизнесе. Разработчикам нужен новый подход к тестированию, который отвечал бы требованиям сложных приложений и предполагал исправление ошибок как можно раньше. Это дает импульс к преобразованию процесса тестирования: от тестирования по завершении кода, к тестированию на протяжении всего процесса разработки.

  • Новый подход к процессу тестирования.

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

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

При новом подходе тестирование должно стать более производительным и эффективным. Точно определенные приемыподдерживают процесс эффективного тестирования путем применения надежных методов и уменьшения дублирования между тестами на разных стадиях. Соответствие условий тестирования специфике его стадий, так же как и фазам разработки, поддерживает высокое качество тестирования тем, что каждое условие проверяется только один раз. Результатом применения стадийной локализации в процессетестирования является V-модель, которая определяет структуру мероприятий верификации, утверждения и тестирования на основе спецификаций. Эта структура организует мероприятия разработки – такие, как формальные проверки, обзоры (reviews) и формальное тестирование.

Как практический подход V-модель была проверена и использовалась более 15-ти лет [3]. Эта методика соотносит стадии разработки с отдельными стадиями тестирования. С ее помощью можно точно определить границы применимости и назначения каждого теста по его соответствующей спецификации. Это помогает избежать неэффективности многих приемов тестирования, включая перекрытие тестовых условий и проведение тех же тестов, но на разных уровнях. V-модель содержит три тестирующих действия: верификацию (verification), проверку на корректность (validation) и собственно тестирование (testing).

  1. Верификация.

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

  1. Проверка на корректность.

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

  1. Тестирование, основанное на спецификациях.

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

Применимость V-модели.

Значимость V-модели была продемонстрирована в проектах, использовавших несколько различных стилей разработки. В случае быстрой разработки (rapid development) V-модель помогает определить процесс проверки корректности, который необходимо выполнять для каждой итерации разработки. В дальнейшем это увеличивает необходимость определения каждой итерации в терминах «тестовых» требований. Для объектной разработки (object development) V-модель обеспечивает основу для организации тестирования на уровнях класса и компонента.

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

  1. Необходимо заранее разрабатывать планы для тестирования.
    Начинать думать о тестировании непосредственно перед запуском теста – это недостаток многих проектов. Отсутствие должногопланирования часто приводит проект в режим «свалки», когда условия тестов, данные и среда тестирования несогласованны. Это отнимает массу времени и сил, а в итоге мероприятия формального тестирования начинаются позже, да еще и в условиях исчерпанного бюджета. План тестирования должен быть неотъемлемой частью начальных планов проекта. Опережающеепланирование помогает организации начать тестирование вовремя и оставаться в рамках плана и бюджета.
  2. Определение стадий разработки и тестирования.

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

  1. Определение критериев входа и выхода.

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

  1. Необходимо определить условия теста как можно раньше.

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

  1. Управление метриками тестирования.

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

  1. Наличие в группе разработчиков менеджера по тестам и организация независимой тестовой команды.

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

  1. Вовлечение заказчика в процесс разработки.

Разработчики проекта должны вовлечь заказчика в процесс разработки и тестирования. Это возможно в рамках описываемой методики тестирования, где условия теста появляются вместе со спецификацией. При этом необходима независимая команда разработчиков, осуществляющих тестирование. Вовлечение заказчиков в работу по определению условий тестов позволяет коллективу рассматривать выдвигаемые заказчиком критерии как условия тестирования, а не как чьи-то субъективные пожелания. Условия тестирования определяются целью работы, пожелания – нет. Коллектив также выиграет от включения заказчиков в процесс тестирования, поскольку это поддерживает их заинтересованность на протяжении всего процесса разработки.

  1. Организация команд в рабочие бригады.

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

  1. Определение архитектуры тестирования.

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

  1. Необходимо эффективно использовать инструменты тестирования.

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

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

Тестирование «белого ящика»

Известна: внутренняя структура программы.

Исследуются: внутренние элементы программы и связи между ними.

Объектом тестирования здесь является не внешнее, а внутреннее поведение программы. Проверяется корректность построения всех элементов программы и правильность их взаимодействия друг с другом. Обычно анализируются управляющие связи элементов, реже – информационные связи. Тестирование по принципу «белого ящика» характеризуется степенью, в которой тесты выполняют или покрывают логику (исходный текст) программы. Исчерпывающее тестирование затруднительно.

Тестирование циклов.

Цикл – наиболее распространенная конструкция алгоритмов, используемых в ПО. Тестирование циклов производится по принципу «белого ящика», при проверке циклов основное внимание обращается на правильность конструкций циклов.

Различают 4 типа циклов: простые, вложенные, объединенные, неструктурированные.

Простые циклы.

Для проверки циклов с количеством повторений n может использоваться один из следующих наборов тестов:

  • прогон всего цикла;
  • только один проход цикла;
  • два прохода цикла;
  • m проходов циклов, где m<n;
  • n-1, n, n+1 проходов цикла.

Вложенные циклы.

С увеличением уровня вложенности циклов количество возможных путей резко возрастает. Это приводит к нереализуемому количеству тестов. Для сокращения количества тестов применяется специальная методика, в которой используются такие понятия, как объемлющий и вложенные циклы.

Шаги тестирования:

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

Объединенные циклы.

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

Неструктурированные циклы.

Неструктурированные циклы тестированию не подлежат. Этот тип циклов должен быть переделан с помощью структурированных программных конструкций.

Тестирование информационных систем

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

Поможем в ✍️ написании учебной работы


ЭКОНОМИЧЕСКАЯ ОЦЕНКА ЭФФЕКТИВНОСТИ

ИНФОРМАЦИОННЫХ СИСТЕМ. ЧАСТЬ 2

Методические указания к практическим занятиям по дисциплине «Эффективность ИС»

Оглавление

1. Методы оценки эффективности информационных систем

4

1.1. Традиционные финансовые методы

4

1.1.1. Расчет совокупной стоимости владения (TCO)

6

1.2. Качественные методы

16

1.3. Вероятностные методы

17

2. Показатели экономической эффективности

автоматизированных экономических информационных систем

(АЭИС)

17

3. Показатели прямой и косвенной эффективности

автоматизированной информации

20

4. Методика оценки экономической эффективности от внедрения

задач

24

Список рекомендуемой литературы

30

2

1. Методы оценки эффективности информационных систем

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

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

традиционные финансовые методы, предполагающие определение таких показателей, как чистый приведенный доход (Net Present Value, NPV), экономическая привлекательность (Economic Value Added, EVA), совокупной стоимости владения (Total Cost of Ownership, TCO) и т.д.;

качественные методы оценки, основными из которых можно назвать систему сбалансированных показателей (Balanced Scorecard), информационную экономику (Information Economics, IE), управление портфелем активов (Portfolio Management) и т.д.;

вероятностные методы оценки: справедливая цена опционов (Real Options Valuation, ROV), прикладная информационная экономика

(Applied Information Economics, AIE) и т.д.

Каждая из перечисленных выше групп обладает рядом достоинств

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

1.1. Традиционные финансовые методы

Эти методологии используют традиционные финансовые расчеты

сучетом специфики ИТ и необходимости оценивать риск.

1)Чистая текущая стоимость (чистый приведенный эффект, чистый дисконтированный доход, Net Present Value, NPV)

Подробнее – см. методические указания «Экономическая оценка эффективности информационных систем. Часть 1».

3

2) Коэффициент рентабельности инвестиций (Return On

Investment, ROI)

ROI представляет собой обобщенную формулу анализа прибыльности произвольных инвестиций в активы. Он рассчитывается следующим образом:

где Прибыль – доходы, полученные за время владения активом; Цена приобретения – цена, по которой был приобретен актив; Цена продажи – цена, по которой был продан (или может быть

продан) актив по окончании срока владения.

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

3) Экономическая добавленная стоимость (Economic Value Added, EVA)

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

EVA = NOPAT — (NA.WACC),

где NOPAT (Net Operating Profit After Taxes) – чистая операционная прибыль за вычетом налогов, но до выплаты процентов;

WACC (Weighted Average Cost of Capital) – средневзвешенная стоимость капитала;

NA (Net Assets) — инвестированный капитал.

Использование месячных, квартальных или годовых оценок EVA для характеристики эффективности работы отдельных подразделений позволяет согласовать подчас противоречивые цели, такие как рост оборота, увеличение доли продаж на рынке или движение денежных

4

средств, с помощью единого финансового показателя.

4) Совокупный экономический эффект (Total Economic

Impact, TEI)

При оценке затрат руководители информационных служб оперируют тремя основными параметрами – стоимостью, преимуществами и гибкостью. Для каждого из них определяется свой уровень риска (рис. 1).

TEI

Возможные риски

Гибкость

Преимущества

Стоимость (ТСО)

Рис. 1. Модель совокупного экономического эффекта

Анализ стоимости обычно осуществляется по методу TCO. Оценка преимуществ должна проводиться с точки зрения стоимости проекта и стратегических вложений, выходящих за рамки информационных технологий. Гибкость определяется с использованием методологий расчетов фьючерсов и опционов, например моделей БлэкаШоулза, или оценки справедливой цены опционов (Real Options Valuation). Для инвестиций в информационные технологии анализ рисков должен предусматривать доступность и устойчивость параметров производителей, продуктов, архитектуры, корпоративной культуры, объема и временных рамок реализации проекта.

Методология TEI нагляднее работает при анализе двух различных сценариев.

5) Совокупная стоимость владения (Total Cost of Ownership,

TCO)

Подробнее о методике расчета ТСО смотри в следующем пункте.

1.1.1. Расчет совокупной стоимости владения (TCO)

Совокупная стоимость владения (ТСО) – это методика, предназначенная для определения затрат на информационные системы,

5

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

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

Вкачестве примера для расчета ТСО рассмотрим внедрение специализированного продукта «ABC» (название условное) на базе предприятия «Альфа-Бета» (название условное). Для оценки экономической эффективности используются данные как внешней, так и внутренней бухгалтерской финансовой отчетности. Расчет совокупной стоимости владения осуществлен на основе цены компании, предлагающей специализированный программный продукт и среднерыночных цен на серверное оборудование и системное программное обеспечение, а также услуг по их внедрению.

Вкачестве отправной точки выберем наиболее распространенную модель расчета и анализа ТСО от Gartner Group.

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

К фиксированным затратам относятся стоимости:

первоначальной закупки аппаратного и программного обеспечения;

разработки и внедрения проекта.

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

обновления и модернизации системы;

управления системой в целом;

обучения персонала и технической поддержки пользователей.

Модель от Gartner Group предлагает следующие весовые доли каждой из приведенных выше статей расходов по отношению к совокупной стоимости:

– капитальные вложения – 21%

6

управление системой – 12%

техническая поддержка и обновление – 21%

активность пользователя – 46%.

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

прямая помощь и дополнительные настройки – 11%

неформальное обучение – 12%

разработка приложений – 14%

работа с данными – 15%

формальное обучение – 18%

futz-фактор – 30%

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

Наиболее весомым является так называемый Futz-фактор — параметр, определяющий объем затрат, связанных с последствиями некомпетентных действий пользователя.

Исходя из предполагаемой структуры затрат можно рассчитать совокупную стоимость владения ABC для «Альфа-Бета» (табл.1). При этом предполагается, что капитальные вложения складываются из стоимости специализированного программного обеспечения АВС стоимостью 1040000 грн (все цены здесь и далее условны), стоимости системного программного обеспечения (базы данных Microsoft SQL Server 2005) стоимостью 40000 грн, стоимости серверного оборудования 400000 грн и стоимости кабельной системы, ее монтажа 20000 грн

Таблица 1 Совокупная стоимость владения ABC для «Альфа-Бета», рассчитанная с использованием фиксированных и текущих затрат (1 вариант)

За 1 год,

За 2 год,

За 2 года,

Наименование статьи расходов

тыс. грн

тыс. грн

тыс. грн

Фиксированные затраты:

1500

1500

1 .Капитальные вложения

1500

1500

7

Текущие затраты:

5700

5700

11400

2. Управление системой

900

900

1800

3. Техническая поддержка и

1500

1500

3000

обновление

4.Активность пользователя:

3300

3300

6600

– прямая помощь и

360

360

720

дополнительные настройки

– неформальное обучение

400

400

800

– разработка приложений

460

460

920

– работа с данными

500

500

1000

– формальное обучение

600

600

1200

– futz-фактор

980

980

1960

Итого затрат:

7200

5700

12900

Другой вариант методики расчета ТСО подразделяет затраты на

«видимые» и «невидимые». Под «видимыми» понимаются затраты

непосредственно возникающие при приобретении, «невидимые» затраты

возникают в процессе эксплуатации ПК.

Распределение затрат в компьютеризированном рабочем месте по

Gartner Group можно представить следующим образом:

1.«Видимые» затраты:

стоимость покупки «железа» – 28%

стоимость программного обеспечения – 3%

обучение технических специалистов и персонала – 1%

2.«Невидимые» затраты:

администрирование сети (работа компьютера в сети) – 12%

повышение квалификации (переобучение) персонала – 1%

Оплачиваемые простои и потери рабочего времени – 4%

upgrade — обновления системы (как правило программные, приводящие к ошибкам как в ПО, так и пользователей) – 21%

техническая поддержка – 30%

По возможности следует производить расчет без усреднений, суммируя ТСО для каждого рабочего места. Калькуляция суммарного

8

значения ТСО для большого числа рабочих мест может проводиться с усреднением по формуле:

TCO = A + NxB, где

А — стоимость владения централизованными ресурсами, практически не зависящая от количества рабочих мест;

В — среднее ТСО одного рабочего места; N — количество рабочих мест.

Исходя из предполагаемой структуры затрат можно рассчитать совокупную стоимость владения ABC для «Альфа-Бета». При этом предполагается, что стоимость владения централизованными ресурсами, практически не зависящая от количества рабочих мест будет складываться из стоимости специализированного ПО ABC стоимостью 1040000 грн, а совокупная стоимость владения одного рабочего места (табл. 2) за 1 год составит 27040 грн Следовательно, Совокупная стоимость владения ABC для 50 рабочих мест составит:

за 1 год работы: ТСО = 1040000 + 50х27040 = 2392000 грн за 2 год работы: ТСО = 50х18370 = 918500 грн

Таблица 2 Совокупная стоимость владения ABC для «Альфа-Бета» для каждого рабочего места, рассчитанная с использованием видимых и

невидимых затрат (2 вариант)

Наименование статьи затрат

За 1 год,

За 2 год,

За 2 года,

тыс.грн

тыс.грн

тыс.грн

Видимые затраты:

8,670

8,670

– Стоимость покупки «железа»

7,600

7,600

– Стоимость программного обеспечения

0,800

0,800

– Обучение технических специалистов и

0,270

0,270

персонала

Невидимые затраты:

18,370

18,370

36,740

– Администрирование сети (работа

3,200

3,200

6,400

компьютера в сети)

– Повышение квалификации

0,270

0,270

0,540

(переобучение) персонала

9

– Оплачиваемые простои и потери

1,100

1,100

2,200

рабочего времени

– Upgrade — обновления системы

5,700

5,700

11,400

– Техническая поддержка

8,100

8,100

16,200

Итого затрат:

27,040

18,370

45,410

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

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

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

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

Прямые затраты могут включать следующие составляющие:

1.Оборудование и программное обеспечение:

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

покупка оборудования: ноутбуки, рабочие станции, сервера, периферийные устройства (мониторы, принтеры, сканеры и пгрн), устройства хранения информации, ИБП, карты расширения всех видов, сетевое коммуникационное оборудование (хабы, коммутаторы и т.д.),

10

1. 5. Тестирование информационной системы (ИС)

Содержание темы:
5.1. Общая характеристика процесса
тестирования
5.2. Типы тестирования
5.3. Программные ошибки
5.4. Разработка и выполнение тестов

2. 5.1. Общая характеристика процесса тестирования

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

3. 5.1.1. Этапы процесса тестирования:

Проверка требований к ПП на полноту.
Определение методов тестирования.
Разработка стратегии тестирования.
Разработка плана тестирования.
Создание наборов тестов для проведения
интеграционного и системного тестирований (о
них см. далее).
6) Создание отчета о тестировании, в котором
представляются все результаты проведения
тестирования.
1)
2)
3)
4)
5)

4. 5.1.2. Цикл тестирования

Уровни (типы) тестирования:
модульное;
проводятся
интеграционное;
внутри
организации системное;
разработчика ПП
выходное;
приемочное – выполняется совместно с
представителями заказчика.

5. 5.1.2. Цикл тестирования (продолжение)

Цикл тестирования – совокупность действий, выполняемых
тестировщиком с момента передачи базовой версии ПП тестировщику
для интеграционного, системного или приемочного тестирования до
момента успешного завершения тестирования.
Каждый проход цикла тестирования состоит из следующих
этапов:
1) Создание базовой версии ПП.
2) Проведение тестирования.
3) Анализ результатов.
4) Создание отчета о тестировании.
5) Если в процессе тестирования выявлены ошибки, то выполняется их
исправление и переход к п.1 (см. выше).
6) Если в процессе тестирования ошибок не выявлено, то цикл
тестирования завершается.

6. 5.2. Типы тестирования

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

7. 5.2. Типы тестирования (продолжение)

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

8. 5.2. Типы тестирования (продолжение)

3) Системное тестирование предназначено для проверки
функционирования всего ПП на соответствие требованиям
заказчика. Системное тестирование проводит тестировщик
после успешного завершения интеграционного
тестирования.
Элементы системного тестирования:
тестирование в граничных условиях;
тестирование всех функциональных характеристик
реальной работы системы;
проверка пользовательской документации на корректность;
другие тесты, определяемые тестировщиком.
Результаты системного тестирования включаются в отчет о
ходе тестирования.

9. 5.2. Типы тестирования (продолжение)

4) Выходное тестирование – это завершающий этап тестирования,
на котором проверяется готовность ПП к поставке заказчику.
Данный вид тестирования проводит тестировщик.
Элементы выходного тестирования:
проверка на ясность и корректность инструкций по инсталляции;
проверка того, что вся необходимая документация полностью
готова к передаче заказчику.
При успешном завершении выходного тестирования ПП поставляется
заказчику вместе с отчетом о результатах тестирования.
5) Приемочное тестирование проводится организацией,
отвечающей за инсталляцию, сопровождение ПП и обучение
пользователей.

10. 5.3. Программные ошибки

Требования к ПП фиксируются в специальном
документе – спецификации требований.
Два определения программной ошибки:
1) Программная ошибка – это расхождение между
программой и ее спецификацией.
2) Программная ошибка – это ситуация, когда
программа не делает того, чего пользователь от
нее вполне обоснованно ожидает.

11. 5.3. Программные ошибки (продолжение)

Категории программных ошибок:
1) Функциональные недостатки. Программа не делает того, что
должна, выполняет некоторые свои функции плохо или не
полностью. Функции программы должны быть подробно
описаны в ее спецификации, и именно на основе утвержденной
спецификации тестировщик строит свою работу.
2) Недостатки пользовательского интерфейса. Оценить
удобство и правильность работы пользовательского
интерфейса можно только в процессе работы с ним.
Желательно, чтобы в этой работе принимал участие сам
пользователь. Этого можно добиться с помощью разработки
прототипа ПП, на котором проводятся «обкатка» и
согласование всех требований к пользовательскому
интерфейсу с дальнейшей фиксацией их в спецификации
требований. После утверждения спецификации требований
любые отклонения от неё или невыполнение требований
являются ошибкой.

12. 5.3. Программные ошибки (продолжение)

3) Недостаточная производительность. Иногда скорость работы
ПП задается в требованиях заказчика. Если ПП не удовлетворяет
характеристикам производительности, заданным в спецификации
требований, это является программной ошибкой.
4) Некорректная обработка ошибок. Правильно определив ошибку,
программа должна выдать сообщение о ней. Отсутствие такого
сообщения является ошибкой в работе программы.
5) Некорректная обработка граничных условий. Программа
должна быть проверена на исходных данных, находящихся на
границах допустимых диапазонов. Для данных, находящихся
внутри диапазонов, программа может работать правильно, а на
границах диапазонов при этом могут возникать ошибки.
6) Ошибки вычислений. Это ошибки, вызванные неправильным
выбором алгоритма вычислений, неправильными формулами, а
также формулами, неприменимыми к обрабатываемым данным.
7) Ошибки управления потоком. Какие-либо действия в программе
выполняются в неправильном порядке.

13. 5.3. Программные ошибки (продолжение)

8) Ситуация гонок. Предположим, в системе ожидаются два
события: А и Б. Если первым наступит событие А, то выполнение
программы продолжится, а если событие Б, то в работе
программы произойдет сбой. Разработчики предполагают, что
первым всегда должно быть событие А, и не ожидают, что Б
может выиграть гонки и наступить раньше. Ситуации гонок
наиболее типичны для многопользовательских систем реального
времени.
9) Перегрузки. Сбои в работе программы могут происходить из-за
нехватки памяти или отсутствия других системных ресурсов.
Программа может не справляться, например, со слишком
большими объемами данных.
10) Некорректная работа с аппаратурой. Программа может
посылать аппаратным устройствам неверные данные,
игнорировать сообщения устройств об ошибках, пытаться
использовать устройства, которые заняты или отсутствуют. Если
нужное устройство сломано, программа должна понять это, а не
«зависать» при попытке обратиться к нему.

14. 5.4. Разработка и выполнение тестов

Требования к хорошему тесту:
1) Должна быть достаточной вероятность выявления тестом
ошибки. Разрабатывая тестовые примеры, необходимо
проанализировать все возможные варианты сбоев программы или
ее некорректной работы.
2) Набор тестов не должен быть избыточным. Если два теста
предназначены для выявления одной и той же ошибки, то
достаточно выполнить только один из них.
3) Тест должен быть наилучшим в своей категории. В группе
похожих тестов одни могут быть эффективнее других. Поэтому
нужно выбирать тот тест, который с наибольшей вероятностью
выявит ошибку.
4) Тест не должен быть слишком простым или слишком
сложным. Большой и сложный тест трудно понять, выполнить и
долго создавать. Поэтому лучше всего разрабатывать простые, но
всё же не совсем элементарные тестовые примеры.

15. 5.4.1. Классы эквивалентности

Класс эквивалентности – это набор тестов, от выполнения которых
ожидается один и тот же результат. В простейшем случае тест
представляет собой набор входных данных, вводимых в тестируемую
программу. В случае эквивалентных тестов эти данные обладают
общими свойствами.
Группа тестов представляет собой класс эквивалентности,
если выполняются следующие условия:
все тесты предназначены для выявления одной и той же ошибки;
если один из тестов выявит ошибку, то остальные тоже это сделают;
если один из тестов не выявит ошибку, то остальные тоже этого не
сделают.
Необходимо стремиться выявить как можно больше классов
эквивалентности. Это сэкономит время тестирования и сделает
тестирование более эффективным, избавив тестировщика от
повторения эквивалентных тестов. Разбив все предполагаемые тесты
на классы, можно затем выделить в каждом из них один или несколько
наиболее эффективных тестов; остальные тесты выполнять незачем.

16. 5.4.1. Классы эквивалентности (продолжение)

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

17. 5.4.1. Классы эквивалентности (продолжение)

Перечень классов эквивалентности лучше организовать в виде
таблицы. Обычно классов эквивалентности оказывается много,
поэтому нужен удобный и продуманный способ организации собранной
информации. Пример перечня классов эквивалентности:
Допустимые
Недопустимые
Входное
классы
классы
событие
эквивалентности
эквивалентности
Ввод числа
Числа от 1 до 99
Ввод первой
буквы
наименования
Заглавная буква
Прописная буква
Число 0
Числа больше 99
Выражение, результатом
которого является недопустимое
число (например: 5 – 5 = 0)
Отрицательные числа
Буквы и др. нечисловые символы
Не буква

18. 5.4.1. Классы эквивалентности (продолжение)

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

19. 5.4.2. Границы классов эквивалентности

Для каждого класса эквивалентности достаточно провести одиндва теста. Лучшими из них будут те, которые проверяют
значения, лежащие на границах класса. Неправильные
операторы сравнения (например, > вместо ≥) вызывают ошибки
только при граничных значениях аргументов. В то же время
программа, которая сбоит при промежуточных значениях
диапазона, почти наверняка будет сбоить и при его граничных
значениях.
Необходимо протестировать каждую границу класса
эквивалентности с обеих сторон. Программа, которая пройдет
эти тесты, скорее всего, пройдет и все остальные, относящиеся
к данному классу.

20. 5.4.2. Границы классов эквивалентности (продолжение)

Примеры:
Если допустимы значения от 1 до 99, то для тестирования
допустимых данных можно выбрать 1 и 99, а для тестирования
недопустимых – 0 и 100.
Если программа ожидает ввода заглавной латинской буквы,
лучше ввести A и Z. Также следует проверить символ @ (т.к. его
код предшествует коду символа A) и символ [ (код которого
следует за кодом символа Z). Кроме того, следует проверить
символы a и z.
Если сумма входных значений должна равняться 180, следует
попробовать ввести значения, дающие в сумме 179, 180 и 181.
Следует попробовать отправить на печать файл
непосредственно перед тем, как принтер напечатает еще чьелибо задание, и сразу после этого.

21. 5.4.3. Тестирование переходов между состояниями

Пример переходов между состояниями: меню. После запуска
программы в нем имеется один перечень команд. После выбора одной
из них состояние программы меняется и в меню появляются команды,
доступные в этом новом состоянии. Необходимо протестировать
каждую команду меню. Например, команда 10 может быть доступна в
режиме, открываемом по команде 9 или по команде 22. В этом случае
команду 10 придется протестировать дважды – в обоих режимах.
Содержимое и структура очередной формы ввода данных могут зависеть
от информации, введенной в предыдущей форме, значения одних
полей могут определять допустимые значения других, ввод
определенной информации может инициировать серию
дополнительных запросов. Например, при вводе чисел от 1 до 99
программа выводит одну форму запроса, обращенного к
пользователю, а при вводе любых других чисел – другую. В этом
случае следует проанализировать возможные пути выполнения
программы, чтобы составить полноценный набор тестов.

22. 5.4.3. Тестирование переходов между состояниями (продолжение)

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

23. 5.4.3. Тестирование переходов между состояниями (продолжение)

Очень полезно составление схем меню. На такой схеме отражаются все
состояния программы и команды, вызывающие переходы между этими
состояниями. В нее включаются команды, активизируемые через меню,
кнопки, а также через нажатия определенных клавиш на клавиатуре.
Пример:
Основное
состояние
программы
Меню
Команда
Диалоговое окно
«Файл»
«Открыть»
«Открытие файла»
Особенно удобны подобные схемы в случае, если определенное
диалоговое окно можно открыть несколькими способами и выйти из
него в несколько различных режимов. В этом случае можно изобразить
на схеме все направления переходов и по ним протестировать
программу.

24. 5.4.4. Условия гонок и другие временные зависимости

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

25. 5.4.4. Условия гонок и другие временные зависимости (продолжение)

Тестирование при повышенной нагрузке:
запуск нескольких других программ;
отправка большого файла на принтер;
одновременная работа различных внешних устройств.
В результате тестирования при повышенной нагрузке
программа будет выполняться медленнее, и, быстро вводя
данные, можно превысить ее возможности приема этих
данных, что приведет к сбою программы.
Главная задача тестирования при повышенной нагрузке:
обеспечить такую надежность разрабатываемого ПП, чтобы
он работал (пусть медленно, но без сбоев) при любых
дополнительных нагрузках. Необходимо выяснить, какие
конфигурации системы являются предельными для
эксплуатации ПП.

26. 5.4.5. Нагрузочные испытания

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

27. 5.4.5. Нагрузочные испытания (продолжение)

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

28. 5.4.6. Прогнозирование ошибок

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

29. 5.4.7. Тестирование функциональной эквивалентности

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

30. 5.4.8. Регрессионное тестирование

Два значения термина «Регрессионное
тестирование», которые объединяет идея
повторного использования разработанных тестов:
1) повторное проведение теста после исправления
ошибки в программе, чтобы убедиться, что ошибки
больше нет; тестируется только исправленный
фрагмент программы;
2) проведение стандартной серии тестов после
исправления ошибки в программе, чтобы убедиться,
что, исправив одну часть программы, программист не
испортил другую; тестируется вся программа
целиком.

31. 5.4.8. Регрессионное тестирование (продолжение)

Последовательность действий
программиста при исправлении
ошибки:
1) найти причину ошибки, указанной в отчете
о тестировании; для этого следует
тщательно проанализировать исходный код
программы;
2) исправить ошибку;
3) протестировать результат.

32. 5.4.8. Регрессионное тестирование (продолжение)

Задачи тестировщика, проверяющего исправления,
внесенные программистом:
1) Убедиться, что ошибка исправлена. Для этого следует
выполнить тот же тест, в котором проявилась ошибка и который
описан в отчете о тестировании. Если программа не пройдет
этот тест, дальнейшее тестирование не имеет смысла.
2) Постараться найти связанные ошибки. Возможно,
программист устранил описанные в отчете симптомы ошибки,
но саму ее не исправил. Можно попробовать спровоцировать
симптомы ошибки каким-нибудь другим способом.
3) Протестировать оставшуюся часть программы.
Последствия исправления ошибки могут проявиться где-нибудь
еще. Необходимо подумать, какие части программы могут быть
затронуты внесенными исправлениями, и проверить их.

33. 5.4.8. Регрессионное тестирование (продолжение)

Библиотека регрессионных тестов – это полный набор тестов,
охватывающий всю программу и выполняющийся каждый раз, когда
программисты сдают ее очередную версию.
Рекомендации по регрессионному тестированию:
Уменьшить число тестов, объектом которых является уже
исправленная ошибка. Если ошибка проявляется в течение ряда
циклов тестирования, то в библиотеку следует добавить достаточное
число тестов для выявления этой ошибки. Соответствующую часть
программы необходимо тестировать до тех пор, пока в ней не
останется ошибки. Однако после этого большую часть тестов,
направленных на поиск исправленной ошибки, можно удалить из
библиотеки.
Автоматизировать тестирование. Если определенная группа
тестов будет выполняться в течение 5 – 10 циклов тестирования, то
стоит потратить время на автоматизацию.

34. 5.4.8. Регрессионное тестирование (продолжение)

Выделить часть тестов для периодического выполнения. Все тесты
регрессионной библиотеки не обязательно выполнять после каждого
изменения программы. Это можно делать реже: на каждом 2 – 3
цикле. На последней стадии тестирования лучше выполнить
максимально возможное число тестов, чтобы убедиться, что
программа готова к выпуску. На других циклах достаточно 1/2 или 1/3
всех тестов.

35. 5.4.8. Регрессионное тестирование (продолжение)

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

36. 5.4.9. Технологии тестирования:

1) Тестирование «черного ящика» (black box). Программа
рассматривается как объект, внутренняя структура которого
неизвестна. Тестировщик вводит данные и анализирует
результат, но он не знает, как именно работает программа.
Подбирая тесты, тестировщик ищет входные данные, при
которых с наибольшей вероятностью могут проявиться ошибки
тестируемой программы.
2) Тестирование «белого ящика» (white box), другое название –
тестирование «стеклянного ящика» (glass box).
Представляет собой часть процесса программирования.
Программист тестирует каждый модуль после его написания
(модульное тестирование; о нем см. подраздел 5.2). Он
разрабатывает тесты, основываясь на знании исходного кода, к
которому имеет полный доступ.

37. 5.4.9. Технологии тестирования (продолжение)

Преимущества тестирования «белого ящика»:
Направленность тестирования. Программист может тестировать
программу по частям, разрабатывать специальные тестовые
подпрограммы, которые вызывают тестируемый модуль и передают
ему интересующие программиста данные.
Полный охват кода. Программист всегда может определить, какие
именно фрагменты кода работают в каждом тесте. Он видит, какие
еще ветви кода остались непротестированными, и может подобрать
условия, в которых они будут протестированы.
Возможность управления потоком команд. Чтобы выяснить,
работает ли программа так, как он думает, программист может
включить в нее отладочные команды, отображающие информацию о
ходе ее выполнения, или воспользоваться для этого специальным
программным средством – отладчиком (режим «Отладчик» в среде
«1С:Предприятие»). С помощью отладчика можно отслеживать
последовательность выполнения команд программы, показывать
содержимое ее переменных.

38. 5.4.9. Технологии тестирования (продолжение)

Последовательность разработки тестов для тестирования
«белого ящика»:
Разрабатываются тесты для каждого класса эквивалентности, а также
для граничных и особых значений входных данных (см. пункты 5.4.1 и
5.4.2).
Контролируется, все ли классы выходных данных при этом
проверены; при необходимости добавляются новые тесты.
Разрабатываются тесты для тех подпрограмм, которые не
проверяются в 1-ом пункте.
По тексту программы проверяется, все ли условные переходы
выполнены в каждом направлении (ТО…, ИНАЧЕ…); при
необходимости добавляются новые тесты.
По тексту программы проверяется, проходятся ли пути для каждого
цикла: без выполнения тела цикла, с однократным повторением, с
максимальным числом повторений; при необходимости добавляются
новые тесты.
Разрабатываются тесты, проверяющие исключительные ситуации,
недопустимые входные данные.

39. Литература (имеется в библиотеке КТИ)

1. Технология разработки программных продуктов:
учеб. пособие для студентов учреждений сред.
проф. образования / А.В. Рудаков. – М.:
Издательский центр «Академия», 2010. – 208 с.
2. Технология разработки программных продуктов.
Практикум: учеб. пособие для студентов
учреждений сред. проф. образования / А.В.
Рудаков, Г.Н. Федорова. – М.: Издательский центр
«Академия», 2010. – 192 с.

40. Контрольные вопросы

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Дать общую характеристику процессу тестирование.
Из каких этапов состоит тестирование?
Какие существуют уровни тестирования?
Что такое цикл тестирования?
Из каких этапов состоит каждый цикл тестирования?
Какие типы тестирования существуют?
Дать определения программной ошибке.
Какие существуют категории программных ошибок?
Какие существуют требования к хорошему тесту?
Что такое класс эквивалентности?

>5. Тестирование информационной системы (ИС) Содержание темы: 5. 1. Общая характеристика процесса
5. Тестирование информационной системы (ИС) Содержание темы: 5. 1. Общая характеристика процесса тестирования 5. 2. Типы тестирования 5. 3. Программные ошибки 5. 4. Разработка и выполнение тестов

> 5. 1. Общая характеристика процесса тестирования Тестирование представляет собой деятельность по проверке
5. 1. Общая характеристика процесса тестирования Тестирование представляет собой деятельность по проверке программного кода и документации. Она должна заранее планироваться и систематически проводиться специально назначенным сотрудником – тестировщиком. Работа тестировщика начинается до утверждения требований к программному продукту (ПП).

> 5. 1. 1. Этапы процесса тестирования: 1) Проверка требований к ПП на
5. 1. 1. Этапы процесса тестирования: 1) Проверка требований к ПП на полноту. 2) Определение методов тестирования. 3) Разработка стратегии тестирования. 4) Разработка плана тестирования. 5) Создание наборов тестов для проведения интеграционного и системного тестирований (о них см. далее). 6) Создание отчета о тестировании, в котором представляются все результаты проведения тестирования.

> 5. 1. 2. Цикл тестирования Уровни (типы) тестирования: n модульное;
5. 1. 2. Цикл тестирования Уровни (типы) тестирования: n модульное; проводятся n интеграционное; внутри n системное; организации- n выходное; разработчика ПП n приемочное – выполняется совместно с представителями заказчика.

> 5. 1. 2. Цикл тестирования (продолжение) Цикл тестирования – совокупность
5. 1. 2. Цикл тестирования (продолжение) Цикл тестирования – совокупность действий, выполняемых тестировщиком с момента передачи базовой версии ПП тестировщику для интеграционного, системного или приемочного тестирования до момента успешного завершения тестирования. Каждый проход цикла тестирования состоит из следующих этапов: 1) Создание базовой версии ПП. 2) Проведение тестирования. 3) Анализ результатов. 4) Создание отчета о тестировании. 5) Если в процессе тестирования выявлены ошибки, то выполняется их исправление и переход к п. 1 (см. выше). 6) Если в процессе тестирования ошибок не выявлено, то цикл тестирования завершается.

> 5. 2. Типы тестирования 1) Модульное тестирование представляет собой процесс проверки
5. 2. Типы тестирования 1) Модульное тестирование представляет собой процесс проверки отдельных подпрограмм, входящих в состав ПП. Оно производится разработчиком ПП и позволяет проверить все структуры и потоки данных в каждом модуле. Включает в себя выявление синтаксических ошибок в программном коде. 2) Интеграционное тестирование проводится для проверки совместной работы отдельных модулей и предшествует тестированию всей системы как единого целого. В ходе интеграционного тестирования проверяются связи между модулями, их совместимость и функциональность. Оно осуществляется тестировщиком.

> 5. 2. Типы тестирования (продолжение) Элементы интеграционного тестирования: n проверка соответствия отдельных
5. 2. Типы тестирования (продолжение) Элементы интеграционного тестирования: n проверка соответствия отдельных функций, выполняемых совокупностями модулей, функциям, заданным в требованиях к ПП; n проверка всех промежуточных результатов и файлов на наличие и корректность; n проверка того, что модули передают другу информацию корректно. Результаты интеграционного тестирования включаются в отчет о ходе тестирования при завершении цикла тестирования.

> 5. 2. Типы тестирования (продолжение) 3) Системное тестирование предназначено для проверки
5. 2. Типы тестирования (продолжение) 3) Системное тестирование предназначено для проверки функционирования всего ПП на соответствие требованиям заказчика. Системное тестирование проводит тестировщик после успешного завершения интеграционного тестирования. Элементы системного тестирования: n тестирование в граничных условиях; n тестирование всех функциональных характеристик реальной работы системы; n проверка пользовательской документации на корректность; n другие тесты, определяемые тестировщиком. Результаты системного тестирования включаются в отчет о ходе тестирования.

> 5. 2. Типы тестирования (продолжение) 4) Выходное тестирование – это
5. 2. Типы тестирования (продолжение) 4) Выходное тестирование – это завершающий этап тестирования, на котором проверяется готовность ПП к поставке заказчику. Данный вид тестирования проводит тестировщик. Элементы выходного тестирования: n проверка на ясность и корректность инструкций по инсталляции; n проверка того, что вся необходимая документация полностью готова к передаче заказчику. При успешном завершении выходного тестирования ПП поставляется заказчику вместе с отчетом о результатах тестирования. 5) Приемочное тестирование проводится организацией, отвечающей за инсталляцию, сопровождение ПП и обучение пользователей.

> 5. 3. Программные ошибки Требования к ПП фиксируются в специальном документе –
5. 3. Программные ошибки Требования к ПП фиксируются в специальном документе – спецификации требований. Два определения программной ошибки: 1) Программная ошибка – это расхождение между программой и ее спецификацией. 2) Программная ошибка – это ситуация, когда программа не делает того, чего пользователь от нее вполне обоснованно ожидает.

> 5. 3. Программные ошибки (продолжение) Категории программных ошибок: 1) Функциональные недостатки.
5. 3. Программные ошибки (продолжение) Категории программных ошибок: 1) Функциональные недостатки. Программа не делает того, что должна, выполняет некоторые свои функции плохо или не полностью. Функции программы должны быть подробно описаны в ее спецификации, и именно на основе утвержденной спецификации тестировщик строит свою работу. 2) Недостатки пользовательского интерфейса. Оценить удобство и правильность работы пользовательского интерфейса можно только в процессе работы с ним. Желательно, чтобы в этой работе принимал участие сам пользователь. Этого можно добиться с помощью разработки прототипа ПП, на котором проводятся «обкатка» и согласование всех требований к пользовательскому интерфейсу с дальнейшей фиксацией их в спецификации требований. После утверждения спецификации требований любые отклонения от неё или невыполнение требований являются ошибкой.

> 5. 3. Программные ошибки (продолжение) 3) Недостаточная производительность. Иногда скорость
5. 3. Программные ошибки (продолжение) 3) Недостаточная производительность. Иногда скорость работы ПП задается в требованиях заказчика. Если ПП не удовлетворяет характеристикам производительности, заданным в спецификации требований, это является программной ошибкой. 4) Некорректная обработка ошибок. Правильно определив ошибку, программа должна выдать сообщение о ней. Отсутствие такого сообщения является ошибкой в работе программы. 5) Некорректная обработка граничных условий. Программа должна быть проверена на исходных данных, находящихся на границах допустимых диапазонов. Для данных, находящихся внутри диапазонов, программа может работать правильно, а на границах диапазонов при этом могут возникать ошибки. 6) Ошибки вычислений. Это ошибки, вызванные неправильным выбором алгоритма вычислений, неправильными формулами, а также формулами, неприменимыми к обрабатываемым данным. 7) Ошибки управления потоком. Какие-либо действия в программе выполняются в неправильном порядке.

> 5. 3. Программные ошибки (продолжение) 8) Ситуация гонок. Предположим, в
5. 3. Программные ошибки (продолжение) 8) Ситуация гонок. Предположим, в системе ожидаются два события: А и Б. Если первым наступит событие А, то выполнение программы продолжится, а если событие Б, то в работе программы произойдет сбой. Разработчики предполагают, что первым всегда должно быть событие А, и не ожидают, что Б может выиграть гонки и наступить раньше. Ситуации гонок наиболее типичны для многопользовательских систем реального времени. 9) Перегрузки. Сбои в работе программы могут происходить из-за нехватки памяти или отсутствия других системных ресурсов. Программа может не справляться, например, со слишком большими объемами данных. 10) Некорректная работа с аппаратурой. Программа может посылать аппаратным устройствам неверные данные, игнорировать сообщения устройств об ошибках, пытаться использовать устройства, которые заняты или отсутствуют. Если нужное устройство сломано, программа должна понять это, а не «зависать» при попытке обратиться к нему.

> 5. 4. Разработка и выполнение тестов Требования к хорошему тесту:
5. 4. Разработка и выполнение тестов Требования к хорошему тесту: 1) Должна быть достаточной вероятность выявления тестом ошибки. Разрабатывая тестовые примеры, необходимо проанализировать все возможные варианты сбоев программы или ее некорректной работы. 2) Набор тестов не должен быть избыточным. Если два теста предназначены для выявления одной и той же ошибки, то достаточно выполнить только один из них. 3) Тест должен быть наилучшим в своей категории. В группе похожих тестов одни могут быть эффективнее других. Поэтому нужно выбирать тот тест, который с наибольшей вероятностью выявит ошибку. 4) Тест не должен быть слишком простым или слишком сложным. Большой и сложный тест трудно понять, выполнить и долго создавать. Поэтому лучше всего разрабатывать простые, но всё же не совсем элементарные тестовые примеры.

> 5. 4. 1. Классы эквивалентности Класс эквивалентности – это набор тестов, от
5. 4. 1. Классы эквивалентности Класс эквивалентности – это набор тестов, от выполнения которых ожидается один и тот же результат. В простейшем случае тест представляет собой набор входных данных, вводимых в тестируемую программу. В случае эквивалентных тестов эти данные обладают общими свойствами. Группа тестов представляет собой класс эквивалентности, если выполняются следующие условия: n все тесты предназначены для выявления одной и той же ошибки; n если один из тестов выявит ошибку, то остальные тоже это сделают; n если один из тестов не выявит ошибку, то остальные тоже этого не сделают. Необходимо стремиться выявить как можно больше классов эквивалентности. Это сэкономит время тестирования и сделает тестирование более эффективным, избавив тестировщика от повторения эквивалентных тестов. Разбив все предполагаемые тесты на классы, можно затем выделить в каждом из них один или несколько наиболее эффективных тестов; остальные тесты выполнять незачем.

> 5. 4. 1. Классы эквивалентности (продолжение) Рекомендации для поиска классов
5. 4. 1. Классы эквивалентности (продолжение) Рекомендации для поиска классов эквивалентности: n Классы эквивалентности должны охватывать заведомо недопустимые входные данные. Часто такие входные данные вызывают в программе разнообразные ошибки. Поэтому чем больше типов неверного ввода выделить, тем больше ошибок можно найти. n Следует определить допустимые диапазоны числовых значений. Обычно для числовых значений имеются три недопустимых класса эквивалентности: все числа, которые меньше нижнего граничного значения диапазона; все числа, которые больше его верхнего граничного значения; нечисловые данные. Иногда один из этих классов отсутствует. Например, возможен ввод любого числа. В этом случае при тестировании необходимо убедиться, что это на самом деле так. Следует попробовать ввести очень большое число.

> 5. 4. 1. Классы эквивалентности (продолжение) n Перечень классов
5. 4. 1. Классы эквивалентности (продолжение) n Перечень классов эквивалентности лучше организовать в виде таблицы. Обычно классов эквивалентности оказывается много, поэтому нужен удобный и продуманный способ организации собранной информации. Пример перечня классов эквивалентности: Входное Допустимые Недопустимые событие классы эквивалентности Ввод числа Числа от 1 до 99 Число 0 Числа больше 99 Выражение, результатом которого является недопустимое число (например: 5 – 5 = 0) Отрицательные числа Буквы и др. нечисловые символы Ввод первой Заглавная буква Не буква буквы Прописная буква наименования

> 5. 4. 1. Классы эквивалентности (продолжение) n Следует проанализировать
5. 4. 1. Классы эквивалентности (продолжение) n Следует проанализировать возможные результаты выбора из списков и меню. Любой элемент предложенного программой списка опций может представлять собой отдельный класс эквивалентности. Каждый элемент меню или списка опций обрабатывается программой особым образом, поэтому все они подлежат проверке. n Следует выявить группы переменных, совместно участвующих в определенных вычислениях, результат которых ограничивается конкретным диапазоном значений. Например, к классу допустимых относятся величины трех углов треугольника, в сумме дающие 180. Недопустимые значения можно разделить на два класса эквивалентности: с суммарным значением менее 180 и более 180. n Следует продумать варианты операционного окружения. Бывает, что программа хорошо работает только при определенных типах мониторов, принтеров, модемов, дисковых устройств или любого другого подключенного к системе оборудования. Поэтому важно определить классы эквивалентных конфигураций системы.

> 5. 4. 2. Границы классов эквивалентности Для каждого класса эквивалентности
5. 4. 2. Границы классов эквивалентности Для каждого класса эквивалентности достаточно провести один- два теста. Лучшими из них будут те, которые проверяют значения, лежащие на границах класса. Неправильные операторы сравнения (например, > вместо ≥) вызывают ошибки только при граничных значениях аргументов. В то же время программа, которая сбоит при промежуточных значениях диапазона, почти наверняка будет сбоить и при его граничных значениях. Необходимо протестировать каждую границу класса эквивалентности с обеих сторон. Программа, которая пройдет эти тесты, скорее всего, пройдет и все остальные, относящиеся к данному классу.

> 5. 4. 2. Границы классов эквивалентности (продолжение) Примеры:
5. 4. 2. Границы классов эквивалентности (продолжение) Примеры: n Если допустимы значения от 1 до 99, то для тестирования допустимых данных можно выбрать 1 и 99, а для тестирования недопустимых – 0 и 100. n Если программа ожидает ввода заглавной латинской буквы, лучше ввести A и Z. Также следует проверить символ @ (т. к. его код предшествует коду символа A) и символ [ (код которого следует за кодом символа Z). Кроме того, следует проверить символы a и z. n Если сумма входных значений должна равняться 180, следует попробовать ввести значения, дающие в сумме 179, 180 и 181. n Следует попробовать отправить на печать файл непосредственно перед тем, как принтер напечатает еще чье- либо задание, и сразу после этого.

> 5. 4. 3. Тестирование переходов между состояниями Пример переходов между
5. 4. 3. Тестирование переходов между состояниями Пример переходов между состояниями: меню. После запуска программы в нем имеется один перечень команд. После выбора одной из них состояние программы меняется и в меню появляются команды, доступные в этом новом состоянии. Необходимо протестировать каждую команду меню. Например, команда 10 может быть доступна в режиме, открываемом по команде 9 или по команде 22. В этом случае команду 10 придется протестировать дважды – в обоих режимах. Содержимое и структура очередной формы ввода данных могут зависеть от информации, введенной в предыдущей форме, значения одних полей могут определять допустимые значения других, ввод определенной информации может инициировать серию дополнительных запросов. Например, при вводе чисел от 1 до 99 программа выводит одну форму запроса, обращенного к пользователю, а при вводе любых других чисел – другую. В этом случае следует проанализировать возможные пути выполнения программы, чтобы составить полноценный набор тестов.

> 5. 4. 3. Тестирование переходов между состояниями (продолжение) Команд меню,
5. 4. 3. Тестирование переходов между состояниями (продолжение) Команд меню, режимов программы и путей перехода в эти режимы может быть так много, что протестировать их все просто нереально. Поэтому, отбирая тесты для проверки путей выполнения программы, лучше всего руководствоваться следующими принципами: n тестировать все наиболее вероятные последовательности действий пользователей; n если можно предположить, что действия пользователя в одном режиме могут влиять на представление данных или набор предоставляемых программой возможностей в другом режиме, тестировать эти действия; n поработать с программой в произвольном режиме, случайным образом выбирая путь ее выполнения.

> 5. 4. 3. Тестирование переходов между состояниями
5. 4. 3. Тестирование переходов между состояниями (продолжение) Очень полезно составление схем меню. На такой схеме отражаются все состояния программы и команды, вызывающие переходы между этими состояниями. В нее включаются команды, активизируемые через меню, кнопки, а также через нажатия определенных клавиш на клавиатуре. Пример: Основное состояние программы Меню Команда Диалоговое окно «Файл» «Открыть» «Открытие файла» Особенно удобны подобные схемы в случае, если определенное диалоговое окно можно открыть несколькими способами и выйти из него в несколько различных режимов. В этом случае можно изобразить на схеме все направления переходов и по ним протестировать программу.

> 5. 4. 4. Условия гонок и другие временные зависимости Способы
5. 4. 4. Условия гонок и другие временные зависимости Способы тестирования: n Вмешательство в работу программы, когда она выполняет операции обработки данных или ввода-вывода (например, нажатия на различные клавиши, выбор каких-либо пунктов меню, попытка параллельного ввода или вывода еще какой-либо информации). n Проверка реакции программы на действия пользователя или наступление ожидаемого события на границах интервала тайм- аута. Ситуация тайм-аута – это ситуация, когда программа ждет определенного события в течение заданного времени, а затем переходит в другое состояние. Следует проверить, что будет, если событие произойдет за секунду до того, как программа должна прекратить ожидать его, или через секунду после этого.

> 5. 4. 4. Условия гонок и другие временные зависимости
5. 4. 4. Условия гонок и другие временные зависимости (продолжение) n Тестирование при повышенной нагрузке: n запуск нескольких других программ; n отправка большого файла на принтер; n одновременная работа различных внешних устройств. В результате тестирования при повышенной нагрузке программа будет выполняться медленнее, и, быстро вводя данные, можно превысить ее возможности приема этих данных, что приведет к сбою программы. Главная задача тестирования при повышенной нагрузке: обеспечить такую надежность разрабатываемого ПП, чтобы он работал (пусть медленно, но без сбоев) при любых дополнительных нагрузках. Необходимо выяснить, какие конфигурации системы являются предельными для эксплуатации ПП.

> 5. 4. 5. Нагрузочные испытания Важно протестировать те ограничения возможностей ПП, которые
5. 4. 5. Нагрузочные испытания Важно протестировать те ограничения возможностей ПП, которые определены в его документации. Примеры нагрузочных испытаний: n открытие максимального количества файлов, с которыми программа может работать; эксплуатация ее в таком состоянии; n проверка логически допустимых значений каких-либо параметров (например, ввод очень больших и очень маленьких числовых значений), даже если в документации эти ограничения не описаны; n проверка того, как ведет себя программа, когда исчерпываются различные аппаратные ресурсы (например, переполняется диск, в принтере заканчивается бумага, остается очень мало свободной оперативной памяти).

> 5. 4. 5. Нагрузочные испытания (продолжение) Нагрузочное тестирование – это один из
5. 4. 5. Нагрузочные испытания (продолжение) Нагрузочное тестирование – это один из видов тестирования граничных условий. Схема его проведения аналогична: сначала программу запускают в условиях, в которых она должна работать, а затем – в условиях, для которых она не предназначена. Имеет смысл проверить и различные комбинации условий: возможно, что, справившись с различными повышенными нагрузками по-отдельности, программа не выдержит их всех вместе. Нагрузив систему, следует провести достаточно длительное и обстоятельное тестирование.

> 5. 4. 6. Прогнозирование ошибок Иногда тестировщик предполагает, что определенный класс тестов
5. 4. 6. Прогнозирование ошибок Иногда тестировщик предполагает, что определенный класс тестов вызовет сбой программы, хотя и не может это логически обосновать. Следует доверять своей интуиции и использовать подобные тесты. Существует целый ряд ситуаций и значений, которые часто вызывают программные сбои, хотя и не являются граничными (например, число 0).

> 5. 4. 7. Тестирование функциональной эквивалентности Предположим, что тестируется
5. 4. 7. Тестирование функциональной эквивалентности Предположим, что тестируется программа, которая вычисляет некоторую математическую функцию (например, тригонометрическую, обращающую матрицу, возвращающую коэффициенты для построения кривой, отражающей некоторый набор данных). Обычно можно найти другую программу, вычисляющую ту же функцию, и при этом достаточно надежную и проверенную временем. С помощью обеих программ обрабатывают одинаковые наборы входных данных. Если результаты совпадают, значит, тестируемая программа работает правильно. Можно автоматизировать весь процесс тестирования: от ввода входных данных до сравнения выходных. Результаты расчетов можно выводить в файлы и сравнивать их с помощью специально написанной программы. При этом можно определить и допустимые расхождения результатов, например, погрешности округлений.

> 5. 4. 8. Регрессионное тестирование Два значения термина «Регрессионное
5. 4. 8. Регрессионное тестирование Два значения термина «Регрессионное тестирование» , которые объединяет идея повторного использования разработанных тестов: 1) повторное проведение теста после исправления ошибки в программе, чтобы убедиться, что ошибки больше нет; тестируется только исправленный фрагмент программы; 2) проведение стандартной серии тестов после исправления ошибки в программе, чтобы убедиться, что, исправив одну часть программы, программист не испортил другую; тестируется вся программа целиком.

> 5. 4. 8. Регрессионное тестирование (продолжение) Последовательность действий программиста
5. 4. 8. Регрессионное тестирование (продолжение) Последовательность действий программиста при исправлении ошибки: 1) найти причину ошибки, указанной в отчете о тестировании; для этого следует тщательно проанализировать исходный код программы; 2) исправить ошибку; 3) протестировать результат.

> 5. 4. 8. Регрессионное тестирование (продолжение) Задачи тестировщика, проверяющего
5. 4. 8. Регрессионное тестирование (продолжение) Задачи тестировщика, проверяющего исправления, внесенные программистом: 1) Убедиться, что ошибка исправлена. Для этого следует выполнить тот же тест, в котором проявилась ошибка и который описан в отчете о тестировании. Если программа не пройдет этот тест, дальнейшее тестирование не имеет смысла. 2) Постараться найти связанные ошибки. Возможно, программист устранил описанные в отчете симптомы ошибки, но саму ее не исправил. Можно попробовать спровоцировать симптомы ошибки каким-нибудь другим способом. 3) Протестировать оставшуюся часть программы. Последствия исправления ошибки могут проявиться где-нибудь еще. Необходимо подумать, какие части программы могут быть затронуты внесенными исправлениями, и проверить их.

> 5. 4. 8. Регрессионное тестирование (продолжение) Библиотека регрессионных тестов –
5. 4. 8. Регрессионное тестирование (продолжение) Библиотека регрессионных тестов – это полный набор тестов, охватывающий всю программу и выполняющийся каждый раз, когда программисты сдают ее очередную версию. Рекомендации по регрессионному тестированию: n Уменьшить число тестов, объектом которых является уже исправленная ошибка. Если ошибка проявляется в течение ряда циклов тестирования, то в библиотеку следует добавить достаточное число тестов для выявления этой ошибки. Соответствующую часть программы необходимо тестировать до тех пор, пока в ней не останется ошибки. Однако после этого большую часть тестов, направленных на поиск исправленной ошибки, можно удалить из библиотеки. n Автоматизировать тестирование. Если определенная группа тестов будет выполняться в течение 5 – 10 циклов тестирования, то стоит потратить время на автоматизацию.

> 5. 4. 8. Регрессионное тестирование (продолжение) n
5. 4. 8. Регрессионное тестирование (продолжение) n Выделить часть тестов для периодического выполнения. Все тесты регрессионной библиотеки не обязательно выполнять после каждого изменения программы. Это можно делать реже: на каждом 2 – 3 цикле. На последней стадии тестирования лучше выполнить максимально возможное число тестов, чтобы убедиться, что программа готова к выпуску. На других циклах достаточно 1/2 или 1/3 всех тестов.

> 5. 4. 8. Регрессионное тестирование (продолжение) Основное правило выполнения тестов:
5. 4. 8. Регрессионное тестирование (продолжение) Основное правило выполнения тестов: процесс тестирования должен заставить программу использовать введенные данные и подтвердить, что они используются правильно. Примеры выполнения тестов: n Если при установке программы на компьютер у пользователя есть возможность выбора конфигурации, то при тестировании недостаточно просто запустить программу установки и посмотреть, предоставляет ли она необходимые опции. Следует выполнить каждый вариант установки, всякий раз запуская программу и проверяя, действительно ли установлена выбранная конфигурация. Следует убедиться, что программа при этом полностью работоспособна. n Если программа позволяет указать размеры печатаемой страницы, полей и др. параметры страницы, то при тестировании недостаточно просто увидеть, что документ правильно выглядит на экране. Его необходимо распечатать.

> 5. 4. 9. Технологии тестирования: 1) Тестирование «черного ящика» (black
5. 4. 9. Технологии тестирования: 1) Тестирование «черного ящика» (black box). Программа рассматривается как объект, внутренняя структура которого неизвестна. Тестировщик вводит данные и анализирует результат, но он не знает, как именно работает программа. Подбирая тесты, тестировщик ищет входные данные, при которых с наибольшей вероятностью могут проявиться ошибки тестируемой программы. 2) Тестирование «белого ящика» (white box), другое название – тестирование «стеклянного ящика» (glass box). Представляет собой часть процесса программирования. Программист тестирует каждый модуль после его написания (модульное тестирование; о нем см. подраздел 5. 2). Он разрабатывает тесты, основываясь на знании исходного кода, к которому имеет полный доступ.

> 5. 4. 9. Технологии тестирования (продолжение) Преимущества тестирования «белого ящика»
5. 4. 9. Технологии тестирования (продолжение) Преимущества тестирования «белого ящика» : n Направленность тестирования. Программист может тестировать программу по частям, разрабатывать специальные тестовые подпрограммы, которые вызывают тестируемый модуль и передают ему интересующие программиста данные. n Полный охват кода. Программист всегда может определить, какие именно фрагменты кода работают в каждом тесте. Он видит, какие еще ветви кода остались непротестированными, и может подобрать условия, в которых они будут протестированы. n Возможность управления потоком команд. Чтобы выяснить, работает ли программа так, как он думает, программист может включить в нее отладочные команды, отображающие информацию о ходе ее выполнения, или воспользоваться для этого специальным программным средством – отладчиком (режим «Отладчик» в среде « 1 С: Предприятие» ). С помощью отладчика можно отслеживать последовательность выполнения команд программы, показывать содержимое ее переменных.

> 5. 4. 9. Технологии тестирования (продолжение) Последовательность разработки тестов для
5. 4. 9. Технологии тестирования (продолжение) Последовательность разработки тестов для тестирования «белого ящика» : n Разрабатываются тесты для каждого класса эквивалентности, а также для граничных и особых значений входных данных (см. пункты 5. 4. 1 и 5. 4. 2). n Контролируется, все ли классы выходных данных при этом проверены; при необходимости добавляются новые тесты. n Разрабатываются тесты для тех подпрограмм, которые не проверяются в 1 -ом пункте. n По тексту программы проверяется, все ли условные переходы выполнены в каждом направлении (ТО…, ИНАЧЕ…); при необходимости добавляются новые тесты. n По тексту программы проверяется, проходятся ли пути для каждого цикла: без выполнения тела цикла, с однократным повторением, с максимальным числом повторений; при необходимости добавляются новые тесты. n Разрабатываются тесты, проверяющие исключительные ситуации, недопустимые входные данные.

> Литература (имеется в библиотеке КТИ) 1. Технология разработки программных продуктов:
Литература (имеется в библиотеке КТИ) 1. Технология разработки программных продуктов: учеб. пособие для студентов учреждений сред. проф. образования / А. В. Рудаков. – М. : Издательский центр «Академия» , 2010. – 208 с. 2. Технология разработки программных продуктов. Практикум: учеб. пособие для студентов учреждений сред. проф. образования / А. В. Рудаков, Г. Н. Федорова. – М. : Издательский центр «Академия» , 2010. – 192 с.

Тестирование информационных систем практикум

08.09.2020 Evgeny Nikolaev Образование

Материалы для изучения дисциплины «Тестирование и отладка ПО» (2020-2021 учебный год) для студентов направления подготовки 09.03.02 «Информационные системы и технологии» (ИНС-б-о-18-1).

Лабораторный практикум «Тестирование и отладка ПО»Скачать

Данные для лабораторной работы 11Скачать

Форма отчета по лабораторной работеСкачать


Тестирование программного обеспечения

Раздел 1. Основные понятия тестирования Раздел 2. Критерии выбора тестов Раздел 3. Разновидности тестирования

Раздел 4. Особенности индустриального тестирования

Раздел 5. Регрессионное тестирование

Раздел 4. Особенности индустриального тестирования

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

Отдельным видом индустриального тестирования является тест на устойчивость к большим нагрузкам – load-testing, stresstesting или performance testing. Такой тест имитирует одновременную работу нескольких сотен или тысяч пользователей, проверяя, будет ли устойчивой работа ПО под большой нагрузкой. Кроме этого, можно имитировать кратковременные пики нагрузки, когда количество пользователей скачкообразно увеличивается, что актуально для распределенных 2-х и 3-х звенных приложений, новостных ресурсов и других сайтов с неравномерной нагрузкой.

Термины и определения:

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

Виртуальный пользователь (Virtual User) — программный процесс, циклически выполняющий моделируемые операции.

Итерация (Iteration) – это один повтор выполняемой в цикле операции.

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

Интенсивность выполнения операции (Operation Intensity) — частота выполнения операции в единицу времени, в тестовом скрипте задается интервалом времени между итерациями.

Нагрузка (Loading) — совокупное выполнение операций на общем ресурсе.

Производительность (Performance) — количество выполняемых операций за период времени (N операций за M часов)

Масштабируемость приложения (Application Scalability) — пропорциональный рост производительности при увеличении нагрузки.

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

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

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

Основные цели нагрузочного тестирования:

оценка производительности и работоспособности ПО на этапе разработки и передачи в эксплуатацию;

оценка производительности и работоспособности ПО на этапе выпуска новых релизов;

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

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

Основные показатели нагрузочного тестирования:

уникальность запросов

время отклика системы

зависимость времени отклика системы от степени распределённости этой системы

разброс времени отклика системы

точность воспроизведения профилей нагрузки

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

Основные этапы проведения нагрузочного тестирования:

анализ требований и сбор информации о тестируемой системе

конфигурация тестового стенда для нагрузочного тестирования

разработка модели нагрузки

выбор методов и инструментов для формирования нагрузки

исбора статистики при выполнении нагрузочного тестирования

создание и отладка тестовых скриптов

проведение нагрузочного тестирования

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

формирование отчета по проведенному нагрузочному тестированию

_

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

Анализ требований и сбор информации о тестируемой системе

На данном этапе осуществляется задание и/или уточнение требований, таких как:

время отклика (время необходимое для получения ожидаемого результата)

интенсивность (количество запросов в секунду)

используемые ресурсы (загрузка процессора, количество используемой памяти и т.д.)

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

Конфигурация тестового стенда для нагрузочного тестирования

На данном этапе осуществляется формирование тестового стенда

итестового окружения стенда, а также настройка всех необходимых элементов, составляющих стенд.

Основные причины, по которым не всегда возможно продублировать конфигурацию системы на тестовом стенде:

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

— сложность воссоздания требуемой архитектуры сети

идр.

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

Разработка модели нагрузки

На данном этапе осуществляется формирование модели нагрузки, включающей:

список тестируемых операций

интенсивность выполнения операций

зависимость изменения интенсивности выполнения операций от времени

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

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

тестирование производительности (Performance testing)

стрессовое тестирование (Stress Testing)

объемное тестирование (Volume Testing)

тестирование стабильности или надежности (Stability / Reliability Testing)

тестирование моделирования транзакций (Transaction Simulation)

тестирование методом анализа данных на стороне клиента (Client Capture)

тестирование методом анализа сетевого трафика (Network Sniffing)

тестирование масштабируемости (Scalability Test)

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

Тестирование производительности (Performance testing)

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

измерение времени выполнения выбранных операций при определенных интенсивностях выполнения этих операций;

определение количества пользователей, одновременно работающих с приложением;

определение границ приемлемой производительности при увеличении нагрузки (при увеличении интенсивности выполнения этих операций);

исследование производительности на высоких, предельных, стрессовых нагрузках.

Стрессовое тестирование (Stress Testing)

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

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

Объемное тестирование (Volume Testing)

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

измерение времени выполнения выбранных операций при определенных интенсивности выполнения этих операций;

определение количества пользователей, одновременно работающих с приложением.

Тестирование стабильности или надежности (Stability / Reliability Testing)

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

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

Тестирование моделированием транзакций (Transaction Simulation)

Тестирование моделированием транзакций основано на использовании программных GUI-роботов (GUI -Graphical User Interface). GUI-робот – это специальная программа, которая «заставляет» пользовательское приложение работать в автоматическом режиме, без участия самого пользователя. Программный GUI-робот, как и реальный пользователь приложения, анализирует содержимое экрана и вводит данные с клавиатуры, т.е. взаимодействует с пользовательским приложением через тот же интерфейс, что и человек. При этом GUI-робот работает по программе (скрипту), к коду которой всегда есть доступ

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

в скрипт GUI-робота встроить специальные вызовы, например, перед началом и после окончания транзакции, то можно измерить время выполнения этой транзакции.

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

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

Соседние файлы в папке Лекции

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

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


Если подобные проблемы обнаруживаются уже в ходе эксплуатации, в условиях реальной пиковой нагрузки, результатом становится резкое снижение быстродействия или даже остановка системы. На поиск причин сбоя и их устранение может уйти несколько дней, что для «mission-critical» приложений обычно приводит к потерям, несопоставимым со стоимостью затрат на проведение тестирования информационных систем. Кроме того, помимо оценок производительности и отказоустойчивости работы системы под нагрузкой, тестирование позволяет выполнить сравнение эффективности работы различных систем или анализ быстродействия работы на разном оборудовании или в различном окружении.

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


Нагрузочное тестирование: этапы, методика и инструментарий.

В любом проекте по тестированию можно выделить следующие самостоятельные этапы:

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

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

Стандартные процедуры тестирования, принятые в компании «Аплана» основаны на методологии и инструментарии IBM Rational, однако в ряде проектов мы используем технологии и других производителей, в частности, Mercury Interactive. Рекомендации, которые приводятся в данной статье, носят общий характер и не привязаны жестко к той или иной методологии или инструментарию.


Анализ, проектирование и реализация модели нагрузки.

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

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

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

В результате, модель нагрузки представляет собой расписание выполнения (Test Suite, Schedule), содержащее группы пользователей, распределение групп пользователей по компьютерам в момент выполнения и сценарии работы пользователей. Для записи и последующего воспроизведения на этапе выполнения автоматизированных скриптов используются специализированные инструментальные средства.

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

Подготовка тестовых баз данных.

Для определения графика зависимости производительности системы от пользовательской нагрузки и от нагрузки по данным (так называемых профилей производительности), необходимо создать набор тестовых баз данных, которые имеют разный объем (мощность), но совпадают по структуре. Целесообразно формировать наборы тестовых данных, число записей в которых отличается в разы, например, для 2000, 4000, 8000 и т. д. записей.

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

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

  • определение таблиц базы данных, которые требуется дублировать;
  • определение взаимосвязи таблиц базы данных (ограничений целостности); здесь следует учитывать, что часть ограничений целостности может оказаться заложенной в бизнес-логику приложения и не быть прописанной в качестве ограничений целостности в базе данных;
  • определение необходимых объемов таблиц исходной базы данных;
  • определение способов формирования новых записей в таблицах на основе исходных (чтобы значения полей записей должны быть осмысленными);
  • формирование новых записей.

Проведение испытаний.

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

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

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


Нагрузочное тестирование – анализ результатов

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

Наиболее распространенные виды отчетов о результатах нагрузочных испытаний:

  • Response vs Time (resources) – отклики по времени, загрузка ресурсов,
  • Performance – производительность, время отклика,
  • Compare Performance – сравнение производительностей.

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

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

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

Особенности тестирования промышленных систем.

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

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

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

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

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


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

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

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

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

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

Ключевые преимущества

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

Нагрузочное тестирование является сложным процессом, включающим в себя
⦁ аналитическую работу,
⦁ выбор подходящего вида тестирования под заданные цели.

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

Основные этапы нагрузочного тестирования

Подготовка — Проводится анализ целей и статистики эксплуатации системы. Определяются бизнес-операции, имеющие значение с точки зрения нагрузки на систему. Создается и согласуется документ «Методика нагрузочного тестирования», который включает: стратегию тестирования, список и описание тестов, критерии успешного завершения, описание средств мониторинга и инструментов нагрузочного тестирования. Осуществляется подготовка тестовых данных, настраивается мониторинг, наполняется база данных.

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

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

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

Тестирование производительности — Определение характеристик производительности системы

Тестирование стабильности — Проверка работоспособности системы в течение длительного времени эксплуатации, в том числе с большими объемами данных и высокой нагрузкой

Стресс-тестирование — Проверка корректности работы системы в режиме перегрузки и сбоев

Тестирование на достижимость бизнес-планов — Исследование того, как система будет работать, когда будут достигнуты плановые бизнес-показатели

Объемное тестирование — Тестирование поведения системы при увеличении объема данных

Тестирование сервера — Проверка работоспособности и надежности серверной части системы

Тестирование производительности

Тестирование производительности позволяет определить максимальную интенсивность операций, при которой система удовлетворяет требованиям ко времени отклика. Тестирование производительности рекомендуется проводить для новой версии ПО, планируемого к внедрению.

Ключевые преимущества

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

Основные задачи

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

В ходе выполнения тестирования определяется максимальная производительность системы:

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

Объемное тестирование

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

Ключевые преимущества

Объемное тестирование позволяет:

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

Основные задачи

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

Объемное тестирование рекомендуется основывать на следующих бизнес-прогнозах:

⦁ как увеличится число пользователей системы?
⦁ как увеличится интенсивность операций?
⦁ какой объем базы данных будет, например, через 5 лет?

Тестирование стабильности

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

Ключевые преимущества

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

Основные задачи

В ходе тестирования стабильности на целевую систему в течение не менее 24 часов подается средний уровень нагрузки, 70-80% от максимального уровня.
Одновременно с подачей нагрузки измеряются следующие показатели:
⦁ время выполнения операций;
⦁ распределение системных ресурсов;
⦁ другие показатели с учетом особенности системы.

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

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

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

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

Основные этапы нагрузочного тестирования

Определение критериев испытания

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

Проведение испытаний

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

Анализ результатов тестирования

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

Сетевая архитектура

Выявление потенциальных дефектов сетевых адаптеров и драйверов. Установление запаса производительности и определение качества работы сети.

Приложения

Оценка максимальной эффективности работы выбранных приложений при заданных значениях метрик производительности. Типичные объекты исследования — операционные системы (Linux, MS Windows Server, Solaris), серверы приложений (WildFly (RedHat JBoss Application Server), IBM WebSphere, WebLogic), системы управления базами данных (MySQL, PostgreSQL, MS SQL), корпоративное ПО (ERP-, CRM-системы и т.д.)

Базы данных

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

Стресс тестирование

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

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

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

Ключевые преимущества

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

Основные задачи

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

Книги: [Классика] [Базы данных] [Internet/WWW] [Сети] [Программирование] [UNIX] [Windows] [Безопасность] [Графика] [Software Engineering] [ERP-системы] [Hardware]

     

ТЕСТИРОВАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. (Вторая редакция)

Сэм Канер, Джек Фолк, Енг Кек Нгуен

Издано:2000, Киев, Издательство «ДиаСофт»
Для специалистов в области разработки программного обеспечения
ISBN: 966-7393-42-9
Мягкий переплет, 544 стр.
Формат: 60×84/16

Начало
Предисловие
Об авторах
[Заказать книгу в магазине «Мистраль»]

Содержание

Часть I. Основы
Глава 1. Пример серии тестов
    Первый цикл тестирования
    Второй цикл тестирования
    Что дальше?

Глава 2. Желаемое и действительное
                 в жизни тестировщика
    Полностью протестировать программу невозможно
    Цель тестировщика - проверка правильности программы?
    Итак, для чего же тестируют программы?

Глава 3. Типы тестов и их роль в процессе
разработки программного обеспечения.
    Обзор стадий разработки
    Стадии планирования
    Тестирование на этапе планирования
    Стадии проектирования
    Тестирование на этапе проектирования
    Тестирование "стеклянного ящика" на стадии кодирования
    Регрессионное тестирование
    Тестирование "черного ящика"
    Сопровождение

Глава 4. Программные ошибки
    Качество
    Что такое программная ошибка?
    Категории программных ошибок

Глава 5. Документирование и анализ ошибок
    Отчет следует составлять немедленно
    Структура отчета о проблеме
    Каким должен быть отчет о проблеме
    Анализ воспроизводимой ошибки
    Методика анализа воспроизводимой ошибки
    Поиск способа воспроизведения ошибки

Часть II Приемы и технологии тестирования
Глава 6. Система отслеживания проблем
    Основное назначение системы отслеживания проблем
    Задачи системы
    Процесс отслеживания проблемы
    Пользователи системы отслеживания проблем
    Реализация базовых функций системы отслеживания проблем
    Дополнительные замечания о документировании проблем
    Терминология

Глава 7. Разработка тестов
    Характеристики хорошего теста
    Классы эквивалентности и граничные условия
    Тестирование переходов между состояниями
    Условия гонок и другие временные зависимости
    Нагрузочные испытания
    Прогнозирование ошибок
    Тестирование функциональной эквивалентности:
    автоматизация, анализ чувствительности и случайный ввод
    Регрессионное тестирование: успешно ли исправлена ошибка
    Регрессионное тестирование: стандартная серия тестов
    Выполнение тестов

Глава 8. Тестирование принтеров и других устройств
    Общие вопросы конфигурационного тестирования
    Тестирование печати

Глава 9. Адаптационное тестирование
    Изменен ли исходный код?
    Привлекайте к работе специалистов, свободно владеющих языком
    Встроен ли текст в программный код?
    Перевод длиннее исходного текста
    Наборы символов
    Клавиатура
    Фильтрация ввода
    Загрузка, сохранение, импорт и экспорт
    символов основного и расширенного набора ASCII
    Язык и операционная система
    Клавиши вызова
    Сборные сообщения
    Идентификаторы сообщений об ошибках
    Правила переноса
    Правописание
    Порядок сортировки
    Преобразование текста к верхнему и нижнему регистру
    Правила подчеркивания
    Принтеры
    Размеры бумаги
    Процессоры и видео
    Форматы данных и опции настройки
    Единицы измерения
    Изображения, связанные с конкретной культурой
    Выходные данные, связанные с конкретной культурой
    Совместимость с местными продуктами
    Не будьте наивными
    Автоматизированное тестирование

Глава 10. Тестирование документации
    Хорошая документация
    Цели тестировщика документации
    Как тестирование документации повышает
          надежность программного продукта
    Назначьте технического редактора
    Работа с руководством в процессе его разработки
    Интерактивная справка

Глава 11. Инструментальные средства тестировщика
    Базовые инструменты тестировщика
    Автоматизация приемочного и регрессионного тестирования
    Стандарты
    Тестирование "стеклянного ящика"

Глава 12. Планирование и документация
    Общее назначение тестового плана: продукт или инструмент?
    Цели, преследуемые при планировании
        тестов и разработке документации
    Тесты каких типов следует фиксировать
                    в плановых документах
    Стратегия разработки компонентов тестового плана
    Компоненты плана тестирования
    Документирование тестовых материалов
    Заключение

Часть III. Управление проектами и группами
Глава 13. Объединяющая
    Чем приходится поступаться разработчикам
                    программного обеспечения
    Модели разработки программного обеспечения
    Затраты на качество
    Последовательность этапов проекта
    Проектирование продукта
    Реализация базовых функций
    Почти альфа
    Альфа
    Пре-бета
    Бета
    Замораживание пользовательского интерфейса
    Подготовка к финальному тестированию
    Последняя проверка целостности
    Выпуск
    После выпуска

Глава 14. Управление группой тестирования
    Роль группы тестирования
    Группа тестирования - не избавление программистов
    Альтернатива: независимые тестовые агентства
    Советы по планированию
    Персонал
    Приложение. Распространенные программные ошибки
    Ошибки пользовательского интерфейса
    Обработка ошибок
    Ошибки, связанные с граничными условиями
    Ошибки вычислений
    Начальное и последующие состояния
    Ошибки управления потоком
    Ошибки обработки или интерпретации данных
    Ситуации гонок
    Повышенные нагрузки
    Аппаратное обеспечение
    Контроль версий и идентификаторов
    Ошибка выявлена и забыта

Начало
Предисловие
Об авторах
Заказать книгу в магазине «Мистраль»

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

Нагрузочное тестирование – что это?

Составляем методику тестирования

Необходимость разработки методики нагрузочного тестирования

Как стать специалистом в нагрузочном тестировании?

Что почитать или посмотреть по теме?

Нагрузочное тестирование – что это?

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

Учитывая сказанное, становится понятным почему НТ особенно активно используется именно для многопользовательских программ, например, интернет-магазинов или онлайн-кинотеатров.

Сравнение с автотестами и ручным тестированием

Далеко не всегда можно четко провести границу между разными видами тестирования. Например, НТ очень напоминает и даже в чем-то пересекается с так называемым стресс-тестированием, которое также проверяет программу на устойчивость и производительность под предельной нагрузкой.

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

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

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

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

Очевидно, что покупатель не станет ждать оформления заказа в течение получаса, если интернет-магазин декларирует, что это займет 3 или 5 минут.

Виды тестирования в целом

Автотесты и ручное тестирование – это поверхностное разделение, не отражающее сути тестирования. На практике видов тестирования – куда больше:

Краткое описание основных ветвей:

  • По степени автоматизации. То, о чем мы говорили выше – автоматическое, ручное, автоматизированное. Автоматизированное – это когда мы один раз написали тесты, и они запускаются сами при каких-то определенных условиях, очень полезно при регрессионном тестировании (когда мы проверяем, что ничего из уже работающего не сломалось при новом апдейте). Автоматическое – мы написали скрипты, которые проводят тесты за нас.
  • По разработке тестовых сценариев. Тестирование должно покрывать вероятные сценарии, и здесь мы определяем, откуда мы эти сценарии будем брать.
  • По уровню тестирования. Мы решаем, на каком уровне абстракции мы тестируем (приложение, система, или ее отдельные модули) или на какой стадии разработки нам нужно провести тестирование.
  • По позитивности сценария. Проверяем либо позитивные (что-то должно произойти), либо негативные (что-то не должно произойти) сценарии.
  • По исполнению кода. Тестировать можно не только приложение, но и сам его код – проверка компиляции, проверка сохранения стиля кода, проверка исполнения кода интерпретатором и так далее.
  • По знанию системы. Если мы не имеем доступа к исходникам и тыкаем приложение со стороны пользователя – черный ящик, если мы можем посмотреть весь код – белый ящик.
  • По целям. Что мы хотим протестировать? Целей может быть очень много, и веток здесь – соответственно много. Тестировать можно новый функционал, старый функционал, IU, нагрузку, защиту, умение серверов восстанавливаться, базы данных и так далее. Здесь же лежит и нагрузочное тестирование.

Что крайне важно: окончательный вид тестирования может складываться из нескольких ветвей, если они не противоречат друг другу. Например, мы проводим регрессионное белоящичное стресс-тестирование – это значит, что мы при наличии доступа к исходникам проверяем, что после введения нового функционала в проект старые показатели быстродействия при пиковых нагрузках не изменились. Или мы можем провести сероящичное системное автоматическое нагрузочное тестирование (performance testing) на основе требований – то есть мы тестируем всю систему при неполном понимании кода (возможно, используем сторонние сервисы, в которые не можем влезть) на предмет стабильной работы при нормальной нагрузке, «нормальную нагрузку» берем из ТЗ заказчика или из оценок маркетологов.

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

Нагрузочное тестирование – это одна из ветвей тестирования производительности:

У нагрузочного тестирования есть собственные подвиды:

  • Непосредственно нагрузочное. Мы проверяем, что приложение нормально работает при средней нагрузке.
  • Стабильности. То же, что и нагрузочное тестирование, но на длительном промежутке времени.
  • Отказоустойчивости. Предположим, уборщица в серверной мыла пол и выдернула штекер из розетки – у сервера пропало питание. Сможет ли система быстро развернуться заново на новом сервере или в облаке?
  • Восстановления. Подвид предыдущего – как быстро система развернется заново?
  • Стресс-тест. Выдержит ли онлайн-магазин наплыв покупателей на Черную Пятницу?
  • Объема. Что будет, если в базу данных резко записать 100 000 000 новых клиентов?
  • Масштабируемости. Как быстро развернутся новые кластеры в облаке при необходимости?
  • Потенциальных возможностей. При таком тестировании проверяются вообще все пределы приложения: максимум клиентов в минуту, максимум записей в БД, максимум суммарно открытых коннектов и так далее.

Поскольку нагрузочное тестирование не является функциональным, границы видов местами расплываются: стресс-тест может перерасти в тест объема, тот перерастает в тест масштабируемости, когда тест проваливается – он автоматические переквалифицируется в тест восстановления. Поэтому в реальной работе вам обычно дают конкретное задание: например, «Проверить, как онлайн-магазин поведет себя при оформлении 10 000 заказов в минуту», а вы сами уже решаете, как его квалифицировать (нагрузочный, стресс-тест, объема или масштабируемости) и проводите дополнительные тесты при необходимости.

Составляем методику тестирования

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

  1. Сбор максимально полной информации о проекте. Формулирование основных терминов, чтобы избежать разночтений при трактовке результатов.
  2. Определение целей нагрузочного тестирования. Необходимо для выбора подходящих текстов.
  3. Установление ограничений при проведении НТ. Обычно речь идет о том, что уже проверено другими видами тестирования, например, багах или определенных функциях программы.
  4. Правила моделирования системы. Включают отличие от реальных условий использования программы. Они обеспечиваются за счет применения заглушек, виртуализации и эмуляторов.
  5. Возможные ошибки и причины их возникновения.
  6. Характеристики тестового стенда и используемых в ходе тестирования программных продуктов или иных инструментов тестировщика.
  7. Требуемые характеристики программного продукта.
  8. Непосредственное описание этапов тестирования посредством моделирования нагрузки на систему.
  9. Определение перечня получаемых результатов проведения тестов и методов их последующего анализа.
  10. Составление требований к итоговому отчету, включая выдачу рекомендаций по устранению слабых/проблемных мест программы, а также определение максимальной производительности системы.

Приведенная схема МНТ не является догмой. Она корректируется в зависимости от специфики тестируемого программного обеспечения и задач, поставленных разработчиками ПО/заказчиком.

Необходимость разработки методики нагрузочного тестирования

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

Порядок проведения НТ

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

  • изучение тестируемой системы;
  • определение целей тестирования;
  • разработка МНТ;
  • проведение тестов;
  • сбор результатов и их анализ;
  • оформление отчета и его передача заказчику.

ПО для тестов

Оценка производительности ПО в рамках нагрузочного тестирования предусматривает использования разнообразного инструментария.

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

Apache JMeter

Наиболее востребованный инструмент в работе тестировщика. Имеет открытый исходный код, что дополняется еще несколькими существенными преимуществами:

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

Бонусом становится разносторонний анализ полученных результатов. Единственный существенный недостаток – отсутствие поддержки JavaScript.

LoadRunner

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

Единственным серьезным недостатком выступает высокая стоимость лицензии.

LoadNinja

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

K6

Недавно появившийся, но стремительно набирающий популярность онлайн-сервис. Предназначен исключительно для проверки производительности интернет-ресурсов и ПО. Успешно интегрируется с различными инструментами CI.

Дополнительные средства

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

Как стать специалистом в нагрузочном тестировании?

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

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

Важно понимать, что тестирование – это такая область IT-индустрии, которая требует разносторонних знаний.

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

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

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

На какие курсы обратить внимание?

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

  • Нагрузочное тестирование. Курс посвящен непосредственно нагрузочному тестированию, поэтому подойдет тем, у кого уже есть знания/опыт в тестировании. Длительность – 4 месяца, по 4 академических часа в неделю. На курсе рассматриваются конкретные инструменты и подходы нагрузочного тестирования: приведенные выше приложения, метрики, планирование, отчетность и так далее. Стоимость: 91 000 рублей.
  • Тестировщик на Java. Длительный (10 месяцев) курс на получение профессии тестировщика с навыками автоматизации. На курсе рассматриваются вся основная теория по самым распространенным видам тестирования (включая нагрузочное), теория подкрепляется практикой. Язык, на котором вы будете автоматизировать тестирование – Java. Основной упор – на автоматизацию тестирования web-приложений. Стоимость: от 3 153 рубля в месяц при рассрочке на 36 месяцев.
  • Курсы тестирования ПО (QA) в Москве. Можно записаться как на дистанционные, так и на офлайн-курсы. Программа курса – очень насыщенная, вас познакомят со всеми основными видами тестирования и инструментами тестировщика, а также научат работать в команде и понимать место/роль тестировщика в бизнес-логике IT-компании. Длительность курса – 12 месяцев, стоимость – от 2 380 рублей в месяц.

Что почитать или посмотреть по теме?

  1. Канал на YouTube «Нагрузочное тестирование с нуля».
  2. Видео ролик на YouTube «Обзор JMeter. Нагрузочное тестирование в JMeter».
  3. Видео ролик на YouTube «Что такое нагрузочное тестирование?»
  4. Святослав Куликов «Тестирование программного обеспечения. Базовый курс».
  5. Гленфорд Майерс, Том Баджетт, Кори Сандлер «Искусство тестирования программ».
  6. Boris Beizer «Software Testing Techniques».

FAQ

Что такое нагрузочное тестирование?

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

С какой целью оно проводится?

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

Когда НТ становится особенно актуальным?

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

Чем НТ отличается от других видов тестирования?

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

В чем важность составления методики нагрузочного тестирования?

МНТ позволяет четко сформулировать задачи тестирования, определить используемые тесты и даже обосновать необходимость НТ перед заказчиком.

Как стать тестировщиком и насколько актуальной является эта профессия сегодня?

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

Подведем итоги

  1. Нагрузочным называется один из видов тестирования производительности, в рамках которого происходит проверка способности системы выдерживать пиковые или чрезмерные нагрузки.
  2. НТ проводится на последней стадии тестирования – после выявления и устранения багов программного кода, проверки функционала и производительности ПО в обычных условиях.
  3. Основанием для проведения НТ выступает методика нагрузочного тестирования. Она разрабатывается с учетом задач, поставленных перед тестировщиком и специфики тестируемого сайта.
  4. Профессия тестировщик находится на стыке нескольких видов IT-деятельности, а потому требует обширного набора знаний и умений.
  5. Для получения специальности требуется пройти учебный онлайн-курс, но по-настоящему квалифицированным профессионалам можно стать только после получения соответствующего опыта и практических умений.

Понравилась статья? Поделить с друзьями:
  • Нагромождение союзов какая ошибка
  • Нагромождение слов какая ошибка
  • Нагреватель аристон ошибка е22
  • Навьен е 480 ошибка е480
  • Навьен делюкс ошибка 12 как устранить ошибку