Введение

В управлении конфигурацией (CM) необходимо контролировать (в частности) изменения, вносимые в программное обеспечение и документацию. Это называется управлением версиями, которое позволяет отслеживать несколько версий одного и того же элемента информации. Хотя управление версиями важно для CM, оно не тождественно ему. Модели синхронизации, также известные как модели управления конфигурацией (Feiler, 1991), описывают методы, обеспечивающие управление версиями за счет разрешения одновременного, параллельного изменения отдельных файлов.

Модели синхронизации

Фейлер (1991) сообщает о четырех различных моделях синхронизации, которые кратко описаны ниже.

Выезд/прибытие

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

Состав

Модель композиции является расширением модели выписки/возврата. Эта модель позволяет разработчикам мыслить категориями конфигураций, а не отдельных файлов. Хотя модель выписки/возврата полностью представлена в модели композиции, она обеспечивает использование различных стратегий обновления благодаря улучшенной поддержке управления конфигурациями. Конфигурация определяется как формируемая на основе системной модели и правил выбора версий. Системная модель определяет, какие файлы используются, а правила выбора версий – какая версия файлов используется (например, последние версии или версия определенного этапа разработки).

Долгие сделки

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

Настройка изменений

Модель набора изменений также работает на основе запросов на изменения и имеет много общего с моделью длительных транзакций. Однако она начинается с определенной конфигурации, которая служит основой для изменений. Эта конфигурация затем изменяется в соответствии с поступающими независимыми запросами на изменение. Новые конфигурации продукта создаются путем применения наборов независимо сохраненных изменений к базовой версии. В данной статье рассматривается модель синхронизации "check out/check in", включая метамодель (диаграмму данных процесса). Поскольку модель "check out/check in" также является частью других описанных выше моделей, она будет рассмотрена более подробно. Вопросы, которые не обсуждаются подробно, включают три оставшиеся модели синхронизации и непосредственное редактирование элементов конфигурации (CI) вместе с соответствующими методами.

Словарь

Определение понятия
Версия – это состояние объекта или концепции, отличающееся от его предыдущего состояния или условий.
Элемент конфигурации – элемент программного обеспечения или документа, находящийся под контролем версий. Группа элементов конфигурации (ИК) также может быть определена как ИК (Crnkovic et al., 2003).
История элементов конфигурации – концепция, облегчающая присвоение меток версии. Разделяет атрибуты, специфичные для версии, от атрибутов, общих для всех версий (Van de Weerd, 2005).
Документ – к документам относится множество типов документации, используемых в разработке программного обеспечения, например, документы, описывающие архитектуру программного обеспечения, техническая документация, руководства пользователя и т.д.
Файл исходного кода – файл исходного кода содержит любую последовательность операторов, написанных на каком-либо читаемом для человека языке программирования. Исходный код компьютерной программы – это совокупность файлов, которые могут быть преобразованы из читаемой человеком формы в эквивалентную исполняемую компьютером форму.
Репозиторий – репозиторий также называют хранилищем. Репозиторий содержит только одну полную версию элемента конфигурации. Различия между версиями обычно хранятся с использованием дельта-алгоритма (Crnkovic, Asklund & Persson Dahlqvist, 2003).
Организация версий – версии ИК могут быть организованы различными способами. Это родительская концепция для концепций, описывающих организацию версий (Crnkovic et al., 2003).
Ветвь – версии, организованные как параллельные линии разработки (Crnkovic et al., 2003).
Ревизия – версии, организованные в последовательности (Crnkovic et al., 2003).
Состояние разработки – отражает прогресс разработки программного обеспечения и объем дальнейшей разработки, который может потребоваться. Каждая основная версия продукта обычно проходит стадию добавления новых функций (альфа-стадия / состояние), затем стадию активной отладки (бета-стадия / состояние) и, наконец, стадию, на которой все важные ошибки устранены (стабильная стадия / состояние).

Разработка модели "Check-out/Check-in"

В этом разделе приводится подробное описание модели синхронизации выписки/записи.

Диаграмма данных процесса

На приведенной выше схеме данных процесса описаны различные концепции, применимые в модели синхронизации "выдача/возврат", и их связь с выполняемыми действиями. Центральным элементом модели метаданных (справа на рисунке) является элемент конфигурации (КИ). Он хранится в одном или нескольких репозиториях и может быть, например, файлом исходного кода или набором других КИ. Репозиторий может содержать несколько веток и ревизий файлов, которые, в свою очередь, состоят из элементов конфигурации. Мета-модель процесса (слева на рисунке) описывает процесс выдачи и возврата. Эти действия подробно описаны в таблице ниже.

Действие | Поддействие | Определение
------- | -------- | --------
Выдача | | Файлы не читаются и не изменяются напрямую из репозитория. Выдача описывает эти действия.
Копировать КИ | | Определенная версия КИ копируется из репозитория.
Заблокировать КИ | | Если требуется доступ на запись и КИ не заблокирован другим пользователем, КИ блокируется. В противном случае запись КИ в репозиторий невозможна (доступ только для чтения).
Изменить КИ | | Пользователь, редактирующий КИ, вносит в него изменения. Это выходит за рамки текущей метамодели в части управления версиями.
Возврат | | КИ необходимо поместить обратно в репозиторий. Возврат описывает эти действия.
Выбрать стратегию версионирования | | Новый КИ должен быть возвращен в репозиторий с использованием стратегии версионирования. Это описывает выбор стратегии, используемой для возврата КИ в репозиторий.
Создать ветку | | КИ выбирается в качестве начала новой ветки.
Создать ревизию | | КИ выбирается в качестве ревизии другого КИ.
Выбрать состояние разработки | | КИ определяется как находящийся в определенном состоянии разработки.
Записать КИ | | КИ сохраняется в репозитории.
Разблокировать КИ | | КИ разблокируется.

Оценка

Файлер (1991) оценил модель синхронизации "check out/check in". Ее несомненное преимущество – простота использования и понимания. Однако эта простота приводит к недостатку управления конфигурациями, например, к отсутствию отслеживания версий продукта и проверки истории изменений в нескольких логически связанных файлах. Механизм блокировки также представляет собой серьезную проблему при работе с большим количеством разработчиков, поскольку после блокировки файлы становятся недоступными для редактирования другими пользователями.

Пример

Для иллюстрации модели синхронизации "check out/check in" в этом разделе приведён пример работы этого процесса. На рисунке ниже представлена диаграмма переходов состояний КИ. Когда КИ впервые создаётся, он изменяется и сохраняется в репозитории. Когда кто-то запрашивает открытие КИ, он сначала копируется на локальный компьютер разработчика (примечание: существуют системы, где редактирование происходит непосредственно в репозитории. Однако этап копирования является классическим способом "check out/check in"). Когда разработчик также хочет отредактировать КИ, он запрашивает блокировку. Это можно сделать непосредственно при запросе открытия КИ, но также и спустя некоторое время после его чтения. Если КИ ещё не заблокирован, применяется блокировка, и разработчик может его изменять. После внесения изменений он сохраняется обратно в репозиторий и разблокируется. Теперь предположим, что разработчик, о котором шла речь, в данный момент редактирует КИ, который уже находится в репозитории. Вы хотите открыть КИ из репозитория, поэтому он копируется на ваш локальный диск. Вы начинаете его читать и находите то, что хотите изменить, поэтому запрашиваете разрешение на редактирование. Однако КИ уже заблокирован, и вам придётся ждать, пока он будет разблокирован, или закрыть файл и перейти к другому.