logo

75. Программные средства для организации совместной разработки программного обеспечения.

Использование свободных пакетов Subversion и Trac при совместной разработке программного обеспечения.

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

Первая и главная из них – синхронизация изменений. Также, при разработке, как правило, сложно наладить контроль над внесением изменений, исправлением ошибок, добавлением новых возможностей, написанием документации. Даже если и ведется какая-либо документация, то, в конце концов, у каждого разработчика будет своя версия. А одну ошибку в программе может попытаться исправить несколько программистов.

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

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

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

Использование пакета Subversion как средства контроля версий программного обеспечения.

Пакет Subversion представляет собой централизованную систему управления версиями. Представляет собой пару программ – сервер и клиент. Сам пакет включает в себя сервер и консольный клиент, но есть и клиенты с удобным графическим интерфейсом, к примеру, TortoiseSVN для Windows (также свободное ПО).

Сервер устанавливается на доступный в сети компьютер, клиенты – на компьютеры разработчиков. На сервере создается репозиторий (хранилище исходных кодов разрабатываемого ПО и их версий), в котором отражаются все изменения, внесенные разработчиками в программу. Для каждого изменения создается своя версия разрабатываемого ПО (в системах управления версиями отдельная версия часто называется «ревизия»).

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

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

Вторым методом является разрешение конфликтов – то есть система контроля версий сама указывает изменения, сделанные в одном и том же файле, причем выделяет изменения противоречащие друг другу и автоматически «сливает» между собой изменения, друг другу не противоречащие. Естественно, это делается только на уровне текстов, то есть логические противоречия система, конечно, не заметит, но все слияние проходит под контролем программиста, достаточно быстро и просто.

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

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

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

Из минусов пакета Subversion можно отметить повышенный расход места на диске клиента, т.к. в каждой папке с обрабатываемыми исходными кодами содержится скрытая папка “.svn”, обычно превышающая по размеру совокупный размер всех файлов в папке.

Использование пакета Trac как средства контроля над потоком разработки

Пакет Trac представляет собой инструмент управления проектами и отслеживания ошибок в программном обеспечении. Кроме этого, пакет позволяет вести документацию в формате Wiki для проектов и отслеживать изменения в документации. Более того, пакет имеет тесную интеграцию с пакетом Subversion – в пакет встроен удобный web-интерфейс для Subversion.

Основа системы Trac – «карточки», на которых отображаются задачи, ошибки, указания по проекту. Каждая карточка может содержать в себе текстовое описание проблемы или задачи, ссылки на документацию или исходный код, вложения, и так далее. Каждая карточка может быть назначена определенному программисту для работы. К примеру, если кто-либо приступает к исправлению ошибки, он помечает на карточке, посвященной данной ошибке, что он приступил к ее исправлению. А когда он завершает работу, то помечает карточку выполненной и прикладывает к ней ссылку на ревизию Subversion, содержащую исправления.

Еще одной интересной возможностью Trac является возможность группировать карточки в промежуточные этапы разработки.

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

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

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

Организация удаленной разработки ПО при помощи Subversion и Trac

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

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

Кроме того, многие проекты с открытым исходным кодом разрабатываются большими группами программистов при помощи Subversion и Trac, в данном случае то, что программисты зачастую находятся на разных материках, не мешает им производить организованную совместную разработку.

В заключение заметим, что применение пакетов Subversion и Trac способны облегчить и разработку, выполняемую одним программистом, позволяя улучшить контроль над версиями и упорядочить разработку программы.