Необходимость управления исходными текстами
Управление исходными текстами является маленькой частью большой и сложной науки управления созданием программного обеспечения. Тем не менее, это одна из важнейших частей с точки зрения автоматизации, поскольку маленький и, в общем, несложный механизм обеспечивает информацией множество других частей общего бизнес-процесса. Управление исходными текстами имеет несколько аспектов: управление версиями, автоматическая генерация документации, поддержка единого стиля кода и контролируемые изменения. Постепенно мы раскроем все эти темы, но начнём, пожалуй, с наиболее востребованной части - управлением версиями. В этих статьях мы не будем подробно рассматривать общий подход к управлению разработкой, заинтересованных отсылаем к другим ресурсам (см. ссылки в конце статьи), однако на некоторых важных аспектах мне бы хотелось остановиться прежде, чем перейти собственно к рассмотрению темы данной статьи.
Существует множество различных точек зрения на то, каким должен быть процесс разработки программного обеспечения. Одни желают формального, тяжелого, гарантированного процесса, другим больше по душе легковесный, мобильный, рискованный процесс. Всё зависит от потребностей заказчика, компании, проекта и команды. Тем не менее, так или иначе, команда программистов создаёт код, который развивается и меняется со временем. В связи с этим можно отметить несколько фактов:
• В коде исправляются старые и появляются новые ошибки, добавляются новые возможности и удаляются устаревшие участки кода, забывается то, что было в коде раньше - код нуждается в истории. Иначе невозможно установить, когда появилась проблема, какое изменение породило ошибку и кто, в конце-то концов, виноват.
• Если проект разрабатывается командой, в которой больше одного участника - код нуждается в синхронизации. Иначе команда окажется перед лицом невоспроизводимых ошибок, постоянных проверок на совместимость и изнурительных периодических авралов для сбора всего написанного кода в одну работающую систему.
• Если результаты работы команды используются вне самой команды - код нуждается в воспроизводимости. Иначе команда не сможет повторить какую-то предыдущую версию, которая имеется у пользователя, решить его проблему и выдать ему исправленную версию независимо от состояния кода в настоящий момент.
Таким образом, необходим инструмент, позволяющий централизованно хранить, получать и обновлять исходные тексты, отслеживать историю, получать версию кода по некоторым критериям и выполнять некоторые автоматические операции с кодом. Одним из таких инструментов является Concurrent Versions System (CVS).
Если вам интересны лишь общие концепции и понимание системы как таковой - достаточно прочитать раздел «Основные понятия» и не тратить время на детали использования. В этом разделе объясняются принципы назначения версий, связь репозитория и рабочих каталогов, общий взгляд на автоматизацию процессов, а также кратко рассказано о связи CVS с другими подсистемами процесса управления исходными текстами.
Если вы собираетесь использовать CVS в своей работе, но пока не знаете, как к этому подступиться - надеюсь, что вторая часть статьи «Базовые операции» поможет вам совершить первые и последующие шаги в этом направлении. Тем не менее, очень рекомендуется прочитать и первую часть, для того, чтобы не запутаться в терминах и воспринять идеологию CVS в целом.