В управление конфигурацией входят следующие составляющие. Управление конфигурацией. Введение в управление конфигурацией программных средств

24.06.2019 Снилс

Задача процесса управления конфигурациями - предотвратить неконтролируемое развитие проекта. Для регламентации процесса управления конфигурациями в различных отраслях принят ряд международных и национальных стандартов.

08.08.2013 Никита Налютин

Задача процесса управления конфигурациями - предотвратить неконтролируемое развитие проекта, гарантировав, что все изменения учитываются и санкционируются в соответствии с принятой технологией разработки. Для регламентации процесса управления конфигурациями в различных отраслях принят ряд международных и национальных стандартов.

При разработке программных систем создается множество взаимосвязанных объектов: требований, исходных текстов, объектных файлов, описаний тестов и т. п. - согласованные совокупности которых принято называть конфигурациями, а процесс поддержки их изменений и целостности в течение жизненного цикла проекта - управлением конфигурациями . Основная цель введения в проект процесса управления конфигурациями - предотвратить неконтролируемое развитие проекта и дать гарантии того, что все вносимые изменения будут учитываться и санкционироваться. Управление конфигурациями включает в себя процедуры по идентификации элементов проекта, по управлению изменениями и поддержке трассируемости объектов, а также деятельность по поддержке аудитов состояния и контролю статуса конфигурации.

Объект конфигурации (Configuration Item, CI): исходные тексты, скомпилированные программы, исходные коды программ, документация, элементы аппаратуры, процедуры и материалы обучения и т.п. - базовое понятие процесса управления конфигурациями Однако обычно под управление конфигурациями попадают только результаты проектной деятельности: программное обеспечение и сопутствующая документация, требования к интерфейсам и документация, выходные файлы, полученные при использовании инструментов проекта, технико-экономические документы и записи пользовательских требований, планы управления проектом, инструменты и руководства пользователя, записи об истории проекта, тест-планы, процедуры и отдельные тестовые примеры.

При объединении объектов конфигурации образуется их конфигурация - любая структурированная совокупность объектов разработки программной системы, представленных в виде CI, или совокупность процессов и технологических цепочек проекта по разработке программной системы, описания которых также могут быть представлены в виде CI. Процесс управления конфигурациями в различных отраслях регламентируется международными и национальными стандартами: ГОСТ Р 51904, DO-178, AS9100, AS9006, ISO10007, ISO/IEC TR 15846, ISO/IEC 15408, IEEE 1042 и пр. При разработке высококритичных систем применение процесса управления конфигурациями строго обязательно - цена исправления дефектов в таких системах может быть очень высока.

Стандарт ГОСТ Р 51904 был принят Госстандартом России в 2002 году и регламентирует требования к разработке и документированию встроенных систем. В нем процесс управления конфигурациями отнесен к группе интегральных процессов, необходимых для обеспечения качества выполнения процессов разработки и их выходных данных. Интегральные процессы выполняются одновременно с процессами разработки и обеспечивают непрерывную поддержку разработки. Основные цели процесса управления конфигурациями согласно ГОСТ 51904 состоят в том, чтобы обеспечить:

  • определяемую и управляемую конфигурацию ПО на протяжении всего жизненного цикла;
  • целостность при тиражировании исполняемого объектного кода для производства ПО или, в случае необходимости, его повторной генерации для проведения исследований или модификации;
  • управление входными и выходными данными процесса в течение жизненного цикла, что гарантирует непротиворечивость и повторяемость работ в процессах;
  • контрольную точку для проверки, оценки состояния и контроля изменений посредством управления элементами конфигурации и определения базовой линии;
  • контроль над тем, чтобы дефектам и ошибкам было уделено внимание, а изменения были зарегистрированы, утверждены и реализованы;
  • оценку соответствия программного средства требованиям;
  • надежное физическое архивирование, восстановление и сопровождение элементов конфигурации.

