Безопасное программирование

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

И конечно все находят какие-то решения. Как-то архивирование время от времени всего проекта и сохранение всех зипов в сторонке. Некоторые неленивые даже прилагают к архивам какие-то описания. Для определения различий, обычно применяют diff.

Я и сам так страдал, пока пару-тройку лет назад не напал на след системы контроля версий – MS SourceSafe. Это было вовремя, т.к. к тому времени я совсем измучался с архивами и директориями, где лежали всякие прошлые версии, и всерьез подумывал написать что-то свое, чтоб, во-первых, можно было бы навести порядок в этом хаосе, а во-вторых, упростить коллективную работу над общими проектами. Ну, кто пишет программы, поймет, о чем я. Многим знаком ужас потери своих последних изменений из-за того, что кто-то не взял последнюю версию, и многим известен кропотливый труд, по сливанию работы двух программистов, в общие файлы.

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

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

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

После внесения изменений и соответствующих проверок, программист желает сохранить текущую версию. Он делает нужным файлам check-in, и тем самым обновляет мастер копию на сервере. При этом его локальная копия, переходит в режим только для чтения, и изменять ее невозможно. Т.е. для редактирование всегда требуется, чтобы файл был в режиме checked-out. Если при выполнении check-in возникает конфликт версий, а это может быть, если разные программисты работают над ним одновременно, система сообщит о конфликте и предложит либо автоматическое слияние (разрешение конфликта) либо ручной режим. В этом режиме виды все конфликты. В сущности, это продвинутая версия diff, с приятным интерфейсом.

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

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

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

Share очень удобное средсвто для создание библиотек часто используемых файлов открытых для доступа группе программистов. Кстати о доступе. SourceSafe обеспечивает контроль доступа как на уровне проектов, так и на уровне пользователей.

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

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

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

При использовании пакета VisualStudio, SourceSafe органически встраивается в рабочую среду. При использовании других систем, необходимо использовать SourceSafe Explorer.

Из известных мне недостатков SourceSafe, главные это замедление работы при очень больших общих объемах текстов программ (с 5-10 гигабайт уже ощущается), и отсутствие поддержки для работы в удаленном режиме. Т.е. сервер SourceSafe нормально работает только в локальной сети, а если есть необходимость подключаться к нему по TCP/IP с удаленного компьютера, стоит воспользоваться надстройкой SourceOffSite фирмы SorceGear.

из описания программы:

SourceOffSite™ Professional Edition is specifically designed for companies with remote development teams and tele-commuters that need fast and secure read/write access to a centralized SourceSafe database via any TCP/IP connection. Microsoft endorses (product, case study) the use of SourceOffSite as a remote access solution for Visual SourceSafe."

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