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

В современной разработке программного обеспечения (ПО) получили распространение методы непрерывной интеграции и доставки (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 – система управления конфигурацией инфраструктуры.