Процесс при этом разбит на несколько подпроцессов. При идентификации происходит однозначная маркировка каждого элемента конфигурации и последующих версий с целью установки базиса для управления и ссылок на элементы конфигурации. Для этого принимается схема идентификации, определяющая правила маркировки различных типов элементов конфигурации, их версии, ревизии, статуса. Подпроцесс контроля конфигурации состоит в установлении набора правил, регламентирующих доступ к элементам конфигурации различных групп пользователей, а также в протоколировании всех действий по доступу к элементам конфигурации и их изменению.

Следующим подпроцессом является определение базовой линии разработки с целью создания «моментального снимка» состояния конфигурации в заданный момент времени. Базовая линия может использоваться далее либо как отправная точка для создания новых конфигураций, либо для определения элементов системы, передаваемых для сертификации в сертифицирующий орган.

В процессе управления конфигурациями силами коллектива разработчиков и другими участниками проекта составляются отчеты о дефектах, содержащие описания несоответствий разрабатываемой системы требованиям либо несоответствия процессов разработки принятым стандартам. Управление отчетами о дефектах должно гарантировать, что качественно и в срок будут выполнены корректирующие действия, устраняющие дефекты.

Контроль изменений необходим для предотвращения спонтанной эволюции системы - все вносимые в нее изменения должны быть зарегистрированы, оценены, рассмотрены и утверждены. Такие изменения не нарушают целостности системы и конфигурации. Одновременно осуществляется архивирование конфигурации - это основной подпроцесс, гарантирующий, что все CI в конфигурации утверждены, а изменения в них - санкционированы. Это обеспечивается за счет разграничения прав доступа к CI и определения правил их изменения различными группами разработчиков. Разработчик не сможет получить доступ к CI, если этот доступ не был санкционирован.

Кроме этого, имеются еще подпроцессы ведения отчетности о состоянии конфигурации, необходимые

  • для определения планов разработки, узких мест, установления сроков;
  • контроля загрузки ПО, в результате чего из CI создается конфигурация, предназначенная для выпуска и/или для загрузки во встраиваемую систему (этой конфигурации присваивается регистрационный номер и определяется аппаратура, на которой должна работать система);
  • контроля среды жизненного цикла, дающего гарантию того, что все инструменты проекта идентифицируются, управляются, контролируются и могут быть получены из базы данных проекта.

Практически все процессы управления конфигурациями, определенные стандартом ГОСТ Р 51904, требуют отслеживания состояний жизненного цикла объектов, помещенных в конфигурацию. Так, контроль конфигурации подразумевает, что режим доступа к CI может изменяться в зависимости от их состояния. Создание базовых линий происходит только по достижении всех входящих в нее CI определенного состояния. Управление отчетностью о дефектах производится на основании информации о том, в каком состоянии находится отчет о дефекте и сам дефект, устранен ли он. Отчет о состоянии конфигурации в обязательном порядке включает в себя информацию о состояниях CI. Архивирование конфигураций также может изменять их состояние. Процесс контроля загрузки ПО автоматизируется при помощи создания базовой линии из CI, достигших определенного состояния. Контроль среды жизненного цикла производится на основании информации о том, в каком состоянии находятся инструменты проекта, не требуется ли их обновление.

По своей сути ГОСТ Р 51904, область применения которого - любые встроенные системы, базируется на международном стандарте DO-178, используемом при разработке авиационных систем. Системы, разработанные в соответствии с этим стандартом, могут быть сертифицированы согласно требованиям летной годности.

В целом процесс управления конфигурациями, охватываемый стандартом DO-178, направлен на поддержку целостности данных, создаваемых в ходе всех стадий жизненного цикла продукции. Основная специфика процесса управления конфигурациями, регламентируемого данным стандартом, состоит в учете аспектов сертификации на летную годность, которую должно проходить все программное обеспечение, используемое в бортовых авиационных системах. Данные процесса управления конфигурациями используются в качестве основных данных, интересующих сертифицирующие органы, которым предоставляются индексы конфигураций - списки уникальным образом идентифицированных элементов (исходных текстов, файлов данных, объектного и исполняемого кода), входящих в программное обеспечение. Для подтверждения соответствия качества программного обеспечения заданному уровню критичности бортового ПО, представляются результаты его тестирования, проведенного в соответствии с требованиями к данному уровню. Конфигурация включает в себя связи между требованиями, исходными текстами, тестами, их результатами и другими объектами разработки, чем обеспечивается их трассируемость.

