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

кандидата физико-математических наук
Максимов, Андрей Вячеславович
город
Москва
год
1993
специальность ВАК РФ
05.13.11
Автореферат по информатике, вычислительной технике и управлению на тему «Иерархическое конфигурационное управление в системе автоматизации разработки крупных программных комплексов»

Автореферат диссертации по теме "Иерархическое конфигурационное управление в системе автоматизации разработки крупных программных комплексов"

МОСКОВСКИЙ ОРДЕНА ЛЕНИНА, ОРДЕНА ОКТЯБРЬСКОЙ РЕВОЛЮЦИИ И ОРДЕНА ТРУДОВОГО КРАСНОГО ЗНАМЕНИ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ М.В.ЛОМОНОСОВА

1 УГЕТ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ

ИЕРАРХИЧЕСКОЕ КОНФИГУРАЦИОННОЕ УПРАВЛЕНИЕ В СИСТЕМЕ АВТОМАТИЗАЦИИ РАЗРАБОТКИ КРУПНЫХ ПРОГРАММНЫХ КОМПЛЕКСОВ

Специальность 05.13.11 - математическое и программное обеспечение вычислительных машин, комплексов, систем и

сетей

На правах рукописи УДК 519.68

МАКСИМОВ АНДРЕЙ ВЯЧЕСЛАВОВИЧ

Автореферат диссертации на соискание ученой степени кандидата физико-математических наук

Москва - 1993

Работа выполнена на кафедре системного программирования факультета вычислительной математики и кибернетики Московского государственного университета им. М.В.Ломоносова.

Научный руководитель: доктор физико-математических наук,

старший научный сотрудник В.А.Крюков

Официальные оппоненты:

доктор технических наук, профессор

Сухомлин Владимир Александрович, кандидат физико-математических наук, старший научный сотрудник

Горбунов-Посадов Михаил Михайлович

Ведущая организация: Научно-исследовательский центр

электронно-вычислительной техники

Защита диссертации состоится 1992 г. в

час. 00 мин. на заседании Специализированного Совета Д. 053.05.38 Н4 при Московском государственном университете им. М.В.Ломоносова по адресу: 119899, Москва, Ленинские горы, МГУ, факультет ВМиК, аудитория

С диссертацией можно ознакомиться в библиотеке факультета ВМиК МГУ.

Автореферат разослан " " ОмЛЛ&Р$ 199 ^ г.

Ученый секретарь Специализированного

Совета Д.053.05.38, профессор Н.П.Трифонов

Общая характеристика работы.

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

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

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

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

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

- представление программной системы в виде иерархии программных объектов разных уровней;

- поддержку вариантов и поколений программных объектов;

- контроль санкционированности и согласованности всех

вносимых изменений.

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

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

Апробация работы. Результаты работы докладывались на научно-исследовательском семинаре по автоматизации программирования (факультет ВМиК МГУ, 1992 г.), на семинаре в Институте прикладной математики им. М.В.Келдыша (1992 г.), на школе - семинаре по программированию (Абрау-Дюрсо, 1992 г.).

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

Структура и объем работы. Диссертация состоит из введения, трех глав, заключения и списка литературы; объем работы без библиографии 82 страницы.

Краткое содержание работы.

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

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

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

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

- проблема двойного сопровождения;

- проблема разделения данных;

- проблема одновременного обновления.

Задача конфигурационного управления - предоставить средства (ручные или автоматизированные), способные решить эти проблемы и, тем самым,, повысить эффективность коллективных разработок.

Никакое реальное программное обеспечение не существует в

единственной версии. Можно выделить следующие причины появления версий у программы:

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

- необходимость поддержки эволюции предоставляемых функций;

- улучшение качества;

- использование различных способов решения одной и той же задачи.

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

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

Далее в главе приводится обзор современных систем конфигурационного управления. Среди них - две системы управления исходным кодом, входящие в окружение ОС UNIX.: SCCS и RCS. Каждая из них управляет библиотекой исходных текстов программ или других текстовых файлов. Они обеспечивают эффективное хранение многочисленных версий модулей с помощью дельта - механизма, контроль их эволюции и поддержку коллективных разработок путем организации защиты модулей от одновременных изменений. Однако ни одна из них не может управлять объектным кодом, загрузочными модулями и другими нетекстовыми файлами. Для решения этой задачи ОС UNIX содержит два инструмента - МАКЕ и BUILD. Инструмент МАКЕ строит загрузочный модуль из его составных частей, обеспечивая состоятельность всех компонентов. Для этого используется описание графа зависимостей модулей друг от друга, хранящееся в специальном файле, а также отметки о времени создания исходного и объектного модулей. Инструмент BUILD - это обобщение программы МАКЕ. С его помощью без избыточных затрат памяти обеспечивается независимое

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

