Любая программная система меняется. Требования развиваются, обнаруживаются ошибки, появляются уязвимости в системе безопасности, а потребности бизнеса меняются быстрее, чем это предусмотрено любым планом. Вопрос не в том, изменится ли система, а в том, будут ли эти изменения контролироваться, отслеживаться, оцениваться, утверждаться, тестироваться и документироваться, или же они будут импровизироваться под давлением. Управление изменениями — это дисциплина, которая определяет ответ. В разработке программного обеспечения это структурированный процесс, в рамках которого предлагаются, оцениваются на предмет влияния и риска изменения кода, инфраструктуры, конфигурации и данных, авторизуются, внедряются и проверяются.
Отличительной чертой зрелого управления изменениями от неформальных практик является не бумажная работа. Важно оценить последствия, которая проводится до внесения изменений, а не после. Команды, понимающие, от чего что зависит, какие модули вызывают какие функции, какие задания JCL запускают какие программы COBOL, какие сервисы используют какие схемы баз данных, могут точно определить масштабы последствий изменения до его принятия. Команды без этих структурных знаний вносят изменения, которые ломают то, о взаимосвязи чего они даже не подозревали.
Оцените влияние каждого изменения, прежде чем его внести.
SMART TS XL Выполняет автоматический анализ влияния на всю вашу кодовую базу.
Узнать большеЧто такое управление изменениями в разработке программного обеспечения?
Управление изменениями в разработке программного обеспечения — это процесс управления модификациями программной системы контролируемым, систематическим способом. Он охватывает весь жизненный цикл изменений: от первоначального запроса до оценки воздействия, оценки рисков, авторизации, реализации, тестирования, развертывания и анализа после реализации.
В разработке программного обеспечения управление изменениями отличается от управления организационными изменениями (которое касается людей и процессов) и от управления изменениями в управлении ИТ-услугами (которое регулирует изменения в ИТ-инфраструктуре в соответствии с такими методологиями, как ITIL). Все три разделяют общую терминологию, запрос на изменение, консультативный совет по изменениям, анализ после внедрения, но различаются по масштабу и цели. Эта статья посвящена управлению изменениями в программном обеспечении: практикам и инструментам, которые регулируют изменения кода, конфигурации и поведения системы.
Почему управление изменениями важно в разработке программного обеспечения
Любое изменение в производственной системе сопряжено с риском. Казалось бы, изолированное изменение в общем модуле может нарушить работу вызывающих его функций. Изменение схемы базы данных может привести к сбоям во время выполнения программ, которые ссылаются на удаленные или переименованные столбцы. Изменение конфигурации, работающее в одной среде, может незаметно завершиться сбоем в другой. Стоимость этих сбоев заключается не только во времени, затраченном на их исправление, но и в последствиях для бизнеса в период между развертыванием и обнаружением проблемы, который в сложных системах может составлять часы или дни.
Управление изменениями снижает этот риск с помощью трех механизмов. Во-первых, структурированная оценка воздействия позволяет определить, на что повлияет предлагаемое изменение, еще до его внедрения. Во-вторых, авторизация изменений гарантирует, что изменения будут рассмотрены и одобрены людьми, обладающими необходимыми знаниями и ответственностью для их оценки. В-третьих, систематический анализ после внедрения фиксирует то, что фактически произошло после изменения, накапливая организационные знания, которые улучшают принятие решений об изменениях в будущем.
Процесс управления изменениями в программном обеспечении
Жизненный цикл управления изменениями в разработке программного обеспечения следует единой последовательности во всех организациях, даже если конкретная терминология различается. В следующей таблице стандартные этапы соотнесены с их назначением и типичными инструментами:
| Этап | Цель | Общие инструменты |
|---|---|---|
| Запрос на изменение | Задокументируйте предлагаемые изменения и их экономическое обоснование. | Jira, ServiceNow, BMC Helix, GitHub Issues |
| Оценка воздействия на | Определите, на что повлияет данное изменение. | SMART TS XLCMDB, инструменты анализа зависимостей |
| Оценка риска | Классифицируйте изменения по уровню риска и приоритету. | Платформы управления изменениями, матрицы рисков |
| Обзор CAB | Одобрить или отклонить изменение, исходя из рисков и влияния на бизнес. | ServiceNow CAB, BMC Helix, рабочие процессы утверждения Jira |
| Реализация | Внесите изменения в соответствии с утвержденным планом. | Конвейеры CI/CD, Git, инструменты управления конфигурацией |
| Тестирование и проверка | Убедитесь, что внесенные изменения работают должным образом и не нарушили работу других компонентов. | Автоматизированные наборы тестов, среды контроля качества |
| развертывание | Разрешите внесение изменений в рабочую среду. | CI/CD, конвейеры развертывания, инструменты управления релизами |
| Постпроектный анализ (ПМИ) | Оцените, достигли ли изменения своих целей, и выявите извлеченные уроки. | Jira, ServiceNow, ретроспективная документация |
Этап 1: Запрос на изменение
Запрос на изменение (CR) документирует предлагаемое изменение программной системы. В нем указывается характер изменения, деловая или техническая причина его внесения, затронутые системы, предполагаемые трудозатраты и любые зависимости от других изменений или систем. Полный запрос на изменение предоставляет консультативному совету по изменениям и группе оценки воздействия всю необходимую информацию для оценки изменений без необходимости доступа к первоначальному инициатору запроса.
Эффективные запросы на изменения отвечают на четыре вопроса: Что меняется? Почему это необходимо изменить? Что будет затронуто? Каков план отката в случае неудачи? Запросы на изменения, которые не могут дать четких ответов на эти вопросы, обычно возвращаются для получения дополнительной информации, прежде чем переходить к оценке воздействия.
Этап 2: Оценка воздействия
Оценка воздействия — наиболее технически сложный этап, и именно на нем большинство программ управления изменениями оказываются наиболее слабыми. Оценка воздействия предлагаемого изменения требует понимания структурных взаимосвязей изменяемой системы: что зависит от изменяемого компонента, от чего зависит изменяемый компонент и как данные перемещаются по затронутым путям.
В организациях с хорошо документированными современными кодовыми базами оценка влияния может поддерживаться представлениями иерархии вызовов IDE, графами зависимостей и результатами автоматизированного тестирования. В организациях с устаревшими системами, особенно в средах COBOL, JCL и мэйнфреймов, взаимосвязи зависимостей часто не документированы, и ручная оценка по своей природе является неполной. Как описано в контексте анализа влияния для корпоративных систем , автоматизированный структурный анализ, который анализирует фактический код, является единственным способом получить полную оценку влияния в масштабе больших устаревших кодовых баз.
Этап 3: Консультативный совет по изменениям (КС)
Консультативный совет по изменениям (CAB) — это орган управления, ответственный за рассмотрение, утверждение или отклонение предлагаемых изменений на основе их рисков, влияния на бизнес и соответствия приоритетам организации. В состав CAB обычно входят представители отделов разработки, эксплуатации, безопасности, заинтересованные стороны бизнеса, а в регулируемых отраслях — представители отдела соответствия.
На заседаниях консультативного совета рассматривается оценка воздействия и классификация рисков для каждого предлагаемого изменения объема работ на рассматриваемый период. Изменения с высоким риском, затрагивающие производственные системы, общую инфраструктуру или регулируемые процессы, подвергаются более тщательному анализу. Стандартные изменения с хорошо изученными и предварительно одобренными профилями могут полностью обойти рассмотрение консультативного совета посредством предварительного согласования.
В организациях, использующих ITIL, изменения классифицируются следующим образом:
| Изменить тип | Профиль риска | Авторизация | Примеры |
|---|---|---|---|
| Стандарт | Низкий, предварительно авторизованный | Предварительно одобрено | Сброс паролей, плановые обновления конфигурации |
| нормально - Normal | Средне-высокая | Требуется проверка CAB | Новые функции, изменения в инфраструктуре. |
| Чрезвычайная ситуация | Высокая, критически важная по времени | Экстренное разрешение CAB или ускоренное разрешение | Обновления безопасности, исправления сбоев в работе производственной среды. |
Этап 4: Внедрение и тестирование
После авторизации изменение внедряется в соответствии с утвержденным планом изменений. На этапе внедрения конвейеры CI/CD, системы контроля версий и инструменты управления конфигурацией обеспечивают фактическую инфраструктуру выполнения. В зрелой среде DevOps утвержденное изменение может быть развернуто с помощью полностью автоматизированного конвейера; в среде мэйнфрейма это может включать скоординированное планирование пакетных окон, управление библиотекой программ и этапы ручного тестирования.
Тестирование подтверждает, что изменение работает должным образом и не привело к регрессиям. Обычно это включает модульные тесты, интеграционные тесты, а для изменений с высоким риском — специальные регрессионные тесты в рамках затронутой области, определенной в ходе оценки воздействия. Объем тестирования должен определяться оценкой воздействия: если в ходе оценки воздействия было выявлено тридцать программ, затронутых изменением в COBOL-шаблоне, план тестирования должен проверять все тридцать.
Этап 5: Постпроектный анализ (ПЗА)
Анализ результатов внедрения (PIR) — это оценка изменений после их развертывания в производственной среде. Он отвечает на следующие вопросы: Достигли ли изменения своей цели? Привели ли они к каким-либо неожиданным побочным эффектам? Соответствовало ли фактическое воздействие оцененному воздействию? Что можно было бы сделать лучше?
PIR (Process Inspection Review) — это механизм, с помощью которого программы управления изменениями совершенствуются с течением времени. Команды, которые постоянно проводят PIR, выявляют закономерности: оценки воздействия, которые систематически упускают из виду определенные типы зависимостей, внедрение изменений, которое постоянно занимает больше времени, чем предполагалось, этапы развертывания, подверженные ошибкам в производственных условиях. Эти закономерности позволяют улучшить процессы, что снижает частоту и серьезность будущих инцидентов, связанных с изменениями.
Управление изменениями против управления релизами
Управление изменениями и управление релизами — это взаимосвязанные, но разные дисциплины. Их часто путают, поскольку многие инструменты и фреймворки (включая ITIL и ServiceNow) охватывают обе области, и потому что обе предполагают координацию изменений в производственных системах.
| Размеры | Управление изменениями | Управление релизами |
|---|---|---|
| Основной фокус | Контроль за индивидуальными изменениями, их оценка, утверждение и отслеживание. | Координирование упаковки и развертывания множества изменений в рамках релиза. |
| Объем | Жизненный цикл индивидуального запроса на изменение | Пакет релизов: несколько изменений развертываются одновременно. |
| Ключевой вопрос | Следует ли утвердить это изменение и когда? | Как безопасно внедрить этот пакет изменений? |
| Управление | Консультативный совет по изменениям (CAB) | Менеджер релизов, календарь релизов |
| тайминг | На протяжении всего цикла разработки | В запланированные сроки выпуска |
| отношения ITIL | Процесс управления изменениями | Процесс управления выпуском и развертыванием |
На практике: управление изменениями утверждает отдельные изменения, которые затем система управления релизами упаковывает и развертывает. Релиз без управления изменениями приводит к развертыванию с неизвестным объемом и неоцененными рисками. Управление изменениями без управления релизами приводит к утвержденным изменениям, которые могут конфликтовать друг с другом при одновременном развертывании.
В средах DevOps границы размываются. Конвейеры непрерывной доставки развертывают отдельные изменения непрерывно, а не объединяют их в запланированные релизы. Управление изменениями адаптируется за счет переноса авторизации на более ранние этапы конвейера (предварительно авторизованные стандартные изменения развертываются автоматически) и за счет использования самого конвейера в качестве механизма управления изменениями.
Управление изменениями в DevOps и конвейерах CI/CD
DevOps не устраняет необходимость в управлении изменениями, он меняет место и способ его функционирования. В традиционной модели управления изменениями комитет по управлению изменениями рассматривает изменения еженедельно или раз в две недели и санкционирует развертывания, которые происходят в соответствии с графиком. В модели DevOps такой темп не позволяет осуществлять развертывания десятки или сотни раз в день.
Адаптация управления изменениями в рамках подхода DevOps перемещает процесс авторизации на более ранний этап и автоматизирует обеспечение соблюдения требований контроля за изменениями:
Предварительно авторизованные стандартные изменения охватывают большинство рутинных развертываний. Изменения, прошедшие автоматическое тестирование, соответствующие пороговым значениям покрытия, прошедшие проверку качества статического анализа и соответствующие определенному шаблону развертывания, предварительно авторизуются и развертываются без проверки CAB. Конвейер является механизмом авторизации.
Автоматизированный анализ влияния изменений в CI/CD интегрирует оценку масштаба изменений в рабочий процесс запроса на слияние. Перед слиянием изменения кода автоматизированные инструменты определяют, на что еще в кодовой базе влияет изменение, и помечают его для дополнительной проверки, если масштаб превышает заданные пороговые значения.
Процессы внесения срочных изменений остаются необходимыми даже в организациях, использующих подход DevOps, для установки исправлений безопасности, устранения неполадок в производственной среде и других критически важных изменений, которые не могут ждать обычного цикла проверки.
YAML
# Example: change management quality gates in GitHub Actions
# Pipeline enforces change controls automatically -- pre-authorization model
name: Change Management Pipeline
on:
pull_request:
branches: [main]
jobs:
impact-assessment:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # full history for accurate diff analysis
- name: Identify changed components
run: |
git diff --name-only origin/main...HEAD > changed_files.txt
echo "Changed files:"
cat changed_files.txt
- name: Run static analysis on changed scope
run: |
npx eslint $(cat changed_files.txt | grep '\.js$' | tr '\n' ' ')
- name: Check test coverage for changed modules
run: npm test -- --coverage --changedSince=origin/main
- name: Fail if coverage drops below threshold
run: |
COVERAGE=$(cat coverage/coverage-summary.json | jq '.total.lines.pct')
if (( $(echo "$COVERAGE < 80" | bc -l) )); then
echo "Coverage ${COVERAGE}% below required 80%"
exit 1
fi
Управление изменениями в ITIL
ITIL (Information Technology Infrastructure Library) определяет управление изменениями как один из основных процессов управления услугами. Управление изменениями в рамках ITIL фокусируется конкретно на изменениях в ИТ-услугах, изменениях в ИТ-инфраструктуре, услугах и программном обеспечении, которые могут повлиять на предоставление услуг.
Основные концепции управления изменениями в ITIL:
График изменений (ранее известный как «Предварительный график изменений»): опубликованный календарь утвержденных изменений и запланированных периодов их внедрения. Предоставляет заинтересованным сторонам информацию о предстоящих изменениях и периодах их влияния на предоставляемые услуги.
Консультативный совет по изменениям (CAB) : руководящий орган, утверждающий стандартные изменения. Экстренный консультативный совет (ECAB) рассматривает срочные изменения вне обычного цикла проверки.
Модели изменений : предопределенные, предварительно авторизованные шаблоны для стандартных изменений. Изменение, соответствующее существующей модели изменений, может быть авторизовано без рассмотрения консультативным советом, поскольку его риски и этапы внедрения известны и контролируются.
CMDB (Configuration Management Database) : инвентаризация элементов конфигурации (CI) и их взаимосвязей. CMDB является источником данных для оценки влияния изменений, она сообщает менеджеру изменений, какие системы и сервисы зависят от изменяемого элемента конфигурации. ServiceNow, BMC Helix и аналогичные платформы ITSM поддерживают CMDB и используют ее для автоматического заполнения представлений оценки влияния изменений.
Управление изменениями в мэйнфреймах
В средах мэйнфреймов возникают особые проблемы управления изменениями, с которыми стандартные инструменты ITSM, разработанные для современной инфраструктуры, не справляются.
Управление библиотекой программ : программы на COBOL компилируются в загрузочные модули, хранящиеся в разделенных наборах данных (PDSE). Изменение программы на COBOL требует компиляции нового загрузочного модуля, его связывания и продвижения через библиотеки разработки, тестирования и производства. Процесс управления изменениями должен отслеживать не только изменение исходного кода, но и цепочку продвижения библиотеки.
Управление изменениями в JCL : изменения в потоках заданий JCL, которые вызывают программы COBOL, могут изменить то, какие программы выполняются, в каком порядке и с какими файлами. Изменения в JCL требуют такого же подхода к оценке влияния, как и изменения в коде; изменение JCL, которое добавляет или удаляет шаг, изменяет ссылку на набор данных или модифицирует символический параметр, может повлиять на поведение программы таким образом, что это будет незаметно без структурного анализа.
Зависимости, связанные с планированием выполнения заданий : пакетные задания на мэйнфреймах выполняются в запланированных временных окнах, часто со сложными цепочками зависимостей, где задание B не может начаться, пока задание A не завершится успешно. Процесс управления изменениями в средах мэйнфреймов должен учитывать эти зависимости планирования; изменение одного задания может потребовать перепланирования всей цепочки зависимостей.
SCLM (Software Configuration Library Manager) — это разработанный IBM инструмент для управления исходным кодом и продвижением мэйнфреймов. Он управляет жизненным циклом исходного кода на этапах разработки, тестирования и производства. Современные альтернативы включают Broadcom ISPW, который интегрирует управление изменениями мэйнфреймов с современными инструментами DevOps.
Для организаций, занимающихся сопоставлением JCL с программами COBOL перед внедрением изменений, важно понимать, какие задания вызывают какие программы, какие наборы данных передаются между этапами и каковы будут последствия любых изменений. SMART TS XLАвтора Расширение JCL А возможности сопоставления зависимостей обеспечивают структурную основу для точной оценки воздействия.
Управление изменениями и анализ воздействия: технические основы
Качество программы управления изменениями напрямую определяется качеством оценки ее воздействия. Организации, которые могут точно ответить на вопрос «на что повлияют эти изменения?» до того, как внесут изменения, имеют принципиально иной профиль риска, чем те, кто этого сделать не может.
Анализ влияния изменений в программном обеспечении требует понимания трех типов взаимосвязей:
Статические зависимости : какие компоненты ссылаются на другие компоненты на уровне исходного кода, вызовы функций, импорт модулей, общие структуры данных, ссылки на схемы баз данных.
Зависимости во время выполнения : какие компоненты взаимодействуют друг с другом во время выполнения, вызовы API, подписки на очереди сообщений, доступ к общим файлам, подключения к базам данных.
Зависимости потока данных : как конкретные элементы данных проходят через систему, какие программы считывают данные из конкретного столбца базы данных, какие нижестоящие процессы зависят от конкретного выходного файла, какая служба использует конкретное поле из конкретного ответа API.
Ручной анализ влияния может частично охватить первый тип проблем, неполно — второй, а третий — практически не охватить для систем любого значительного размера. Автоматизированный структурный анализ, заключающийся в разборе исходного кода каждого компонента и построении доступной для запросов модели всех взаимосвязей, является единственным методом, обеспечивающим полное покрытие.
SMART TS XLАвтора статический анализ кода и сопоставление зависимостей приложения Эти возможности решаются напрямую: прежде чем вносить какие-либо изменения, команды могут запросить модель зависимостей, чтобы определить полный объем затронутых изменений, перечислить конкретные файлы и программы, которые потребуют проверки, и сгенерировать отчет о влиянии, который будет использоваться в качестве структурных доказательств для анализа CAB, а не на основе экспертных оценок.
Передовые методы управления изменениями в программном обеспечении
Определите категории изменений с четкими пороговыми значениями. Стандартные изменения, обычные изменения и экстренные изменения должны иметь документированные критерии. Критерии должны быть достаточно конкретными, чтобы любой член команды мог однозначно классифицировать предлагаемое изменение. Неоднозначная классификация приводит к недостаточному (слишком много стандартных классификаций) или чрезмерному (каждое изменение отправляется в комитет по рассмотрению изменений, даже если оно не является необходимым).
Оценка влияния должна быть структурной, а не разговорной. Оценка влияния, которая сводится к вопросу к разработчику: «Как вы думаете, на что это повлияет?», — это не оценка, а предположение. Эффективная оценка влияния использует данные о зависимостях из самого кода. Знания разработчика — это ценный контекст; они не заменяют структурный анализ.
Интегрируйте управление изменениями в конвейер разработки. Управление изменениями, существующее только в платформе ITSM, а не в цепочке инструментов разработки, игнорируется под давлением сроков. Контрольные точки качества, пороговые значения покрытия и рабочие процессы утверждения, применяемые в конвейере CI/CD, автоматически применяются к каждому изменению.
Необходимо иметь планы отката для каждого обычного и аварийного изменения. Изменение, которое невозможно отменить, не должно развертываться в производственной среде без чрезвычайных оснований. Планы отката следует тестировать в непроизводственных средах перед развертыванием в производственной среде изменений с высоким риском.
Отслеживайте корреляцию между изменениями и инцидентами. Каждый производственный инцидент должен быть соотнесен с последними изменениями, которые ему предшествовали. Со временем эта корреляция покажет, какие категории изменений, какие команды, какие типы компонентов и какие этапы процесса наиболее связаны с производственными инцидентами. Эти данные позволяют проводить целенаправленные улучшения, а не просто ужесточать процессы.
Используйте PIR (Process Inspection Reviews) для замыкания цикла обратной связи. Результаты обзоров после внедрения должны использоваться для формирования шаблона запроса на изменение, контрольного списка оценки воздействия и определений категорий изменений. Процесс управления изменениями, который не учится на собственном опыте, бесконечно повторяет одни и те же ошибки.
Как SMART TS XL Обеспечивает поддержку управления изменениями в сложных системах.
Управление изменениями в системах, использующих несколько языков программирования, платформ и поколений технологий, требует иного уровня структурного анализа, чем тот, который предоставляют большинство инструментов управления изменениями. Когда микросервис на Java, пакетная программа на COBOL и поток заданий JCL взаимодействуют через общие наборы данных и схемы баз данных, изменение любого из них может повлиять на другие таким образом, что ни один инструмент, использующий только один язык программирования, не сможет это выявить.
SMART TS XL Предоставляет модель межъязыковых зависимостей, которая делает оценку воздействия полной для этих сред. Прежде чем внесение изменений будет предложено на рассмотрение CAB, оценка воздействия может включать автоматически сгенерированный отчет об объеме изменений: какие программы на каких языках будут затронуты, какие столбцы базы данных и структуры наборов данных находятся в пути изменений, какие нижестоящие задания или службы зависят от выходных данных измененного компонента.
Эта структурная основа преобразует управление изменениями из процесса обоснованных предположений в процесс принятия решений на основе фактических данных. Комитеты по управлению изменениями, которые рассматривают изменения с учетом точных данных об их влиянии на проект, принимают более взвешенные решения об авторизации. Менеджеры релизов, знающие точный объем релиза, могут соответствующим образом спланировать охват тестирования. Группы по пост-реализационному анализу, имеющие как оценку влияния изменений до их внесения, так и фактические результаты после внесения изменений, могут выявить пробелы в оценке и улучшить следующую оценку.
Для организаций, управляющих модернизация наследия программы, в которых изменения происходят одновременно в устаревших и современных компонентах. SMART TS XLАнализ межъязыковых зависимостей, проводимый компанией, обеспечивает наглядное представление о влиянии изменений, что позволяет управлять модернизацией как программой контролируемых изменений, а не как серией рискованных релизов.
Суть не в самом процессе, а в доказательствах.
Управление изменениями существует потому, что изменения терпят неудачу, когда их последствия не понимаются заранее. Процесс, форма запроса на изменение, заседание консультативного совета, шаблон отчета о результатах работ обеспечивают структуру. Но структура без доказательств — это бюрократия. Консультативный совет, который одобряет или отклоняет изменения на основе оценок застройщика и накопленных знаний, занимается административной работой, а не управлением рисками.
Ценность управления изменениями заключается в программах, которые связывают процесс со структурными данными: автоматизированный анализ воздействия, точно показывающий, на что повлияет изменение, контрольные точки качества, обеспечивающие соблюдение стандартов на этапе разработки, карты зависимостей, делающие невидимые связи в системе видимыми до того, как они приведут к сбоям. Благодаря этим данным управление изменениями выполняет свою задачу: позволяет командам двигаться уверенно, а не осторожно.