Для проведения сертификации все элементы конфигурации должны иметь статус, свидетельствующий об их готовности к сертификации, а все проблемы, возникающие в ходе разработки, должны быть тем или иным образом закрыты. Данный аспект сертификации обеспечивается предоставлением информации о ведении проблем и включением сообщений о проблемах и связанных с ними запросов на изменение в индекс конфигурации.

С точки зрения стандарта ISO 10007 управление конфигурациями - это управленческая дисциплина, применяемая на протяжении всего жизненного цикла изделия для обеспечения наглядности функциональных и физических характеристик и управления ими. Данная деятельность является способом удовлетворения определенных требований, содержащихся в других международных стандартах серии ИСО 9000. Согласно данному стандарту, процесс управления конфигурациями включает в себя следующие виды деятельности: идентификацию конфигураций, контроль конфигураций, представление отчетности о статусе конфигураций, проверку конфигураций. Охват данного стандарта шире, чем у предыдущих двух, - это не только разработка программного обеспечения, но и все результаты деятельности компании, управление которыми может вестись в соответствии с принципами управления конфигурациями.

Существуют также стандарты AS 9100/AS9006, специально адаптирующие требования системы менеджмента качества ISO к авиационной отрасли.

Все перечисленные стандарты (представлены в таблице) предъявляют практически одинаковые требования к идентификации CI, трассируемости и вычислению статусов. В целом же можно отметить тенденцию к ужесточению предписанных ими требований, прежде всего касающихся интеграции процессов разработки и управленческой деятельности.

Никита Налютин ([email protected]) - менеджер по обеспечению качества, компания Experian (Москва).



руководитель проекта , но с увеличением масштаба проекта эта роль становится главной и требует отдельного назначения.

В должностные обязанности менеджера по управлению конфигурацией обязательно входит :

  • разработка планов и процедур процесса управления конфигурацией;
  • обеспечение реализации планов и документирование результатов;
  • определение базовых положений проекта и содержание релизов;
  • организация и контроль выполнения процедур процесса управления конфигурацией;
  • контроль инструментальных средств хранения информации о процессе управления конфигурацией.

Различные элементы конфигурации передаются под управление конфигурацией в различные моменты времени и включаются в базовые линии в определенных точках жизненного цикла . Инициирующим событием является завершение определенных форм формального утверждения задач, таких как формальная оценка. Примерами элементов конфигурации могут служить настроенные модули ИС, руководство пользователя, планы тестирования, базы данных тестов и прочее.

Организация управления конфигурацией проекта

Для организации выполнения вышеперечисленных задач на стадии планирования ЖЦ ИС разрабатывается план управления конфигурацией, где излагается концепция и определяются средства для автоматизации процесса, а также расписываются все роли и деятельности в зависимости от стадии жизненного проекта воздействует на количество регламентов и их проработанность и детальность. Фазы, взаимодействие между группами, прохождение запросов на изменения описываются более детально. Чем крупнее проект, тем более формализованным должен быть план.

Количество конфигурационных элементов влияет только на более глубокую проработку идентификации элементов. В некоторых случаях полезно определить в плане все типы конфигурационных элементов на основании шаблонов.

Количество компонентов и подсистем влияют на выборку элементов из репозитория (способ выборки и обращения) и глубину изложения раздела, описывающего структуру проектного каталога План УК обычно описывает все фазы жизненного цикла ИС. Иногда при работе с субподрядчиками бывает необходимо более четко выделить фазу, на которой подключается субподрядная организация.

На ход проекта и на план оказывают существенное воздействие такие факторы, как используемые средства разработки , платформа разработки (возможна разработка на нескольких платформах и для нескольких платформ одновременно). Большое значение имеют тип и количество средств реализации (автоматизации УК), их принадлежность одному или нескольким вендорам. Например, в проекте можно использовать средство управления версиями от одного производителя, а средство управления изменениями - от другого. Тип интеграции между средствами, архитектура интеграции должны быть детально рассмотрены в плане УК.

