Курс «Организационные аспекты совместной разработки»
Аннотация
Курс «Организационные аспекты совместной разработки» ставит своей целью рассмотрение проблем организационного характера и технологических способов их решения в контексте совместной работы над программным проектом. В рамках курса планируется затронуть следующие аспекты совместной разработки: совместная работа над кодом; отслеживание ошибок и недостающих возможностей; организация информационного пространства; отслеживание качества кода; вопросы сборки, тестирования и развёртывания. Курс ориентирован на администраторов, перед которыми встала задача организации подобного процесса совместной разработки, но также может оказаться полезен и людям, планирующим участвовать в рассматриваемых видах проектов.
План курса
- Введение.
- Зачем этот курс
Курс предназначен для администраторов, перед которыми встала задача организации процесса совместной разработки. В идеале, рассматриваемая в курсе совокупность инструментов должна позволять решать поставленную задачу данного рода — «сделать так, чтобы программисты программировали с минимумом затрат на непроизводительную деятельность».
- Структура курса, почему так
Вообще, рассматриваемые аспекты завязаны друг с другом в практически полносвязный направленный граф. Тем не менее, авторы попытались выделить некоторую последовательность изложения, при которой будет сделано минимум ссылок вперёд.
В курсе не рассматриваются вопросы организации рабочего места программистов, это довольно отдельная тема, которая больше завязана на различные внешние факторы и привычки собственно программистов.
- Зачем этот курс
- VCS
- Зачем VCS
- Use cases и вытекающие из этого свойства
- DVCS
- Workflow при использовании DVCS
- Git как пример (D)VCS
- Управление репозиториями
Практика: развёртывание gitolite
- Сервисы, лежащие в основе взаимодействия: HTTP, SMTP, SSH
В принципе, при наличии достаточно удобной VCS (например, git или hg), на ней при должном желании можно и остановиться — всё необходимое для совместной работы с кодом там есть. Но в реальной жизни это верно далеко не всегда: людям так или иначе необходимо общаться, есть вещи, которые по какие-то причине не лежат в репозитории, а знать про них надо, коммиты сами тоже далеко не всегда идеальны и некоторые из них нужно обсуждать, код, кроме того, чтобы быть, ещё должен как-то собираться, тестироваться и запаковываться, иногда для работы с кодом требуются различные (экзотические) окружения. Всё это, опять же, при должном желании можно делать через VCS же с соответствующим количеством костылей^Wхуков, ко иногда эти задачи удобнее решать при помощи других инструментов. Им и посвящена оставшаяся часть курса.
- Роль web-сервисов в процессе взаимодействия
- Связка httpd2+mod_wsgi+python как пример платформы для развёртывания веб-сервисов
- Аутентификация: HTTPS, клиентские сертификаты
- VCS, поддерживающие работу череp HTTP (svn, что ещё?)
- Почта как основа системы оповещения и информационного обмена в рамках совместной разработки
- Культура использования почтовых рассылок для информационного взаимодействия
- Использование почты в рамках VCS (git-send-email/git-am)
- Альтернативные способы оповещения — XMPP, VoIP-конференции, связь с почтой (?)
- mailman как пример системы для организации списка рассылок
- Удалённый доступ как инструмент совместной разработки — предоставление окружения
Практика: развёртывание и настройка httpd2 (mod_wsgi, аутентификация)
Практика: развёртывание и настройка mailman
- Аутентификация
- Зачем аутентификация
- Где нужна аутентификация
Способы аутентификации (HTTP-only — htdigest/htpasswd, directory services, что ещё?)
- LDAP как окончательное решение вопроса аутентификации
Практика: ?
- Если рассмтаривать HTTP-only сервисы, можно показать на примере htpasswd/htdigest
- Если не только их (git?) — таки да, нужен LDAP
- Организация работы с фичами и багами, ticket system, request tracking
- Баги и фичи как важный аспект процесса разработки
- Организация работы с багами и фичами как основополагающий аспект совместной разработки
- Понятие тикета
- Понятие milestone и версии
- Пример организация bug tracking с использованием только средств VCS
- Trac как пример lightweight ticket system
- Зависимости тикетов
- Планирование выполнения
- Оповещение
- Связь с VCS (связанные коммиты, закрытие тикетов коммитами)
Практика: развёртывание Trac
- Redmine как пример полновесной ticket system
- Организация информационного пространства, Wiki
- Информационное пространство как место сохранения тайного знания
- Использование VCS как хранилища знания
- Wiki как способ организации информационноо пространства
- Связь с ticket system — кросслинкинг, in-place queries
- Moin как пример wiki
- (?) Moin2 как пример wiki, интегрирующейся с VCS
- Что бывает ещё (исключительно обозначить, закинуть идеи в головы): всякие IM с поддержкой multi-user chat, аудио, видео.
Практика: развёртывание moin/moin2
- Качество кода: style guides, review, documentation
- Качественный код как важный аспект совместной эффективной разработки
- Единство и хорошесть стиля
- Документированность
- Надсинтаксические аспекты
- Style guidelines как способ решения проблемы стиля кода
- style checkers/formatters как способ форсирования style guidelines (indent, что ещё)
- Использование совместно с VCS
- Doxygen как пример средства самодокументирования. Специализированные средства: sphynx (python)
- Review кода как способ решения проблемы надсинтаксических аспектов качества кода
- Review кода и DVCS workflow
- git format-patch
- Review кода и DVCS workflow
- Reviewboard как пример
Практика: настройка pre-commit хуков, проверяющих style guidelines
Практика: настройка post-commit хуков, применяющих style guidelines
Практика: настройка post-commit хуков, перегенерирующих документацию к коду
Практика: установка и настройка review board
- Качественный код как важный аспект совместной эффективной разработки
- Оформление результата: сборка, тестирование, packaging, deployment
- Автоматизированная сборка как важный аспект совместной разработки
- Воспроизводимость
- Различные окружения и приспособление к ним
- Упоминание make, autotools, cmake, scons как инструментов автоматизированной сборки
- Тестирование — выявление регрессий, контроль качества, часть ревью, источник тикетов
- Интеграция с DVCS workflow
- Интеграция с ревью
- Организация выдачи окружений на примере openvz
- Packaging, tar.gz-rpm-deb как примеры
- Deploy, пример схем деплоя (см. rider vs gosuslgi)
Практика: развёртывание buildbot (?)
Практика: развёртывание сборочницы и репозитария, интеграция с buildbot, интеграция с DVCS.
Практика: развёртывание и настройка выдачи доступа к openvz-окружениям
- Автоматизированная сборка как важный аспект совместной разработки