Одна из самых современных разработок в области конфигурационного управления - система Adele. Цель ее создания - предоставить следующие возможности:

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

- определение и контроль всех видов отношений между объектами, используя механизм обнаружения и управления побочными эффектами;

- управление конфигурациями с возможностью просто и надежно строить сложные конфигурации;

- механизм взаимодействия групп разработчиков и защиты программного продукта.

Хранение и управление версиями осуществляется с помощью тех же средств, которые используются в SCCS и RCS. Описание и контроль отношений между объектами в Adele осуществляется с помощью механизма атрибутов. Этот механизм позволяет легко и быстро записывать большие конфигурации, проводить сборку, а также регистрировать побочные эффекты изменений одних объектов в отношении на другие объекты.

В литературе описаны и другие программные продукты, которые содержат аналогичные или частичные решения задач конфигурационного управления. Среди таких продуктов выделим проект GANDALF, систему Cedar н систему языка АДА (ALS). Последние две системы основаны на одном конкретном языке программирования и сильно используют особенности как самого языка, так и инструментов системы программирования.

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

- улучшение управляемости процессом разработки;

- повышение надежности программного комплекса;

- экономия объемов памяти для хранения версий программного комплекса.

Кроме этого, для создания программных систем необходимы

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

Суммируя все сказанное вьгае, сформулируем требования к средствам конфигурационного управления. Эти средства должны обеспечивать:

- представление программной системы в виде иерархии программных объектов разных уровней;

- поддержку вариантов и поколений программных объектов с экономным использованием памяти;

- контроль санкционированности и согласованности всех вносимых изменений;

- хранение истории модификаций с описанием их целей на разных уровнях подробности;

- получение промежуточных версий;

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

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

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

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

Каждый термин может иметь несколько вариантов уточнений,

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

Для решения задачи конфигурационного управления требуются:

- механизм именования вариантов и поколений объектов;

- язык описания конфигурации комплекса.

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

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

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

На множестве свойств определены логические выражения с использованием операций & ("И"), ! ("ИЛИ") и ~ (отрицание). Семантика этих выражений описывается следующими правилами:

1. объект обладает свойством А = В & С, если он обладает как свойством В, так и свойством С.

2. объект обладает свойством А = В ! С, если он обладает хотя бы одним из свойств В и С.

3. объект обладает свойством А = ~В, если он не обладает свойством В.

Введенные таким образом выражения над свойствами позволяют

легко и наглядно описать сложные условия, по которым выделяются те ил:! иные группы объектов, а также использовать их для описания структуры разрабатываемого комплекса программ.

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

- формула свойств;

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

- ссылка на другое описание конфигурации.

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

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

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

Отличия текстов соседних поколений можно представить как множество элементарных изменений, из которых можно составить более сложные изменения. Изменение может иметь имя и свойства. Изменения можно вносить в текст или отменять. Результат применения этих операций назовем промежуточным поколением.

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

Одной из важных задач, связанных с контролем изменений, является обеспечение согласованности изменений в разных програм-

- 10 - .

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

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

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

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

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

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

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

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

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

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

Экспериментальная система поддержки разработки крупных программных комплексов реализована на персональном компьютере IBM PC в операционной системе MS-DOS на языке Паскаль.

В заключении формулируются следующие основные результаты:

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

2. Разработаны принципы организации иерархического конфигурационного управления, обеспечивающие:

- представление программной системы в виде иерархии программных объектов разных уровней;

- поддержку вариантов и поколений программных объектов;

- контроль санкционированное™ и согласованности всех вносимых изменений.

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

Основные положения диссертации опубликованы в следующих работах:

1. Крюков В.А., Максимов A.B., Петренко А.К., Полилова Т. А. Иерархическое конфигурационное управление. - М. , 1992. (Препринт, Институт прикладной математики, N.52).

2. Максимов A.B. Система поддержки разработки крупных программных комплексов. - М.1992. (Препринт, Институт прикладной математики, N.87).

И П М. Зикоа .V 40. Тираж 1CÖ экс.