Организация производства Информационных систем. Часть 9. Современные подходы
Содержание курса
-
Фаза: Предпроектное исследование. Предварительная оценка реализации
-
Фаза: Разработка (реализация). Имплементация проектного решения
-
Роли специалистов в ИТ-производстве. Предпроектное исследование и Проектирование
-
Современные подходы ИТ-производства
В последнее время происходит фундаментальный сдвиг парадигмы от управления изменениями (проектами) к управлению ценностью (продуктами). Жесткие границы проектов (начало → конец) размываются, уступая место непрерывному потоку операционного производства (DevOps, продуктовая модель).
Если цель в классической модели ЖЦ — создать целевой продукт за конечное время, используя выделенные ресурсы, то в операционной деятельности — это постоянная и непрерывная поставка новый функциональности, добавляющей ценность заказчику от ее использования в ИТ-продукте. То есть стираются явные временные границы производства, “нарезанного” на проекты. Но это не значит, что прекращается измерение конечного успеха производства, просто диагностирование смещается из плоскости проектной деятельности в плоскость достижения бизнес-метрик. Что в свою очередь заставляет менять организацию производства, в частности: подходы к планированию и распределению бюджета (от фиксированных к периодическим), принципы формирования команд (от временных проектных к постоянным кросс-функциональным потоковым). Эти модели мы рассматривали ранее в “Части 2. Варианты организации производства”.
По существу, производство переходит после первого этапа внедрения минимальной функциональности (иногда MVP) в операционную деятельность, переплетаясь с процессами сопровождения. Зачастую операционка начинается еще до окончания формального конца проекта.
Заказчики все реже соглашаются на чистый Fixed Price (классический проект). Растет доля:
-
Time & Material. Ооплата за фактическое время — чистая операционка.
-
Outcome-based. Оплата за достижение метрик — например, рост конверсии.
-
Смешанные. FP на первый этап, далее T&M или подписка SaaS (Software as a Service).
Большинство крупных ИТ-компаний живут в гибридном мире:
-
На уровне портфеля: есть проекты (инициативы с началом и концом).
-
На уровне команды: работа организована как продуктовая операционка (бэклог, спринты, непрерывная доставка).
В результате появляется возможность уйти от итерационного способа производства к инкрементному, постепенно шаг за шагом добавляя новую функциональность к уже используемому ИТ-продукту, дискретно приумножая актив заказчика в измеримых бизнес показателях. Такой подход позволяет значительно дискретизировать цикл превращения затрат на ИТ-производство в прибыль от ИТ-актива.
Естественно это не “чудо” и магия, не просто внедрение новых инструментов, а глубокая трансформация культуры, процессов и ответственности. А потому организация подобного подхода сопряжена с массой рисков и сложностей:
-
Сложность настройки. Необходимость регламентации и автоматизации ручной настройки уникального окружения. Написать пайплайн (особенно для сложного проекта) — это отдельный проект, требует квалификации DevOps-инженера.
-
Стоимость инфраструктуры. Агенты сборки, хранилище артефактов, лицензии на инструменты, а это дополнительные расходы.
-
Хаос зависимостей. Использование “зоопарка” инструментов, сложные интеграции. Успех измеряется не скоростью деплоя (хотя она важна), а тем, насколько предсказуемо работает тестовое окружение и насколько прозрачен след для аудита.
-
Мониторинг. Сложность сбора метрик в цепочке сервисов операционного процесса. Сложность корреляции разных типов данных в едином ID запросе. Разрыв метрик между пилотом и масштабированием.
-
Безопасность. Конфликт со службами ИБ (длительные процедуры проверок и согласования VS скорость DevOps). Наличие изолированных контуров, строго регулируемых сред, большое количество интеграций, в том числе с legacy-системами.
-
Культурные проблемы. Необходимость принимать сквозную совместную ответственность за общий результат на всех шагах производства. Не все операторы готовы допустить разработчиков к серверам.
-
Надежность тестов. Если тесты «мигают» (flaky tests), пайплайн будет тормозить или ложно сигналить. Хорошие автотесты — отдельная большая работа.
-
Прочее…
При рассмотрении данной темы остановимся лишь на самых злободневных аспектах.
1. DevOps конвейер
Для автоматизации постоянно повторяющихся последовательностей “проталкивания” потребности заказчика через этапы ее трансформации в проектную документацию, в код, до готовой протестированной поставки, передающей функциональность заказчику, требуется организация DevOps конвейера.
DevOps pipeline (конвейер DevOps) — это автоматизированный процесс, который доставляет код от момента его написания разработчиком до работающей версии на сервере (или в облаке). Процесс может начинаться с проектирования отдельной функциональности, конвертируемой DevOps конвейером в ценность заказчика, использующего целевой продукт.
Обязательные компоненты DevOps конвейера (по Gartner):
-
Непрерывная интеграция (CI) — автоматическая сборка и оркестрация проверок (тесты, безопасность, соответствие стандартам).
-
Непрерывная доставка (CD) — автоматическое развертывание с поддержкой gated approval (ручное подтверждение) и ungated deployment (полностью автоматическое).
Конвейер DevOps, пожалуй, и выступает тем самым инструментом, который размывает привычные границы проекта. Он меняет концепцию со «сделали проект» на «эксплуатируем продукт«. В отличие от проектного подхода, где конвейер обслуживает временную инициативу с фиксированными границами, в продуктовой модели он становится сквозной системой циркуляции данных и активностей, поддерживающей постоянную эволюцию продукта.
Современный продуктовый конвейер может включать следующие элементы:
|
Компонент |
Назначение |
Примеры инструментов |
|
Система контроля версий |
Единый источник правды для кода и конфигураций |
GitLab, GitHub, Bitbucket |
|
CI/CD платформа |
Автоматизация сборки, тестирования, деплоя |
Jenkins, GitLab CI, Bitbucket Pipelines |
|
Управление артефактами |
Хранение и версионирование сборок |
Artifactory, Nexus |
|
Анализаторы безопасности |
SAST/DAST сканирование, проверка лицензий |
SonarQube, X-Ray |
|
Управление конфигурациями |
IaC, автоматизация окружений |
Ansible, Terraform |
|
Оркестрация контейнеров |
Управление микросервисами |
Kubernetes, OKD/OpenShift |
|
Мониторинг и observability |
Обратная связь из production |
Prometheus, Grafana, ELK |
Универсализация современного DevOps-подхода предполагает активное использование инструментов платформенной инженерии. Если ранее DevOps ассоциировался с набором разрозненных инструментов, которые команды склеивали между собой скриптами, то сегодня доминирующий тренд — унифицированные DevOps-платформы, обеспечивающие единую среду для всего жизненного цикла разработки.
DevOps-платформа — это интегрированная система, которая предоставляет согласованный набор возможностей для автоматизации и управления всем жизненным циклом разработки программного обеспечения: от планирования функциональности и написания кода до развертывания, мониторинга и обратной связи. Успех измеряется не количеством сборок или скоростью деплоя как таковой, а тем, насколько быстро и надежно команда может доставить пользователю работающую функциональность и получить обратную связь для регулирования всего процесса.
2. Место требований в DevOps подходе
Для организации полного цикла производства, процессы должны начинаться со сбора и формализации требований заинтересованных лиц. В DevOps подходе требования к продукту превращаются из статичного контракта передаваемого на этап кодирования, в динамичные гипотезы, которые быстро, при минимальных затратах, проверяются “в бою”. С каждой поставкой, при помощи определенной метрики, собирается обратная связь от бизнеса, требования снова уточняются и отправляются по ЖЦ конвейера. Такой подход предполагает выбор иных предпочтений к составу и качеству самих требований. Вместо всеобъемлющего ТЗ используется Product Backlog; User Stories; Feature. Эти способы представления мы рассматривали в “Части 6. Разработка. 6.2. Имплементация проектного решения”.
В связи с вышесказанным, основными возможностями управления требованиями должны выступать: их постоянное уточнение и быстрая передача в разработку в максимально удобном формате. При этом попадая на этап кодирования требование должно быть пригодным к тестированию (иметь критерии приемки) и его декомпозиции командой на задачи. А сама команда должна иметь канал быстрой коммуникации для уточнений перед реализацией.
Чтобы организовать непрерывный конвейер крайне важно организовать сквозную трассируемость каждого требования: требование (критерии приемки) → задачи → ветка кода → сборка → релиз → метрика (удовлетворение критериям приемки). Такой подход заставляет хранить требования в репозитории и версионировать вместе с исходным кодом.
Полноценный конвейер позволяет в пайплайне (CI/CD) выполнять автоматические проверки соответствия реализации требованиям:
|
Этап конвейера |
Что проверяется |
|
Commit / PR |
Привязана ли задача? Есть ли тесты на требование? |
|
Build |
Компиляция + статический анализ (покрытие требований кодом?) |
|
Automated Test |
Запуск BDD-тестов (Cucumber, SpecFlow, Behave) — они проваливаются, если требование не выполнено. |
|
Staging deployment |
Contract testing (Pact) — не нарушило ли новое требование существующие интеграции. |
|
Pre-production |
Canary / A/B — проверка бизнес-гипотезы, лежащей в основе требования. |
К ключевым практикам управления требованиями в DevOps можно отнести:
1) Непрерывная приоритизация бэклога (Continuous Backlog Refinement)
В классике ТЗ составили, согласовали и зафиксировали. В DevOps бэклог пересматривается и переприоритизируется постоянно (обычно раз в 1-2 недели на встрече с Product Owner):
-
Старые требования могут быть удалены, если потеряли актуальность.
-
Новые требования добавляются на основе фидбека из production.
-
Никакого Change Request. Просто меняется порядок задач.
2) Управление требованиями через «Shift Left» (Сдвиг влево)
Требования начинают проверять как можно раньше, но не через документы, а через код и тесты: «Мы не знаем, что именно нужно пользователю, пока не покажем ему работающий продукт. Поэтому требования — это эксперименты, а не инструкции.»
Например: сценарий используют как автотест, который CI/CD пайплайн прогоняет при каждом коммите. Если тест не проходит — фича считается неработающей и не попадает в релиз.
3) Управление требованиями через Feature Toggles (Флаги функций).
Это ключевая практика DevOps, которая полностью меняет подход к релизам. Суть состоит в том, что код фичи (функциональности) заливается в production выключенным (по флагу). Включение происходит в любой момент по команде Product Owner. Подход позволяет добиться того, что:
-
Требование не нужно «замораживать» до релиза. Код пишется, даже если требование еще обсуждается.
-
Можно включить фичу для 1% пользователей (Canary release) и посмотреть метрики.
-
Если фича не пошла — выключается флагом в один момент (а не переписыванием кода).
3. Организация безопасности в DevOps подходе
В условиях DevOps конвейера, где код может попасть в production за считанные часы, классические подходы обеспечения безопасности перестают работать. Ответом на этот вызов стала концепция DevSecOps — интеграция безопасности в каждый этап жизненного цикла разработки.
В рамках данного раздела рассмотрим лишь высокоуровневые вопросы обеспечения безопасности в современном производстве.
Безопасность в DevOps (DevSecOps) — это интеграция процессов обеспечения безопасности на всех этапах жизненного цикла конвейера, с использованием автоматизации, раннего выявления уязвимостей и непрерывного контроля. Такая необходимость продиктована следующими ключевыми изменениями ландшафта угроз:
-
Приложения охватывают множество сервисов, регионов и облачных провайдеров.
-
Данные перемещаются между микросервисами, API и внешними интеграциями.
-
Контейнеры и условная инфраструктура постоянно меняются.
Подобные вызовы вынуждают вменять вопросы безопасности в общую ответственность разработчиков, инженеров по эксплуатации и специалистов по безопасности, а не наделять ими узкофункциональных специалистов.
Учитывая все вышесказанное необходимо централизованно обеспечивать безопасность на каждом этапе DevOps цикла, используя специализированные инструменты:
|
Этап |
Что делаем |
Инструменты (примеры) |
|
Планирование |
Анализ угроз (Threat Modeling), определение требований безопасности к фиче (STRIDE, OWASP ASVS) |
OWASP Threat Dragon, Microsoft TMT |
|
Разработка |
Безопасные библиотеки/фреймворки, статический анализ кода (SAST), проверка секретов (не коммитим пароли) |
SonarQube, Checkmarx, GitLeaks, TruffleHog |
|
Сборка (CI) |
Сканирование зависимостей (SCA — поиск уязвимостей в open-source пакетах), проверка Docker-образов |
Snyk, JFrog Xray, Trivy, Grype |
|
Тестирование |
Динамический анализ (DAST), интерактивный тест (IAST), тесты на проникновение (автоматизированные) |
OWASP ZAP, Burp Suite (DAST), Contrast Security (IAST) |
|
Доставка (CD) |
Подпись артефактов, контроль доступа к реестрам, политики развертывания (например, запрет образов с critical уязвимостями) |
Cosign (Sigstore), Notary, OPA (Open Policy Agent) |
|
Эксплуатация |
Мониторинг в runtime (анализ поведения), управление уязвимостями в работающей системе, управление секретами (vault) |
Falco, Prometheus + защитные правила, HashiCorp Vault |
|
Реагирование |
Автоматические откаты, изоляция подов/контейнеров, интеграция с SIEM/SOAR |
Kubernetes Network Policies, PagerDuty, TheHive |
Таким образом основная идея DevSecOps предполагает внедрение средств обеспечения безопасности на каждый шаг разработки (начиная с требований и архитектуры), автоматизацию проверок (в том числе зависимостей) и распределение ответственности между всей командой.
Быстро внедрить весь набор перечисленных инструментов и практик не реалистично, поэтому подобные нововведения обычно интегрируют в ЖЦ итерационно. При этом можно выделить следующие уровни зрелости организации безопасности в DevOps:
|
Уровень зрелости |
Характеристика |
Ключевые практики |
|
0 — Безопасность в конце |
Проверки перед релизом, часто пропускаются ради дедлайна |
— |
|
1 -Автоматизированные сканы |
SAST/DAST в CI/CD, но разрозненно |
Инструменты сканирования, manual-ревью «тяжелых» изменений |
|
2 — Shift Left (перенос безопасности на ранние этапы разработки) реализован |
Разработчики получают обратную связь на этапе PR |
IDE плагины, SCA, secrets detection, policy as code |
|
3 — Compliance as Code (соблюдение стандартов без потери скорости) |
Автоматическое enforcement стандартов (PCI, SOC2) |
OPA, автоматизированные доказательства для аудита |
|
4 — Zero Trust (никогда не доверяй, всегда проверяй, даже внутри «безопасной» сети) + Автоматическое реагирование |
Безопасность как инженерная дисциплина |
Service mesh с аутентификацией, автоматическая изоляция скомпрометированных сервисов |
Автор: ARadzishevskiy

