ВВЕДЕНИЕ 5
1. ПОСТАНОВКА ЗАДАЧИ 10
2. АКТУАЛЬНОСТЬ ПРОБЛЕМЫ 11
3. ОБЗОР РЕШЕНИЙ В ОБЛАСТИ 13
4. ОПИСАНИЕ И РЕАЛИЗАЦИЯ 17
4.1 Архитектура решения 17
4.2 Анализ сопутствующего ПО для разработки решения 18
4.3 Реализация 21
5. ЭКСПЕРИМЕНТАЛЬНЫЕ ИССЛЕДОВАНИЯ 25
ЗАКЛЮЧЕНИЕ 27
СПИСОК ЛИТЕРАТУРЫ 29
В последнее время Интернет приобрел широкое распространение, и находит применение, как в повседневной жизни, так и во многих сферах бизнеса. Приобретение или создание собственного веб-приложения дает огромное преимущество в ведении бизнеса, а также может и само являться основным доходом компании. Как пример можно привести такие крупные ИТ компании как Google, Yandex и др. Модель монетизации которых, заключается исключительно в получении прибыли от интернет-сервисов за счет рекламы и платного контента.
Популярные и качественные веб-сервисы приносят огромную прибыль, исходя из этого конкуренция в этой сфере бизнеса очень высока. Следовательно, в состоянии жесткой конкуренции даже небольшие неудобства, недоработки или ошибки, допущенные при проектировании или разработке, могут губительно повлиять на выбор пользователя относительно того, какой из доступных веб-сервисов ему использовать в своих нуждах. Таким образом, тестирование приложения до и после его выпуска, играет очень важную роль в процессе его создания и разработки.
Под тестированием программного обеспечения принято понимать деятельность, выполняемую для оценки и улучшения качества и работоспособности программного обеспечения. В общем случае тестирование - это обнаружении дефектов и проблем в программных системах. Тестирование производимого программного продукта подразумевает под собой проведение набора тестов на различных этапах разработки.
Тестирование программного обеспечения подразделяется на три основных группы: функциональные, нефункциональные и связанные с изменениями виды тестирования. К первой группе относится тестирование безопасности и взаимодействия, а также функциональное тестирование. Ко второй - тестирование производительности и отказоустойчивости, usability
тестирование. В третью группу входят следующие виды тестирования: дымовое, регрессионное и тестирование сборки.
Также выделяют два основных типа тестирования: ручное и
автоматизированное. При ручном тестировании тестировщик сам проверяет тот или иной функционал, а также интерфейс приложения, путем использования интерфейса или команд приложения, которые доступны рядовому пользователю. При выполнении данной работы тестировщик пристально следит за результатом выполнения той или иной команды, а также различными данными, которые доступны в специальных технических средствах.
Автоматизированное тестирование программного обеспечения — процесс проверки ПО, при котором основные этапы тестирования, такие как инициализация, выполнение тестовых скриптов, анализ и вывод результирующей информации, производятся автоматически с помощью различных программных продуктов, предназначенных для автоматизированного тестирования. В свою очередь, продукты, относящиеся к данным инструментам тестирования — это программное обеспечение, средствами которого осуществляется создание, выполнение и анализ результатов тестов.
Выполнив автоматизированное тестирование, тестировщик может
сразу получить информацию о результате тестирования, о возникших
ошибках или отклонениях в работе приложения. В случае возникновения
критической ошибки продукт отправляется обратно разработчикам для
устранения проблем. Выбор этого типа тестирования на начальном этапе
разработки довольно затратен, потому как на создание автоматических
тестов требуется больше времени, чем на их однократное выполнение в
ручном режиме, но конечно есть исключения, при которых ручное
тестирование невозможно. Однако в тех случаях, когда данный тест
подразумевает многократное использование, ресурсы, затраченные на его
создание, легко окупятся. Так как автоматические тесты позволяют, не
6
задумываться о проверке некоторой части программного обеспечения, которую они покрывают, и моментально получать уведомления в случае поломок. Это значительно экономит время, затрачиваемое на тестирование, а значит и деньги компании. Единственным минусом автоматизированного тестирования является то, что оно эффективно только в проведении тестирования относительно простых сценариев.
В большинстве случаев автоматизированное тестирование применяется при тестировании производительности. Данный вид тестирования делится на подвиды, в состав которых входят: нагрузочное тестирование, стрессовое тестирование, тестирование стабильности и объемное тестирование. Без автоматизации проведение таких тестов и анализ полученных результатов кажется в принципе невыполнимой задачей. На рынке имеется довольно большой выбор программных продуктов от различных компаний, которые специализируются на автоматизации тестирования. Большинство продуктов имеют достаточно высокую стоимость, иногда даже не смотря на скудный функционал или неудобный интерфейс программы.
В данной работе рассмотрены два вида тестирования - нагрузочное и дымовое. Тестирование производится с использованием инструмента Selenium. Объектом тестирования является высоконагруженное вебприложение. Для проведения нагрузочного тестирования в контексте данной работы было разработано решение, которое позволяет быстро и недорого масштабировать тестирование, безболезненно переходя от дымового тестирования к нагрузочному.
Дымовое тестирование рассматривается как короткий цикл тестов,
выполняемый для подтверждения того, что после сборки кода (нового или
исправленного) устанавливаемое приложение, стартует и выполняет
основные функции. Вывод о работоспособности основных функций делается
на основании результатов поверхностного тестирования наиболее важных
модулей приложения на предмет возможности выполнения требуемых задач
и наличия быстро находимых критических и блокирующих дефектов. В
7
случае отсутствия таковых дефектов дымовое тестирование объявляется пройденным, и приложение передается для проведения полного цикла тестирования, в противном случае, дымовое тестирование объявляется проваленным, и приложение уходит на доработку. Аналогами дымового тестирования являются Build Verification Testing и Acceptance Testing, выполняемые на функциональном уровне командой тестирования, по результатам которых делается вывод о том, принимается или нет установленная версия программного обеспечения в тестирование, эксплуатацию или на поставку заказчику. Для облегчения работы, экономии времени и людских ресурсов рекомендуется внедрить автоматизацию тестовых сценариев для дымового тестирования [11].
Нагрузочное тестирование — (load testing) в профессиональной среде тестирования ПО используется с целью принятия решения о возможности его окончательного запуска в эксплуатацию. Суть нагрузочного тестирования состоит в оценке производительности и быстродействия веб-ресурса (или его приложения) в условиях искусственно созданной определенной нагрузки на систему. Главными индикаторами нагрузки для тестируемых интернетресурсов могут выступать ожидаемое количество его посетителей за конкретный интервал времени, заданное число операций, одновременно выполняемой на платформе веб-сайта.
Наиболее ожидаемым результатом нагрузочного тестирования является факт соответствия полученных результатов тем системным требованиями к работе веб-ресурса, которые разрабатывались на этапе формирования функционала веб-ресурса до начала разработки архитектуры программного обеспечения. Но учитывая тот факт, что заданные требования довольно часто могут быть не определены или недостаточно конкретизированы, используется вариант пробного нагрузочного тестирования (англ. exploratory load testing), которое предусматривает использование вероятностных вариантов ожидаемой нагрузки на систему.
Применение нагрузочного тестирования является оптимальным для
8
определения производительности программного обеспечения веб-ресурса на этапе его ранней разработки, так как способствует выявлению состоятельности системы в целом.
Результатом выполнения выпускной квалификационной работы стало новое решение, позволившее сократить прямые расходы как и заказчика, так и поставщика сервиса.
В ходе выполнения данной работы были разобраны актуальные проблемы тестирования, в том числе автоматизация уже существующих тест кейсов, составляющих полный сценарий дымового тестирования, действующего высоконагруженного веб-приложения, создание на их основе автоматизированных тестов, позволяющих крайне сильно уменьшить трудозатраты тестировщиков на проведение дымового тестирования после каждого изменения системы.
Также, было проведен анализ того, как можно быстро преобразовать имеющиеся тест кейсы для дымового тестирования в нагрузочное тестирование.
Было реализовано решение, состоящее из веб-сервиса и тестов, позволяющее проводить нагрузочное тестирование, не имея дорогостоящих лицензий продуктов, описанных выше.
В ходе работы был сделан вывод, что преимущества автотестов в сокращении времени тестирования программного обеспечения, но при этом их написание требует высокой квалификации тестировщика.
Был проведен сравнительный анализ существующих на рынке решений и было выяснено, что данное решение будет крайне актуальным, особенно, в силу дороговизны существующих продуктов, для не очень больших компаний.
Основываясь на работоспособности данного решения, можно сказать, что успешно выполнены все поставленные в данной работе задачи, а также достигнута цель по разработке недорогого и нового решения на основе уже имеющегося программного обеспечения, как с открытым исходным кодом (например, Mozilla Firefox, NUnit), так и проприетарного (например,
Microsoft Visual Studio).
В дальнейшем данную работу можно применить для проектирования нового программного обеспечения (в силу наличия архитектурного решения данной работы).