Процессы разработки программного обеспечения
В современной разработке программного обеспечения (ПО) получили распространение методы непрерывной интеграции и доставки (Continuous Integration & Continuous Delivery или CI/CD), позволяющие увеличить скорость сборки и поставки и, одновременно, повысить качество готовых программных решений и продуктов. CI/CD характеризуются постоянным (частым) повторением этапов процесса разработки:
- отслеживание изменений в репозитории с исходным кодом,
- сборки проекта,
- различные виды автоматических тестов (unit-тесты, статический анализ кода, интеграционные тесты),
- установки полученных артефактов на различные стенды (сервера).
Continuous Integration / Continuous Delivery
Последовательность процессов CI/CD можно представить в виде конвейера, каждый этап которого служит своего рода шлюзом для контроля качества.
Инструменты, на базе которых реализуются CI/CD, поддерживают выполнение регулярной автоматизированной сборки проекта для оперативной проверки кода (выявления дефектов) и решения задач интеграции.
Непрерывная интеграция позволяет сделать работу более предсказуемой за счет раннего и непрерывного обнаружения и устранения ошибок и противоречий с требованиями спецификации на разработку.
CI/CD позволяет сократить time to market – время с момента поступления запроса на реализацию тех или иных функций программного продукта до его запуска в производственную эксплуатацию.
Обеспечение качества
Принятый ранее в разработке ПО способ тестирования был децентрализованным: проекты имели раздельные фазы разработки и тестирования, команда контроля качества (Quality Assurance – QA) выполняла проверку ПО в рамках отдельного этапа.
В случае CI/CD происходит непрерывное тестирование: тесты выполняются на всех этапах. После каждого изменения исходного кода при помощи инструментов CI/CD и тестовых фреймворков выполняются следующие виды тестов:
- юнит-тесты,
- статическая инспекция исходного кода,
- развертывание тестовых стендов и автоматизированное интеграционное тестирование,
- автоматизированное нагрузочное тестирование.
Например, когда разработчик изменяет код в центральном репозитории (git push), на CI-сервере выполняются автоматизированные юнит-тесты. Если тесты не были пройдены, сборка отклоняется и разработчик получает уведомление. На следующем этапе выполняется статическая инспекция кода с использованием соответствующих специализированных инструментов. Если сборка проходит тесты, она разворачивается в среде для интеграционного тестирования, где подвергается всесторонним функциональным и нагрузочным тестам. Тесты выполняются параллельно. Если все тесты пройдены, релиз отправляется в производственную среду.
Участники проекта и их роль в обеспечение процессов CI/CD и проверки качества
Разработчики отвечают за модульные тесты, снижающие риск неверного функционирования отдельных компонентов приложения.
Команда тестирования (QA) отвечает за подготовку тестов и тестирование общей функциональности приложения.
Бизнес-аналитики контролируют удобство использования ПО и принимают участие в приемочных тестах, чтобы снизить риск создания функций, работающих не так, как ожидают пользователи.
Инженеры инфраструктуры (DevOps) отвечают за развёртывание приложения, миграцию данных и масштабирование с целью снижения риска недоступности продукта. Наличие автоматизированных (в рамках CI/CD) процессов развертывания инфраструктуры проекта и подход IaC (Infrastructure as Сode) позволяют готовить окружения (DEV/QA/PROD) «одной кнопкой».
Применяемые инструменты
- Наиболее часто применяемыми инструментами CI/CD являются (жирным шрифтом выделены инструменты, отображённые на иллюстрациях):
- Maven, Gradle – системы сборки
- Git – система контроля версий
- GitLab – централизованное хранилище исходного кода
- GitLab CI, Bamboo, Jenkins – системы непрерывной интеграции, развертывания и доставки (CI/CD)
- Nexus – централизованное хранилище артефактов
- Ansible – система управления конфигурацией инфраструктуры.