Уровень формализации зависит от многих факторов. Выбирая уровень формальности и глубины изложения, необходимо руководствоваться исходящими задачами и целями. Такие факторы, как сложность проекта, региональная разбросанность, тип проекта, наличие субподрядчиков, должны автоматически подвигнуть к написанию высоко формализованного плана УК. Средний и низкий уровень могут применяться в относительно краткосрочных проектах, проектах, в которых задействовано небольшое количество разработчиков. С ростом команды, разделением ролей план УК должен быть пересмотрен, уровень формализации поднят. В таблице 42 представлен пример структуры плана УК.

В зависимости от размера проекта некоторые пункты плана могут быть пропущены.

На стадии планирования управления конфигурацией необходимо также определить, какие программное обеспечение и аппаратные средства обеспечат достижение целей проекта, разработать планы по контролю и созданию документов проекта, а также определить стратегии, стандарты и процедуры проекта, обеспечивающие управление конфигурацией , документировать, каким образом будут идентифицироваться, организовываться и контролироваться элементы конфигурации.

При планировании разработки АС необходимо выполнить работы в следующей последовательности:

составить перечень работ по разработке АС;

определить состав и количество исполнителей каждой работы;

установить последовательность и взаимосвязи работ;

определить трудоемкость и продолжительность каждой работы;

составить план-график выполнения работ.

Исходные данные для составления перечня работ по созданию АС и определения состава и количества исполнителей дипломник должен получать, как правило, во время преддипломной практики, либо в период проектирования в организации, где выполняется данный проект. При этом необходимо охватить весь перечень видов работ по созданию АС, не ограничивая его только работами, выполняемыми дипломником лично. При этом нужно исходить из того, что дипломник выступает в качестве основного разработчика системы, занятого выполнением работ на протяжении всего периода разработки. Для выполнения отдельных видов работ могут привлекаться другие исполнители. По каждому виду работ определяется квалификационный уровень исполнителей (должности), количество исполнителей. Трудоемкость выполнения каждой работы оценивается экспертным путем в человеко-днях, и носит вероятностный характер, так как зависит от множества трудно учитываемых факторов, поэтому применяются оценки минимально возможной трудоемкости выполнения отдельных видов работ - a j , максимально-возможной - b j и наиболее вероятной - m j . По этим величинам оценивается ожидаемое значение трудоемкостей , по следующей формуле:

;

Продолжительность каждой работы D j определяется по формуле, дн.:

где n j - численность исполнителей, чел.

Экспертные оценки и расчетные величины трудоемкости и продолжительности сводятся в табл. 2.

Таблица 2 - Оценка трудоемкости отдельных видов работ.

Наименования работ по проектированию автоматизированной системы, входящих в нее задач, взаимосвязи работ, исполнители, трудоемкость и длительность заносятся в сводную таблицу для планирования работ, пример которой приведен в табл. 3.

Таблица 3 - Сводная таблица для планирования работ

Исполнители

Наименование работы

работы нужно вы-полнить перед данной

должность

кость работы, чел.-дн.

житель-ность работы, дн.

Разработка технического задания на разработку АС

начальник

старший инженер

Разработка алгоритма

модуля 1…

программ.

Кодирование модуля 1

Отладка модуля 1

Тестирование модуля 1

Разработка алгоритма

модуля 2…

Кодирование модуля 2

Отладка модуля 2

Тестирование модуля 2

Разработка алгоритма

Кодирование модуля 3

Отладка модуля 3

Тестирование модуля 3

Отладка и тестирование интеграции системы

Оформление документации

Если перечень включает не более 10 работ, то планирование процесса создания АС осуществляется на основе ленточных графиков. При планировании более сложных автоматизированных систем составляется сетевой график и используется аппарат систем сетевого планирования.

