И.А. Волкова, И.Г. Головин, Л.Е. Карпов - Системы программирования (1119414), страница 20
Текст из файла (страница 20)
В это же самое время разработчики могутпродолжать свою работу над созданием и отладкой очередных версий.Широкое внедрение программных систем в различные прикладные областипривело к разнообразию способов применения этих систем. Поиски путей снижениязависимости программного обеспечения от конкретных параметров окружения, вкотором это обеспечение разрабатывается и функционирует, привело к попыткамвыносить описания параметров окружения, а также режимов формирования ииспользования программ за пределы этих самых программ.Внедрение средств управления конфигурацией шло постепенно и к настоящемумоменту можно выделить четыре способа управления конфигурацией программныхкомплексов.
К указанным вариантам управления конфигурацией относятся:•конфигурирование из командной строки,71•••использование командных файлов,работа в интегрированных средах с проектами программных комплексов,использование систем управления версиями программных комплексов.Работа в режиме командной строки предполагает последовательное обращение ктем или иным компонентам системы программирования и передачу им параметров ввиде последовательностей символов, входящих в эту командную строку.
Такой способработыподразумеваетвысокуюквалификациюпользователясистемыпрограммирования, который должен точно знать все компоненты конкретной системыпрограммирования, необходимые для формирования нужной ему программы,необходимые им параметры, а также правильную последовательность их вызова.Управление сборкой программы ведется в этом случае “вручную”.
Пользовательдолжен помнить варианты сборки программы, режимы, в которых выполнялось ихформирование, имена файлов, в которых размещены результаты работы системыпрограммирования.Помощь в снижении трудоемкости формирования программных комплексовоказывает использование командных файлов, содержащих последовательности вызововкомпонентов систем программирования. Их применение освобождает программистовот запоминания многих технических деталей, которые нужно точно знать тольконепосредственно в момент создания командного файла. Все вариации конфигурацийможно получать, используя развитые языки управления заданиями современныхоперационных систем, например, возможности условного вызова программ системыпрограммирования или значения переменных системного окружения.Примыкает к такому способу управления конфигурацией работа винтегрированных средах разработки программного обеспечения.
Такие системы умеютработают с “проектом программного комплекса”, который включает в себя все файлыкомплекса (как с текстами программ, так и с библиотечными модулями), а такжережимы их обработки. Интегрированные среды позволяют гибко переходить ототладочной конфигурации комплексов к оптимизированной конфигурации, чтооблегчает процесс сопровождения уже разработанных программ.Перечисленные способы управления обладают своими преимуществами(простотой или удобством), но имеют один существенный недостаток. Ихиспользование возможно только в тех случаях, когда над разработкой илисопровождением программного комплекса работает один программист (если такихпрограммистов много, они должны работать последовательно друг за другом, сообщаядруг другу обо всех сделанных ими изменениях в программах).
Однако в последнеевремя все чаще приходится видеть, что разработкой программ (тем более ихсопровождением) занимаются целые коллективы разработчиков. Иногда этиколлективы работают в распределенном режиме в глобальной вычислительной сети.Реальную помощь таким коллективам при управлении конфигурациейформируемых программных комплексов могут оказать только специальноразрабатываемые системы управления версиями программ. Эти системы способнывести централизованные базы данных программных проектов, к которым обеспеченколлективный доступ со стороны многих разработчиков одновременно.3.8.
Системы управления версиями программных комплексовВ настоящее время многие системы программирования начали включать в свойсостав системы управления версиями. Например, в составе систем Visual Studio72компании Microsoft, имеется система Visual SourceSafe, позволяющая создавать базыданных версий, включать файлы в состав версий программных проектов, отслеживатьисторию их изменений, сравнивать различные версии между собой.
Имеется такжеопределенный выбор систем управления версиями, которые не привязаны жестко ккакой-либо системе программирования, а могут работать с любыми из них, ведя базыданных или репозитории файлов, составляющих законченные программные комплексы.Такие автономные системы управления версиями обычно удобны тем, чтопозволяют вести управления версиями особенно сложных программных комплексов –распределенных. Эти программные комплексы не только работают, но и создаются враспределенном окружении, в котором разные программисты работают с разнымисистемами программирования, создавая относительно независимые компонентыединой сложной программы.
В этих условиях особенно важно, чтобы работа срепозиторием файлов велась в сетевом режиме с возможностью одновременногодоступа с многих рабочих мест. Такой сетевой репозиторий начинает играть рольпрограммного сервера, а рабочие места оказываются клиентами этого сервера. Приэтом клиенты могут быть самыми разнообразными, они могут работать с разнымаппаратным обеспечением, с разными операционными системами, с разнымисистемами программирования. Необходимо лишь, чтобы система управления версиямимогла взаимодействовать со всеми ними по единым, понятным для всех правилам.Именно так и работают лучшие и наиболее используемые системы управленияверсиями, которые способны поддерживать до нескольких десятков операционныхсистем и нескольких тысяч клиентов, одновременно работающих над созданиемединого программного комплекса.Среди коммерческих систем наиболее широко используются системыуправления жизненным циклом программ Peforce SCM (Software ConfigurationManagement) и IBM Rational ClearCase.
В задачу этих систем входит создание иизменение конфигураций программ, их комплексирование, регистрация поставок, атакже обеспечение повторного использования программ. На клиентских местахразрешается использовать все наиболее распространенные операционные системы(Windows, UNIX, Linux, mainframe z/OS), а также наиболее современные системыразработки, включая Rational Application Developer, WebSphere Studio, Microsoft VisualStudio .NET, Eclipse.Широко известны и свободно распространяемые системы управления версиями,среди которых лидером является система CVS (Concurrent Versions System).
Сервернаячасть системы может работать под управлением любого варианта операционнойсистемы UNIX – FreeBSD, Linux и др. Клиентские части работают под управлениемUNIX систем, а также системы Windows.Система CVS поддерживает историю дерева каталогов (репозитория) сисходным кодом, работая с последовательностью изменений. Каждое изменение вфайлах репозитория маркируется моментом времени, когда оно было сделано, иименем пользователя, совершившим изменение. Обычно человек, совершившийизменение, также предоставляет текстовое описание причины, по которой произошлоизменение. Система CVS может отвечать на такие вопросы:••••Кто совершил данное изменение?Когда они его совершили?Зачем они это сделали?Какие еще изменения произошли в то же самое время?73Точно так же, как книгу выписывают из библиотеки, следует сначала получитьиз репозитория рабочее дерево каталогов.
Большинство этих файлов – рабочие копииисходных текстов. Однако самый первый подкаталог имеет другое назначение. CVSиспользует его для хранения дополнительной информации о каждом файле в этомкаталоге, чтобы определять, какие изменения внесены в них с тех пор, как их извлеклииз репозитория.После того, как рабочее дерево каталогов создано, можно редактировать,компилировать и проверять находящиеся в нем файлы. Так как каждый разработчикиспользует собственный рабочий каталог, изменения, которые делает каждый из них всвоем каталоге, не становятся автоматически видимыми всем остальным. Когдаизменения будут проверены, их надо зафиксировать в репозитории и сделатьдоступными остальным.Перед тем, как фиксировать изменения, необходимо, чтобы исходные текстыбыли синхронизованы со всеми изменениями, которые сделали остальные членыгруппы. Перед фиксацией система запускает текстовый редактор и просит ввестиописание изменений.Система CVS позволяет узнать, какие изменения внесли другие разработчики.Журнальные записи выводятся на экран в обратном хронологическом порядке, исходяиз предположения, что недавние изменения более интересны.Система CVS обращается с добавлением и удалением файлов так же, как и спрочими изменениями, записывая такие события в истории файлов.
Фактически,система сохраняет историю каталогов вместе с историей файлов, однако, система несчитает, что все созданные файлы должны оказаться под ее контролем; это не так вомногих случаях. Например, не требуется записывать историю изменений объектных ивыполняемых файлов, потому что их содержимое всегда может быть воссоздано изисходных файлов.Чтобы удалить файл из проекта, его помечают для удаления.
Фиксацияпомеченного файла не уничтожает историю этого файла – к ней просто добавляетсяеще одна редакция (“не существует”). В репозитории по-прежнему хранятся все записиоб этом файле, и к ним можно обращаться по желанию.CVS объединяет изменения, сделанные разными разработчиками. Ситуацияпроста, если изменения были совершены в разных участках файла, но может бытьизменена одна и та же строка, что называется конфликтом. CVS не понимаетсемантики программы, она обращается с исходным кодом просто как с деревомтекстовых файлов.
Если один разработчик добавляет новый параметр в функцию иисправляет все ее вызовы, пока другой разработчик одновременно добавляет новыйвызов этой функции, и не передает ей этот новый параметр, что определенно являетсяконфликтом (два изменения несовместимы), то система CVS не сообщит об этом. Еепонимание конфликтов строго текстуально.На практике, однако, конфликты случаются редко. Обычно они происходятпотому, что два человека пытаются справиться с одной и той же проблемой, плоховзаимодействуя между собой. Правильное распределение задач между разработчикамиуменьшает вероятность конфликтов.Многие системы контроля версий позволяют разработчику блокировать файл,предотвращая внесение в него изменений до тех пор, пока его собственные измененияне будут зафиксированы.