TECHNOLOGY, ENGINEERING
UDC 004.054
Nikiforov A.V. How implementing continuous integration and testing helps ensure compliance with requirements in software
product development.
Как внедрение непрерывной интеграции и тестирование помогает обеспечить соответствие требованиям при разработке программного продукта
Nikiforov Anton Vladimirovich
Graduate Student
MSTU "STANKIN" - Russian technological university, Moscow
Никифоров Антон Владимирович, Студент магистратуры
МГТУ «СТАНКИН» - Российский технологический университет, Москва
Abstract. In this article, a study was made of a continuous integration system in order to improve the efficiency of testing and compliance with the requirements in the development of a software product. Based on the analysis, it was decided to choose the Gitlab CI / CD continuous integration system as the most optimal system for managing integration and testing processes. Thanks to the use of this open-source CI / CD environment, it was possible to create an LMS that meets all technical requirements, covering all the main stages in the development of a learning management system, as well as subsequent iterations of updating and testing each released software product module.
Keywords: CI/CD, LMS, computer software, information system, web-service development, software testing, deployment software.
Аннотация. В данной статье было проведено исследование системы непрерывной интеграции с целью повышения эффективности тестирования и соответствию требованиям при разработке программного продукта. С учетом проведенного анализа, было принято решение выбрать систему непрерывной интеграции Gitlab CI/CD в качестве наиболее оптимальной системы для управления процессами интеграции и тестирования. Благодаря использованию данной open-source среды CI/CD, удалось создать LMS соответствующую всем техническим требованиям, покрывающую все основные этапы при разработке системы управления обучением, а также последующие итерации доставки обновлений и тестирования каждого выпускаемого модуля программного продукта.
Ключевые слова: CI/CD, LMS, компьютерное программное обеспечение, информационная система, разработка веб-сервисов, тестирование программного обеспечения, программное обеспечение для развертывание.
Рецензент: Торопцев Василий Владимирович - кандидат технических наук, доцент. ФГБОУ ВО «РГАУ-МСХА им. К.А. Тимирязева»
Введение
Современное развитие информационных технологий приводит к увеличению сложности программных продуктов. Для обеспечения качественного и надежного функционирования программного обеспечения необходимо обеспечить соответствие его требованиям. Устаревшие методы не могут адаптироваться к постоянно меняющимся требованиям рынка, поэтому они уже не могут удовлетворить потребности конечного пользователя.
Непрерывная интеграция и тестирование являются эффективными методами, которые позволяют улучшить качество программного обеспечения и обеспечить его соответствие требованиям. В данной статье будет рассмотрено, как внедрение непрерывной интеграции и тестирования помогает обеспечить соответствие требованиям при разработке программного продукта. Исследования и опыт показывают, что требования к программному обеспечению изменяются быстро и постоянно.
Вот некоторые факты, которые демонстрируют эту тенденцию:
1. Согласно исследованию, проведенному компанией Flexera, среднее количество установленных приложений на устройстве увеличилось с 27 в 2013 году до 41 в 2020 году. Это означает, что пользователи ожидают больше функциональности от программного обеспечения, и это требует большего внимания к качеству и надежности. [1]
2. Согласно исследованию, проведенному компанией Gartner, к 2024 году 75% приложений будут поставляться через облачные платформы. Это означает, что разработчики программного обеспечения должны учитывать требования облачных сред, таких как масштабируемость и управляемость. [2]
3. Согласно исследованию, проведенному компанией Redgate, 85% разработчиков программного обеспечения сталкиваются с проблемами связанными с зависимостями кода, и это может привести к проблемам с совместимостью и стабильностью. [3]
Актуальность проблемы
Создание качественного программного продукта является важной задачей для многих компаний и организаций. Однако, разработка сложных программных продуктов может быть связана с рядом проблем, таких как повышенная сложность кода, трудности в сопровождении и модификации программного обеспечения, а также отсутствие гарантий его соответствия требованиям заказчика. Для решения этих проблем необходимо использовать современные методы и подходы в разработке программного обеспечения.
Непрерывная интеграция и тестирование являются одними из таких методов. Эти методы позволяют автоматизировать процесс сборки, интеграции и тестирования кода, что позволяет снизить количество ошибок и повысить качество программного обеспечения. Непрерывная интеграция и тестирование также позволяют быстро выявлять уязвимые места и изменения в производительность, что снижает риски возникновения критических проблем в работе программного продукта.
Таким образом, внедрение непрерывной интеграции и тестирования является эффективным методом, который позволяет улучшить качество программного обеспечения и обеспечить его соответствие требованиям. В данной статье будет рассмотрено, какие методы и инструменты используются для реализации непрерывной интеграции и тестирования, а также какие преимущества они могут принести в разработке программного обеспечения.
Способы и методы использования непрерывной интеграции и выбор системы для последующего внедрения ci/cd процессов
Непрерывная интеграция (Continuous Integration, CI) - это процесс автоматической сборки, тестирования и развертывания приложения на каждом этапе его разработки. Она позволяет быстро выявлять ошибки и их источники, что значительно ускоряет процесс исправления и снижает риски возникновения проблем в будущем. Без использования непрерывной интеграции разработка программного обеспечения становится более рискованной и медленной, так как ошибки обнаруживаются только на поздних этапах разработки. [5]
При разработке программного обеспечения необходимо убедиться, что каждое изменение в коде не приведет к нарушению работы продукта в целом. Для этого используются различные методы тестирования, включая функциональное, интеграционное, модульное и другие. Однако тестирование не может ограничиваться отдельными этапами разработки. Вместо этого необходимо использовать непрерывную интеграцию, которая позволяет автоматически тестировать код при каждом изменении.
Существует несколько способов и методов использования непрерывной интеграции, которые могут быть эффективными в различных ситуациях. Одним из наиболее распространенных методов является использование системы контроля версий Git как инструмента за контролем каждого из этапов разработки и одной из возможных систем CI/CD.
Выбор системы CI/CD нужно начать с утверждения что, не все программные комплексы непрерывной интеграции одинаково подходят для всех проектов. При выборе наилучшего решения для внедрения в организацию необходимо учитывать
такие факторы, как тип проекта, используемые технологии, доступные ресурсы, размер команды разработки и другие.
Среди наиболее популярных можно выделить такие как Jenkins, TeamCity, CircleCI, GitLab CI/CD и многие системы управления непрерывной интеграцией и доставкой содержимого.
Другим способом использования непрерывной интеграции является использование инструментов для контроля качества кода. Например, SonarQube может проверять качество кода на предмет соответствия определенным стандартам, а также выявлять потенциальные проблемы и ошибки в коде.
Кроме того, для обеспечения надежности и безопасности программного обеспечения могут использоваться специализированные инструменты для тестирования, такие как Selenium или Appium. Эти инструменты позволяют автоматизировать процесс тестирования и выявлять проблемы и ошибки в работе программного обеспечения.
Для иллюстрации выбора системы непрерывной интеграции для конкретного проекта рассмотрим пример системы управления обучением LMS (Learning Management System), которая является важным инструментом для обучения и оценки студентов в образовательных учреждениях. Для такой системы можно выбрать такую систему непрерывной интеграции, как GitLab CI/CD. Она поддерживает большое количество встроенных функций управления проектом, что делает ее удобной для интеграции с различными инструментами разработки. Кроме того, GitLab CI/CD имеет широкое сообщество пользователей и активно развивается, что обеспечивает поддержку и обновление инструментов в долгосрочной перспективе. Рассматриваемая система может использоваться для различных видов тестирования и соблюдения критериев ПО, включая функциональное, интеграционное, модульное, тестирование производительности и другие. Каждый тип тестирования может выполняться в отдельном этапе процесса непрерывной интеграции.
Для обеспечения правильной последовательности тестирования, на платформе GitLab CI/CD можно создавать pipelines, которые включают различные этапы тестирования. Pipeline - это последовательность шагов, которые выполняются автоматически при каждом изменении кода. Этапы pipeline должны соответствовать последовательности, в которой должны проходить тесты, чтобы убедиться, что ПО соответствует требованиям.
В отличие от других инструментов, GitLab CI/CD является open-source, что означает, что компании могут адаптировать его под свои нужды и настроить его под
свои проекты. Более того, GitLab CI/CD интегрируется с другими инструментами и сервисами, такими как Docker и Kubernetes, что позволяет компаниям создавать сложные системы безопасности и автоматизации, используя уже существующие решения.
В связке с CI/CD, автоматизированные тесты выполняются автоматически после каждого изменения кода. Если тесты не проходят успешно, то CI/CD система автоматически откатывает изменения и сообщает об ошибке разработчику, что позволяет своевременно выявлять и исправлять ошибки до того, как они попадут в основной код.
Автоматизированные тесты также улучшают качество кода. При написании тестов, разработчики вынуждены четко определить требования к функциональности, а также учитывать возможные варианты использования кода.
Опросы разработчиков также подтверждают, что автоматизированные тесты помогают улучшить качество кода и сократить время разработки. 57% опрошенных считают, что автоматизированные тесты улучшают качество кода, а 48% считают, что это помогает сократить время разработки. [4]
1. Почти 70% опрошенных признали, что их команда выполняет тестирование вручную. Тем не менее, почти половина из них также заявили, что их команда планирует увеличить использование автоматизированных тестов в будущем.
2. Большинство опрошенных (78%) считают, что тестирование должно быть встроено в процесс разработки. При этом 43% заявили, что непрерывная интеграция и непрерывное развертывание (CI/CD) - это важные составляющие включения тестирования в процесс разработки.
3. 39% опрошенных признали, что они не понимают, как применять тестирование в своей работе. Тем не менее, большинство опрошенных (67%) хотели бы узнать больше о тестировании, включая различные виды тестирования и лучшие практики.
Эти данные подтверждают важность непрерывной интеграции и ее эффективность в разработке программного обеспечения.
Одной из часто используемых концепций выделяют Test-Driven Development (TDD), методологию разработки программного обеспечения, при которой разработчик пишет тесты для функционала, который он собирается реализовать, а затем пишет код, который должен проходить эти тесты. Таким образом, тесты становятся своего рода
спецификацией для кода, а также позволяют быстро выявлять ошибки в процессе разработки.
Это помогает уменьшить количество ошибок и несоответствий требованиям, так как разработчики получают более четкое представление о том, что должен делать код и как он должен работать.
Однако, необходимо учитывать, что для внедрения непрерывной интеграции и тестирования в процесс разработки может потребоваться дополнительное обучение и подготовка персонала, а также необходимость в доступных и выделенных ресурсах для поддержки системы непрерывной интеграции.
Таким образом, выбор наилучшей системы непрерывной интеграции для конкретного проекта зависит от ряда факторов, которые необходимо учитывать при принятии решения. Различные способы и методы использования непрерывной интеграции могут быть применены в зависимости от конкретных задач и требований к программному обеспечению.
Требования и необходимые критерии для их выполнения в рамках разработки LMS системы.
В качестве примера системы, которая должна соответствовать был выбран общеобразовательный портал удовлетворяющим требованиям LMS, который является важным элементом современной образовательной системы. Он позволяет облегчить процесс обучения и управления учебным процессом, а также предоставляет различные ресурсы для студентов и преподавателей. В разработке такой системы важно учитывать требования и потребности всех заинтересованных сторон.
Для обеспечения соответствия требованиям в разработке общеобразовательного портала, необходимо определить следующие требования к LMS системе:
1. Функциональные требования:
1.1. LMS должна обеспечивать возможность создания и управления учебными курсами.
1.2. LMS должна позволять студентам и преподавателям получать доступ к учебным материалам и ресурсам.
1.3. LMS должна обеспечивать возможность проведения онлайн-тестирования и оценки знаний студентов.
1.4. LMS должна иметь функцию обратной связи для студентов и преподавателей.
2. Требования к безопасности:
2.1. LMS должна обеспечивать защиту конфиденциальных данных, включая личную информацию студентов и преподавателей, а также учебные материалы.
2.2. LMS должна иметь механизмы аутентификации и авторизации пользователей.
3. Требования к производительности:
LMS должна обеспечивать высокую производительность при работе с большим количеством пользователей.
LMS должна иметь механизмы мониторинга производительности и оптимизации работы.
4. Требования к масштабируемости:
LMS должна иметь возможность масштабирования для работы с большим количеством пользователей и учебных курсов.
LMS должна обеспечивать легкость добавления новых функциональных возможностей.
Использование непрерывной интеграции и тестирования помогает обеспечить соответствие требованиям в разработке общеобразовательного портала, позволяет быстро выявлять и устранять ошибки в коде, а также гарантирует более высокое качество программного продукта.
Для внедрения непрерывной интеграции и тестирования в разработку LMS системы, необходимо использовать современные инструменты и технологии, такие как системы автоматического тестирования, контроль версий, системы непрерывной интеграции и развертывания.
Одним из ключевых преимуществ использования непрерывной интеграции и тестирования является уменьшение времени, затрачиваемого на поиск и исправление ошибок, что позволяет сократить время разработки и повысить эффективность работы команды разработчиков.
Таким образом, внедрение непрерывной интеграции и тестирования является важным элементом в разработке общеобразовательного портала, позволяющим обеспечить соответствие требованиям и гарантировать высокое качество продукта.
Результаты внедрения непрерывной интеграции Gitlab CI/CD, на примере системы LMS
Для демонстрации эффективности внедрения непрерывной интеграции я использовал GitLab CI/CD на примере общеобразовательного портала удовлетворяющим критериям LMS. Этот портал был разработан с использованием фреймворков ASP Net Core и Next.js и имел множество зависимостей.
Перед внедрением GitLab CI/CD я провел ряд тестовых запусков, используя стандартные инструменты разработки, и обнаружил, что большое количество ошибок происходило из-за несовместимости зависимостей и конфликтов версий различных компонентов приложения. Эти проблемы замедляли процесс разработки и увеличивали время, необходимое для исправления ошибок.
Для каждого требования создается свое правило, которому система CI/CD следует и производит проверку в соответствии с указанным сценарием. Для проверки функционала создания курсов пишутся интеграционные тесты, которые в автоматическом режиме создают и изменяют данные в разрабатываемой системе. Они имитируют действия пользователя в закрытой среде, на которую не воздействуют внешние факторы, такие как производительность клиентской машины и скорость интернет соединения.
В рамках тестирования функционирования проведения онлайн тестирования производится произвольное заполнение образовательных тестов и последовательное выполнение с указанием верных(неверных) ответов в заданной системе. После приводится отчет о сопоставление желаемых результатов от действительных.
Также создаются сценарии неуспешных попыток входа в систему, подключаются модули для проверки авторизационной политики. Для сравнения по каждому из возможных пунктов требований были созданы автоматические тесты и запущены системы сбора аналитики производительности. Все проверки производятся после каждой итерации разрабатываемой системы, их статус отслеживается системой контроля версий.
После внедрения GitLab CI/CD я заметил значительное улучшение процесса разработки. Непрерывная интеграция позволяла быстро выявлять и исправлять ошибки, а автоматизированные тесты помогали убедиться в том, что новые изменения не влияют на работу существующих функций.
Благодаря GitLab CI/CD, я смог улучшить качество кода, сократить время, необходимое для сборки, тестирования, доставки продукта в производственную среду, уменьшить количество ошибок и увеличить скорость разработки новых функций.
В целом, внедрение непрерывной интеграции GitLab CI/CD оказало значительное положительное влияние на процесс разработки нашего общеобразовательного портала и позволило мне достичь более высокой производительности и качества продукта.
Заключение
В заключение, важно отметить, что внедрение непрерывной интеграции и тестирования с использованием GitLab CI/CD позволяет повысить качество программного продукта и обеспечить его соответствие требованиям. Эта практика помогает быстрее выявлять ошибки и улучшать код, что уменьшает количество багов и повышает удовлетворенность пользователей.
Непрерывная интеграция предоставляет возможность автоматической проверки каждого изменения в коде, что позволяет раньше выявлять проблемы, а также позволяет ускорить процесс разработки и упростить управление версиями. Это помогает снизить затраты на разработку и обеспечивает быстрое внедрение новых функций в продукт.
Использование непрерывной интеграции также помогает обеспечить безопасность кода. Благодаря автоматическому тестированию и проверке кода на наличие уязвимостей, разработчики могут быстро реагировать на возможные угрозы безопасности и обеспечить безопасность программного продукта.
Таким образом, внедрение непрерывной интеграции и тестирования с использованием GitLab CI/CD является важным шагом в обеспечении качества программного продукта и его соответствия требованиям.
References
1. State of the Cloud Report // Flexera.com: [сайт]. - 2020. - [Электронный ресурс]. URL:https://info.flexera.com/SLO-CM-REPORT-State-of-the-Cloud-2020 (дата обращения 05.03.2023).
2. Magic Quadrant for Cloud AI Developer Services // Gartner.com: [сайт]. - 2021. - [Электронный ресурс]. URL: https://www.gartner.com/research/methodologies/magic-quadrants-research (дата обращения 05.03.2023).
3. State of Database DevOps 2021 // Redgate.com: [сайт]. - 2021. - [Электронный ресурс].URLhttps://www.red-gate.com/hub/product-learning/state-of-database-devops-2021 (дата обращения 05.03.2023).
4. The State of Test-Driven Development // Jetbrains.com: [сайт]. - 2021. -[Электронный ресурс]. URL: https://www.jetbrains.com/lp/devecosystem-2021/testing/ (дата обращения 08.03.2023).
5. Duvall, P. M., Matyas, S. Continuous Integration: Improving Software Quality and Reducing Risk / P. M. Duvall, S. Matyas. - 2007. - 336 p.