Сетевой график составляется с учетом последовательности и взаимосвязей работ (табл. 3) по правилам составления сетевых моделей. Пример сетевого графика приведен на рисунке 1. Стрелкой обозначены работы, события - кружочком. Каждое событие имеет номер, который проставляется после построения сети.

Рис. 1 - Сетевой график процесса разработки системы

Длительность разработки АС определяется продолжительностью критического пути сетевого графика.

К р и т и ч е с к и м п у т е м называется последовательность работ между начальным и конечным событием сети, имеющая наибольшую продолжительность.

Длительность разработки автоматизированной системы устанавливается после формирования сетевого плана.

С этой целью рассчитываются временные параметры событий и работ построенной сети.

Р а н н и й с р о к с в е р ш е н и я i - г о с о б ы т и я T рi - время, необходимое для выполнения всех работ, предшествующих данному событию.

T р i = t[ L(Ii)макс ],

где L(Ii) - пути, ведущие от исходного события I до данного события i.

t[ L(Ii)макс ] - продолжительность максимального из путей от исходного события I до данного события i.

Продолжительность критического пути t(L кр) находится по фомуле:

t(L кр) = t[ L(IС)макс ],

где L кр - критический путь;

L(IС) - пути, ведущие от исходного события I до конечного события С.

П о з д н и й с р о к с в е р ш е н и я i - г о с о б ы т и я T пi - время свершения события, превышение которого вызовет аналогичную задержку наступления завершающего события.

T п i = t(L кр) - t[ L(iC)макс ],

t[ L(iC)макс ] - продолжительность максимального из путей от данного события i до завершающего C.

Р е з е р в в р е м е н и i - г о с о б ы т и я R i определяется как разность между поздним и ранним сроком свершения события i, т.е.

R i = T пi - T рi .

В р е м е н н ы е п а р а м е т р ы р а б о т ы между i и j событием сетевой модели находятся следующим образом:

ранний срок начала T рнij = T рi ;

поздний срок окончания T поij = T пj ;

ранний срок окончания T роij = T рнij + t ij ;

поздний срок начала T пнij = T поij - t ij ;

полный резерв времени R пij = T поij - T роij ;

свободный резерв времени R сij = T рj - T роij ,

где t ij - продолжительность работы ij.

Временные параметры событий и работ представляются в форме табл. 4.

Таблица 4 - Временные параметры сетевого плана

Временные пара-

метры событий

Временные параметры работ

План-график по разработке АС формируется на основе рассчитанных временных параметров сети и директивного срока начала разработки . Если этот директивный срок не задан, то  принимается равным 0.

Примерный вид план-графика выполнения работ представлен в табл. 5.

Таблица 5 - Линейный график работ

Наименование

Календарь, мес.

ность, дн.

Разработка ТЗ на АС

Выбор комплекса технических средств

Оформление документации

Если в дипломном проекте разрабатывается программные средства, то следует более подробно рассмотреть вопросы организации, создания и применения программных продуктов.

Сначала все было просто. Молодость, задор. Проект пилили несколько программистов. Все кодили, по мере готовности копировали код на общую виртуалку, изредка попинывали админа на предмет доставить какой-нибудь пакет или поправить конфиг. Как только понимали, что все, шли делать релиз. Сначала backup, потом старшой собирал всю свою крутизну в кулак, копировал проект на production сервер и, при содействии админа, добивался, чтобы оно там заработало. Команда выжидала два дня, убеждалась, что очереди из благодарных пользователей с топориками не образовалось, и, с чувством гордости за выполненную работу, шла пить пиво.

Потом все чуть-чуть повзрослели. Появились и начали как-то использоваться redmine/jira/etc, git/svn, jenkins, spinx-docs/rubydoc/doxygen/etc, wiki, unit тесты. Появились подпроекты, стенд подрос. Production сервачков стало несколько. Админ поднял salt/puppet/etc, мониторинг, сидит в своем логове как паук, правит конфиги на salt-master и дергает оттуда state.highstate.

Жизнь

А это таки подходящее время, чтобы сесть и немного подумать про жизнь (проекта).

