Динамичное прогрессирование и расширение внедрения информационных технологий в разнообразных сферах требуют от архитекторов и программистов активного создания качественных и эффективных информационных систем. Это подчеркивает критическое значение обеспечения качества как ключевого аспекта в процессе разработки информационных систем. В то же время, вопросы и сложности, связанные с тестированием, редко получают достаточное внимание в литературе по сравнению с другими аспектами разработки программного обеспечения.
Оценка работы системы и ее компонентов в контексте взаимодействия с конечным пользователем является не менее важной, чем сам процесс разработки. Часто разработчики не имеют представления о том, насколько эффективно их решения функционируют внутри информационной системы, что означает отсутствие понимания о корректности работы их программного кода. Кроме того, разработчики, менеджеры проектов и высшие руководители компаний часто сталкиваются с проблемами, связанными с оптимизацией затрат на производство программного обеспечения и повышением качества программных продуктов. Одним из основных методов решения этих проблем является тестирование информационных систем.
Тестирование в процессе разработки любого программного обеспечения является фундаментальным этапом создания высококачественных программных продуктов. Обычно компании, специализирующиеся на разработке программного обеспечения, имеют в своем штате специалистов по тестированию программного обеспечения. Путем выявления и исправления ошибок, влияющих на качество программного обеспечения, тестировщики гарантируют, что разрабатываемый продукт может быть выпущен на рынок или продемонстрирован заказчику после тщательной проверки [1].
Таким образом, они обеспечивают функциональность программного обеспечения и помогают превратить программные продукты в законченные продукты, которые работают так, как это задумано разработчиками.
Начало формы
Эволюция тестирования автоматизации является натуральным ходом дел в ИТ-индустрии, открывая перед нами широкие горизонты и предоставляя ряд уникальных преимуществ:
- Она ускоряет процесс тестирования, освобождая команду от рутины и давая возможность решать более сложные технические и аналитические задачи.
- Позволяет быстрее выявлять и устранять ошибки в программном обеспечении, что способствует ускоренному выпуску готового продукта.
- Автоматизация стимулирует более оперативное внедрение обновлений и изменений, способствуя более гибкому и адаптивному процессу разработки.
- Неоспорима актуальность данной темы, поскольку без автоматизации процесса запуска тестирования и подготовки тестового стенда становится крайне затруднительным и длительным. Автоматизация гарантирует, что ни один из этапов, осуществляемых вручную, не будет пропущен, снижая потери времени из-за усталости тестировщика до минимума.
- Внедрение автоматизации существенно повышает эффективность, скорость и результативность тестирования. За счет использования автоматизации количество запускаемых тестов в день увеличивается в несколько раз, что обеспечивает более оперативное выявление и решение проблем в информационных системах.
Актуальность данной темы не вызывает сомнений, поскольку без автоматизации процесса запуска тестирования, включая подготовку тестового стенда, становится крайне трудоемким и времязатратным. Благодаря автоматизации ни один из этапов, проводимых вручную, не будет упущен, а временные потери из-за усталости тестировщика будут минимальными. Автоматизация существенно повышает эффективность, скорость и результативность процесса тестирования. Использование автоматизации позволяет увеличить количество запущенных тестов в день в несколько раз, что обеспечивает более оперативное выявление проблем в информационных системах. Сделав тестирование более простым, быстрым и точным, автоматизированные решения способствуют ускорению процесса разработки информационных систем, сокращению усилий, необходимых для проведения тестирования, и позволяют охватить больше аспектов приложения, что улучшает качество окончательной версии.
На сегодняшний день для обеспечения соответствия информационной системы заданным техническим критериям и для оценки качества программного продукта широко применяется тестирование ПО. Этот процесс предполагает использование программных продуктов в контролируемых условиях, после чего инженеры анализируют полученные результаты. Для получения этих результатов выполняются тесты, каждый из которых должен обнаруживать ошибки, демонстрировать соответствие функций программы её целям, отображать выполнение требований к характеристикам программы, а также обеспечивать надежность и устойчивость системы к сбоям [2].
В процессе разработки информационных систем функциональные требования определяют набор операций, которые должна выполнять вся система или ее отдельные части. Другими словами, функциональное требование указывает, что должен делать программный продукт после определенных воздействий на него.
При разработке информационных систем задаются так называемые функциональные требования, которые указывают, какие операции должна выполнять система или ее часть. Другими словами, это просто описывает, что система должна делать после того, как на нее воздействуют.
Важно записать все эти функциональные требования, потому что они сообщают разработчикам программ, как система должна себя вести. Если программное обеспечение не соответствует этим требованиям, это может означать, что оно работает неправильно и требует исправлений.
Если функциональные требования указывают, какие функции выполняет программа, то нефункциональные требования указывают, как эти функции выполняются системой.
Разработка добросовестного программного обеспечения – это не только о предоставлении нужных функций. Пользователи также ждут, чтобы программа была удобной в использовании, оперативной и надежной. Вопреки очевидности этих ожиданий, они часто пропускаются при обсуждении планов разработки продукта. Опытный бизнес-аналитик или инженер по требованиям выявит и уточнит как очевидные, так и менее очевидные ожидания в процессе диалога с заинтересованными сторонами. В зависимости от объектов тестирования можно провести классификацию различных видов тестов (рис. 1).
Рис. 1. Классификация тестирования (анализ автора)
Одним из наиболее распространенных и широко используемых видов тестирования является нагрузочное тестирование, которое проводится с целью проверки производительности программного обеспечения и его способности работать под нагрузкой. В процессе нагрузочного тестирования на систему накладывается определенная нагрузка, обычно соответствующая максимальной суточной нагрузке за последние 6–12 месяцев. Если система успешно справляется с таким уровнем нагрузки, инженер-тестировщик увеличивает нагрузку на систему до достижения определенных критериев [3].
Эксперименты, которые сосредоточены на рассмотрении возможности информационной системы работать эффективно при повышенных объемах взаимодействия с ней, которые связаны с увеличением количества запросов от пользователей, называют нагрузочным тестированием. Эта процедура сравнима с генеральной репетицией. Если предполагается значительное увеличение трафика, вызванное крупными мероприятиями или акциями, разработчики и архитекторы информационной системы должны убедиться, что веб-сайт и сервера способны справиться с дополнительной нагрузкой. Интересные данные указывают на важность тестов производительности и нагрузочных тестов для 92% ИТ-специалистов, при этом 63% корпоративных ИТ-руководителей проводят тесты производительности для всех новых выпусков. Таким образом, анализ сбоев в программном обеспечении во время нагрузочного тестирования свидетельствует о том, что 91% предприятий тратят более 300 000 долларов США в час из-за простоев [4].
Гатлинг представляет собой фундаментально значимый и крайне инновационный инструмент в области нагрузочного тестирования, демонстрируя высочайшую эффективность и превосходство. В связи с этим инструментом наблюдается стремительный рост его популярности и востребованности. Гатлинг оперирует в рамках JVM и требует присутствия установленной среды выполнения Java для обеспечения своей работоспособности. Отметим, что данный продукт лишен интерфейса визуального взаимодействия, а вся необходимая конфигурация и разработка скриптов осуществляются путем написания кода или применения инструмента записи действий. Кроме того, Гатлинг генерирует детальные и основательные сводные отчеты, предоставляющие обширную аналитику и статистику. Процесс запуска нагрузочного тестирования включает в себя следующие существенные этапы:
- Подготовка базы данных к тестированию, которая включает выполнение сложных SQL-скриптов для необходимой подготовки и предварительной обработки данных.
- Подготовка микросервисов в инфраструктуре Openshift к тестированию, что включает в себя аккуратную процедуру логирования и очистки логов перед началом проведения нагрузочного теста.
- Запуск тестирования на основе заранее разработанных скриптов и сценариев, включая выполнение множества сложных и строго обязательных операций, таких как аутентификация и выбор конкретного тестового сценария.
В таблице 1 приведены ориентировочные временные затраты на процесс запуска тестирования до внедрения автоматизированного решения.
Таблица 1
Временные затраты на процесс до автоматизации (анализ автора)
Процесс | Декомпозиция | Время, мин |
---|---|---|
Подготовка тестовых данных в БД | Подключение к серверу БД | 30 сек. |
Ручное выполнение нужного скрипта SQL | 1 | |
Подготовка сервисов в Openshift | Авторизация | 30 сек. |
Ручной перезапуск каждого микросервиса | 6 | |
Перенос данных на сервер генератора нагрузки | Авторизация | 30 сек. |
Скачивание скриптов и сценариев | 1 | |
Ручной перенос скриптов и сценариев на сервер генератора нагрузки | 2 | |
Ручной перенос сгенерированных данных с БД на сервер генератора нагрузки | 2 | |
Ручной запуск теста на сервере генератора нагрузки | Подключение к серверу генератора нагрузки | 30 сек. |
Поиск папки проекта для системы | 30 сек. | |
Ручной запуск оболочки | 30 сек. | |
Выбор номера запускаемого теста | 30 сек. | |
ИТОГО | 15,5 мин |
Хотя минимальное временное потребление на инициацию процесса сравнялось с 15,5 минутами, что на первый взгляд не представляется критичным, инженер-тестировщик ежедневно проводит не менее четырех тестов. Подводя итоги, общее время, употребленное на запуск тестов за рабочий день, сближается с 62 минутами, и это составляет чуть более 12,9% стандартного рабочего времени при 8-часовой рабочей смене. Учитывая значительный объем задач, выполняемых инженером-тестировщиком, а также обязательный анализ результатов и составление отчетов после каждого тестирования, выявляется, что временные издержки на инициацию значительно увеличиваются. Поэтому, неоспоримо необходимо стремиться к радикальному сокращению временных затрат, связанных с запуском тестов. Проведенный анализ в области непрерывной интеграции и доставки, и инструментов, используемых для нагрузочного тестирования, позволил определить оптимальное решение для автоматизации трудоемкого процесса проведения нагрузочного и стресс-тестирования, а также для улучшения взаимодействия с операционными системами и основным инвентарем тестов, применимым в большинстве ситуаций нагрузочного тестирования.
Архитектура найденного и разработанного автоматизированного решения изображена на рисунке 2.
Рис. 2. Архитектура разработанного решения (анализ автора)
Благодаря хранению кода Pipeline в GitLab, обеспечивается криптографическая безопасность и взаимодействие с Jenkins, который в свою очередь интегрируется с серверами баз данных, генераторами нагрузки и программными заглушками через многозадачный модуль WebApi. Этот компонент является интегрированной средой выполнения, которая позволяет выполнять bat-скрипты, взаимодействуя с многочисленными программными компонентами, такими как Postgres, Openshift и Gatling. Созданный на основе языка Java, этот модуль функционирует как мощное клиент-серверное приложение, использующее REST API для обмена данными. Реализация POST-метода позволяет динамически запускать bat-скрипты на сервере, где развернут WebApi, что в результате гарантирует готовность базы данных, настроенные микросервисы и активированные тесты. Проведение экспериментального анализа автоматизированного решения позволило получить временные оценки выполнения каждого этапа, подробно описанные в таблице 2.
Таблица 2
Временные затраты на процесс после автоматизации (анализ автора)
Процесс | Декомпозиция | Время |
---|---|---|
Подготовка тестовых данных в БД | Выбор действия | Выполнение самого действия = 2,5 сек |
Подготовка сервисов в Openshift | Выбор действия | Выполнение самого действия = 1 мин |
Запуск теста на сервере генератора нагрузки | Выбор действия | Выполнение самого действия = 1 мин 30 сек |
Выбор номера теста | ||
ИТОГО | 2,5 мин |
Проведенный анализ временных аспектов до и после внедрения автоматизированного решения выявил значительное сокращение времени, затрачиваемого на запуск тестов, более чем в 6 раз. В процентном соотношении это составило 16% уменьшение. Если рассматривать данную ситуацию в контексте рабочего дня инженера-тестировщика и учитывать, что ему приходится проводить четыре теста в день, то мы получаем следующее: «2,5 мин × 4 = 10 мин». Предварительный анализ показал, что до внедрения автоматизации время, затрачиваемое на запуск четырех тестов в течение дня, составляло 62 минуты, что эквивалентно 12,9% от стандартного рабочего дня. В результате внедрения автоматизированного решения это время было сокращено до 10 минут, что составляет всего лишь 2% от рабочего дня.
Таким образом, анализирование и исследование эффективности автоматизации привели к выводу о необходимости такого подхода и его успешности. Применение автоматизированного решения позволит значительно уменьшить временные затраты на тестирование, повысить его эффективность и уменьшить количество ошибок инженеров-тестировщиков на этапе подготовки к проведению тестов.