Стадий жизненного цикла всего семь.

  1. Conceptual design. На этом этапе надо понять, что вообще надо делать.
  2. Architectural design. На этом этапе надо понять как это нужно делать.
  3. Implementation. Это непостредсвтенно кодинг и unit тестирование.
  4. Verification. Проверка того, что все задуманные функции программа выполняет.
  5. Validation. Проверка того, что программой таки можно пользоваться. Из предыдущего пункта это внезапно не следует.
  6. Ввод в эксплуатацию. В нее обычно входят выкатка релиза, миграция данных, обучение пользователей.
  7. Собственно сама эксплуатация.
  8. Вывод из эксплуатации
Восемь. Про последий пункт все забывают. А он таки тоже очень важен (и не только для атомной станции). Для программного проекта надо позаботиться о данных. На этапах до ввода в эксплуатацию надо убедиться, что все нужные данные из него можно будет извлечь, а на этапе вывода из эксплуатации, что данные реально были извлечены.

Это базовая схема, принятая в системной инжинерии. В зависимости от масштаба, специфики отрасли и религиозных убеждений ПМа, стадии могут переименовываться, склеиваться или наоборот дробиться, но соотнести вменяемый процесс с этой схемой можно всегда. Если в команде принят agile, то схема описывает жизненный цикл отдельной истории.

К чему это все. В таком разрезе, управление конфигурацией есть процесс поддержания изделия в целостном состоянии. Он начинается где-то в районе завершения первой стадии и заканчивается только со смертью проекта. Причем, если этим процессом пренебрегать, смерть может быть скоропостижной.

Что может сломаться?

Версии библиотек. Собрались, набросали диаграмку классов, договорились использовать libcrutch. Одна команда давно и долго сидела на libcrutch-1.0, вторая о ней только узнала и скачала из Интернета libcrutch-2.0. А выясниться это только на интеграционном тестировании. Словить bug можно даже на отличиях libcrutch-1.2.14 и libcrutch-1.2.15. А всякие LD_PRELOAD или docker только подливают масла в огонь. Даже если проект весь из себя на микросервисах, в интерфейсы может быть венесен обмен данными, полученными из libcrutch и имеющими в разных версиях разный формат.

Несоответствие версий компонент. Одни пилят libbase, другие libManagementFacade. В процессе выяснилось, что в libbase-1.14.3 есть мелкий но коварный bug. Поговорили, поправили, забыли. Тестировались на libbase-1.14.4, а в релиз ушло libbase-1.14.3.

Изменение конфигурации окружения. Один POST запрос внезапно начал работать долго. Посмотрели, он не такой уж и важный, пусть себе поработает.Увеличили в nginx таймаут ожидания ответа backend"а. Админ на стенде поправил и забыл. Выкатились и опять старые баги ловить, но теперь уже в боевых условиях.

Изменение проектных решений. Начинали делать под Windows, потом прониклись идеями RMS"а, решили перейти на Ubuntu, но до всех решение не довели. Начали собирать, все принесли deb пакеты, а кто-то, кто был в танке, exe"шник.

Потеря значимого для пользователя функционала. Принесли новую версию, долго рассказывали про смену дизайна, про новые фреймворки, про передовые алгоритмы. Пользователи послушали, головой покивали, и сказали: «Это все хорошо, но вы для нас по нашей просьбе формочку делали. Раньше она была пятым подпунктом в третьем пункте меню, где она теперь?» Потеряли на каком-то merge request"е.

Что делать

Программистам очень повезло, что есть git. Основной удар он берет на себя и от них самих требуется совсем чуть-чуть.
  1. Определить все компоненты, которые нужны для функционирования проекта, убедиться, что они корректно версионируются. Конфигурация в первом приближении это список компонент и их версий.
  2. Понять как обеспечивается перенос конфигурации со стенда в production.
  3. Начать управление требованиями. Вообще говоря, управление требованиями это отдельный процесс. В рамках управления конфигурацией нужно убедиться, что для каждого компонента, попавшего в релизный набор, прилагается документация, в которой точно описаны требования, предъявленные к этому компоненту, и их cтатуcы: выполнено, не выполнено, выполнено частично, с оговорками.
  4. Да и вообще у каждого компонента должна быть документация, которая описывает что как и зачем он делает.
На этапе завершения conceptual design"а , когда специалисты предметники говорят: «Такая система нам нужна!», - технари в один голос заявляют «Сделаем!», - менеджеры дают отмашку: «Ресурсы выделим - делайте!», - нужно убедиться, что согласованное описание системы из головы экспертов вынуто, на требования порезано и в документацию положено. В процессе разработки это описание будет меняться. Надо убедиться, что описание версионируется. Неплохой вариант, если это текст, забрать его в git

На этапе architectural design , когда архитектор сказал, как он это видит, нужно убедиться, что это видение из его головы вынуто, в документацию положено, бирка с версией наклеена. Если это тетрадный лист с диаграмкой, его нужно отсканить, положить в файломойку (или wiki) и сделать на него ссылку.

На этапе разработки нужно убедиться, что код документируется. Неплохо на модули заводить отдельные документы (в git), которые описывают требования к ним и их особенности поведения. Оставлять много информации в redmine/jira не стоит. После допила большой фичи, перед merge"ом в master, нужно убедиться, что ее описание из task tracker"а корректно перенесено в документацию. Просто потому, что через некоторое время в рамках другой задачи поведение может поменяться и собирать документацию по нескольким задачам будет сложно. Task tracker целостную картину не обеспечивает.

Пользовательскую документацию хорошо делать на этапе разработки. Держать (если можно) в git и править параллельно с кодом. Если на это нет специальных технических писателей, контекст уйдет, все забудут, документации точно не будет.

При верификации проверяется соответствие программы выдвинутым требованиям. В конце нужно убедиться, что всем требованиям присвоен статус выполнен/не выполнен.

На этапе валидации , проверяется, можно ли программой пользоваться. Нужно убедиться, что все вносимые в поведение программы изменения сразу отражаются в документации.

На этапе ввода в эксплуатацию проверяется корректность подготовки и накатывания релиза. Надо убедиться, что в него подшиты все компоненты правильных версий. Основной удар здесь держит salt/puppet. Можно и без них, просто выпустив инструкцию по установке, но с ними проще. Готовить их надо правильно и загодя.

Про этап эксплуатации все понятно. Надо просто следовать инструкциям производителя.

На этапе вывода из эксплуатации надо убедиться, что все нужные данные вынуты.

Про сборку и salt/puppet. Это вторая линия обороны (сразу после git"а) Рабочая схема применения примерно такая:

  1. Убедиться, что ситуация с каждым сторонним пакетом ясна: откуда взято, какая версия, какие патчи накладывались. Если какая-то редиска (нехороший человек) приклеивает одинаковые версии на физически разные файлики, его надо убедить, что он не прав, или на всю его продукцию наклеивать дополнительную версию.
  2. Если все rpm"ки скидываются в один репозиторий, нужно убедиться, что понятно, какая именно версия будет накатана. Неплохой вариант - иметь скрипт пересборки всего репозитория и наклеивать версию на весь репозиторий целиком. Другой - версию указывать явно в манифесте/sls-файле. Кстати, у puppet"а есть bug, ресурс package не умеет версию понижать. Почему им не стыдно, я не знаю.
  3. Все манифесты/sls файлы храняться в git. В pillar для salt или параметры классов для puppet выносится только то, что отличает стенд от продакшена. Такими вещами, например, являются ulr"ы web сервисов, параметры наподобии shared_buffers для postgres, флаги, включающие debug режим. Все остальное безжаластно hard"кодится. Параметры задаются один раз при развертывании стенда и в дальнейшем меняются редко. sls файлы воспринимаются как код, он накатывается на стенд, тестируется и в неизменном виде переносится в production.
На этом все. Управляйте конфигурацией правильно, и не забывайте, что хороший тех процесс, это тот, который обходит все грабли и дает отличный результат с первого раза.