Введение

Новый год — время перемен, новых решений и амбициозных целей. Почему бы не начать год с оптимизации процессов разработки в вашей команде? Если вы когда-либо сталкивались с хаосом в ветках, бесконечными конфликтами при слияниях или путаницей в коде, пришло время внедрить стандарты разработки и навести порядок.

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

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

Готовы навести порядок в своей команде? Тогда поехали!

1. Организация веток и Git Flow

При работе команды на Git-содержащем воркфлоу ключевую роль играет согласованная структура веток и четкие правила их использования. Отсутствие договоренностей на этом этапе часто приводит к хаосу: ветки разрастаются неконтролируемо, появляется дублирующийся код, а merge-конфликты становятся ежедневной рутиной. Чтобы этого избежать, важно договориться о следующем.

1.1. Общая схема веточного Git Flow

Веточная модель Git Flow — это один из самых популярных подходов для командной разработки. Он предполагает использование следующих веток:

  • main (master) — основная ветка, в которой всегда находится стабильная версия кода, готовая к релизу;

  • develop — ветка для интеграции всех фич и изменений. Здесь ведется основная разработка;

  • feature/ — ветки для разработки конкретных задач или новых функций. Они создаются из develop и сливаются обратно после завершения работы;

  • release/ — ветки для подготовки релизов. В них идет финальное тестирование и устранение багов перед слиянием в main;

  • hotfix/ — ветки для оперативного исправления критических ошибок в стабильной версии кода (в ветке main);

  • bugfix/ — ветки для исправления багов, обнаруженных в процессе разработки (создаются из develop).

1.2. Правила именования веток

Договоренности по именованию веток позволяют легко понять, что содержит ветка, а также упростить навигацию по репозиторию. Вот какие компоненты могут быть включены в названии:

  • обозначение системы таск-трекинга: JIRA, TRLO, ASAN и пр.;

  • номер задачи или инцидента;

  • номер версии (для веток релизов);

  • краткое описание функции.

Например:

  • feature/JIRA-123-добавить-фильтрацию

  • hotfix/123-критическая-ошибка

1.3. Порядок работы с ветками

Опишите процесс работы с ветками пошагово:

  1. Создание фича-ветки:

    • Ветка создается из develop.

    • Название ветки должно соответствовать формату.

  2. Работа над задачей:

    • Коммиты должны быть мелкими и логичными.

    • Сообщения коммитов оформляются по стандарту (см. раздел «Формат сообщений коммитов»).

  3. Слияние фича-ветки:

    • Перед созданием Pull Request обновите свою ветку и решите возможные конфликты.

    • После ревью ветка сливается обратно в develop через Pull Request.

  4. Подготовка релиза:

    • Создайте ветку release/1.0 из develop.

    • Исправьте все баги и завершите тестирование.

    • Слейте ветку в main и создайте тег релиза.

    • Добавьте тег с номером версии на коммит слияния в ветке main.

  5. Хотфиксы:

    • Ветка hotfix создается из main для критических исправлений. После исправления сливайте изменения в main и develop.

1.4. Merge или Rebase: что выбрать?

Договоритесь, когда использовать merge, а когда — rebase.

  • Rebase: используется для «подтягивания» изменений из develop в фича-ветку. Делает историю коммитов чище.

  • Merge: используется при слиянии фича-ветки обратно в develop через Pull Request. Сохраняет контекст ветки и историю.

1.5. Политика разрешения конфликтов

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

  • Обновляйте ветки регулярно: не допускайте устаревания feature-веток.

  • Делайте минимальные коммиты: чем меньше изменений в одном коммите, тем легче разрешать конфликты.

  • Ответственность за конфликты: конфликты должен решать разработчик, создавший Pull Request.

2. Стандарты именования и форматирования

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

2.1. Формат именования веток

Придерживаться единого стандарта именования веток необходимо для упрощения навигации и автоматизации процессов в Git. Примите следующий формат:

ТипВетки-НомерЗадачи

ТипВетки — это установленные имена веток согласно п. 1.1.

Для удобства используйте номера задач из вашей системы управления проектами (например, Jira или Redmine) в названии веток. Это позволит быстро найти источник задачи и понять ее контекст.

2.2. Сообщения коммитов: стандарты и примеры

История изменений должна быть чистой и понятной. Сообщения коммитов должны объяснять суть изменений и их назначение. Принятый формат:

[тип изменения]: краткое описание (номер_задачи)

Типы изменений:

  • feat — добавление нового функционала,

  • fix — исправление ошибок,

  • refactor — рефакторинг кода без изменения функциональности,

  • docs — изменение или добавление документации,

  • test — добавление или обновление тестов,

  • chore — технические изменения, не влияющие на бизнес-логику.

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

2.3. Форматирование кода в конфигурациях 1С

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

Стандарты кодирования:

  • Один оператор — одна строка;

Отступы и пробелы:

  • Модуль заканчивается пустой строкой.

2.4. Автоматизация проверки стандартов

Для соблюдения единого стиля можно автоматизировать проверки кода:

  • BSL Linter — анализирует синтаксис и соблюдение код-стайла.

  • 1C:EDT — встроенные проверки и интеграция с Git.

  • Использование шаблонов кода — выработайте собственный набор шаблонов, покрывающий основные вопросы и разночтения в конструкциях кода, которые могут возникнуть у разных разработчиков.

3. Процесс ревью и слияний

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

3.1. Как организовать код-ревью

Роли участников ревью:

  • Автор кода: разработчик, создавший ветку и подготовивший изменения.

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

  • Апрувер: член команды, который принимает финальное решение о слиянии ветки. Может совпадать с ревьюером.

Варианты организации ревью:

  1. Назначенный ревьюер: код проверяет заранее определенный член команды (например, старший разработчик).

  2. Кросс-код-ревью: разработчики проверяют код друг друга по принципу «все равны».

  3. Выборочное ревью: для мелких изменений или багфиксов проверяется только ключевая логика.

Совет: договоритесь, что код-ревью необходимо делать для всех Pull Request (PR), кроме микроизменений (например, документации или комментариев).

3.2. Процесс слияния веток (Merge)

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

  1. Создание Pull Request (PR):

    • Автор кода создает PR из ветки feature/ или bugfix/ в ветку develop.

    • В описании PR обязательно указывает:

      • Номер задачи из системы управления проектами.

      • Список изменений и описание логики.

      • Скриншоты или примеры поведения (если необходимо).

  2. Проверка и ревью кода:

    • Назначенный ревьюер проверяет код по чек-листу и оставляет комментарии.

    • Автор вносит правки и обновляет PR.

  3. Слияние ветки:

    • После успешного ревью и тестирования ветка сливается в develop (или main для хотфиксов).

    • После слияния удаляем фича-ветку, чтобы избежать захламления репозитория 

  4. Решение конфликтов:

    • Конфликты решает автор ветки перед финальным merge.

    • Если конфликт сложный, рекомендуется обсудить его на код-ревью.

3.3. Культура проведения ревью

Код-ревью — это не критика, а командная работа над улучшением качества. Вот несколько важных принципов:

  1. Доброжелательная обратная связь:

    • Вместо «Ты написал плохо» → «Можно ли переписать вот этот блок для улучшения читаемости?».  

  2. Конструктивные комментарии:

    • Пишите четко, что и почему нужно изменить: «Этот цикл можно заменить на НайтиПоРеквизиту для повышения производительности».

  3. Непрерывное обучение:

    • Разбирайте комментарии на ретроспективах и учитесь на них.

4. Интеграция с CI/CD

Внедрение практик Continuous Integration (непрерывной интеграции) и Continuous Delivery (непрерывной доставки) в процессе разработки на «1С:Предприятии» значительно ускоряет командную работу, повышает стабильность релизов и снижает вероятность ошибок.

4.1. Основные задачи CI/CD для 1С

CI/CD в 1С решает несколько ключевых задач:

  1. Автоматическая сборка и обновление конфигураций (расширений).

  2. Автоматическое тестирование изменений.

  3. Обновление баз данных для тестовых и production-сред.

  4. Автоматизация релизов и публикации обновлений.

Цель: сделать процесс разработки более предсказуемым и снизить человеческий фактор при сборке и деплое.

4.2. Инструменты для настройки CI/CD в 1С

Разработка на платформе «1С:Предприятие» имеет свою специфику, но уже существуют инструменты и подходы, позволяющие автоматизировать CI/CD:

  1. GitLab CI/GitHub Actions:

    • Используются для создания пайплайнов сборки, тестирования и доставки.

    • Интегрируются с OneScript для выполнения задач.

  2. OneScript:

    • Скриптовый язык для автоматизации процессов разработки 1С.

    • Используется для выгрузки/загрузки конфигураций, сборки и обновлений БД.

  3. vanessa-runner и vanessa-automation:

    • vanessa-runner: инструмент для автоматизации задач — запуск тестов, выгрузка/загрузка данных.

    • vanessa-automation: позволяет автоматизировать функциональное тестирование.

  4. EDT (1C:Enterprise Development Tools):

    • Внешний редактор с возможностью интеграции с Git и CI/CD инструментами.

4.3. Автоматизация тестирования

Для CI/CD в 1С автоматизируйте тесты на каждом этапе:

  1. Юнит-тесты:

    • Используйте xUnit для проверки отдельных методов и модулей.

  2. Интеграционные тесты:

    • Тестируйте взаимодействие подсистем и проверяйте корректность данных.

  3. Функциональные тесты:

    • Автоматизируйте пользовательские сценарии с помощью vanessa-automation.

4.4. Регулярные проверки и обратная связь

CI/CD позволяет не только автоматизировать задачи, но и оперативно получать обратную связь по качеству кода:

  • Автоматические отчеты: генерируйте отчеты по результатам тестов и анализу кода.

  • Slack/Telegram-уведомления: интегрируйте оповещения о статусе сборки и деплоя.

5. Работа с конфликтами и техническим долгом

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

5.1. Причины возникновения конфликтов

Конфликты чаще всего возникают из-за следующих причин:

  1. Одновременная работа над одним объектом конфигурации разными разработчиками.

  2. Длительные фича-ветки, которые устаревают по мере внесения новых изменений в develop или main.

  3. Непоследовательное обновление веток с последними изменениями.

5.2. Стратегия управления конфликтами

Чтобы минимизировать конфликты и эффективно их разрешать, внедрите следующие правила:

1. Регулярное обновление веток

Разработчики должны регулярно подтягивать изменения из основной ветки (develop).
Чем чаще обновляется фича-ветка, тем проще решать мелкие конфликты.

2. Деление задач на мелкие фичи

Работайте по принципу "одна ветка — одна задача".

Делите крупные задачи на более мелкие подзадачи, чтобы код коммитился и ревьюился чаще.

3. Правила разрешения конфликтов

  • Ответственность за решение конфликтов несет автор ветки.

  • При сложных конфликтах рекомендуется:

    • Созвать небольшую сессию созвона с другими разработчиками для обсуждения.

    • Использовать инструменты сравнения и слияния кода (1C:EDT, VSC с Merge Editor).

    • Внести изменения пошагово, тестируя каждое из них.

5.3. Управление техническим долгом

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

  1. Фиксация технического долга

    1. Создавайте отдельные задачи для технического долга в системе управления проектами (Jira, Redmine и т. д.).

    2. Используйте специальный лейбл (например, tech-debt) для их маркировки.

    3. Ведите список долгов в документации проекта или в виде комментариев TODO.

  2. Рефакторинг как регулярный процесс

    1. Внедрите практику регулярного рефакторинга:

    2. Раз в спринт выделяйте время на устранение технического долга (например, 10-15% от общего времени).

    3. Поддерживайте баланс: не превращайте рефакторинг в бесконечную задачу.

  3. Определение приоритетов

    1. Оценивайте технический долг по шкале «влияние на проект» vs «сложность устранения».

    2. Сосредоточьтесь на долге, который влияет на производительность или мешает разработке новых функций.

5.4. Ретроспектива по конфликтам и техническому долгу

Чтобы улучшать процессы и предотвращать повторяющиеся проблемы:

  1. Обсуждайте крупные конфликты на ретроспективах.

    • Что стало причиной конфликта?

    • Как этого избежать в будущем?

  2. Анализируйте технический долг ежемесячно и фиксируйте план его постепенного устранения.

6. Культура командной работы

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

6.1. Коммуникация в команде

1.1 Регулярные встречи и обсуждения

  • Дейли-митинги: краткие встречи в начале рабочего дня (15 минут). Каждый участник отвечает на 3 вопроса:

    • Что я сделал вчера?

    • Что планирую сделать сегодня?

    • Какие есть блокеры?

  • Ретроспективы: проводятся после завершения спринта/фичи для анализа работы команды:

    • Что получилось хорошо?

    • Что можно улучшить?

    • Какие действия предпримем для улучшения?

  • Демосессии: показывайте результаты работы всей команде и стейкхолдерам. Это укрепляет чувство достижения и помогает получить обратную связь.

1.2 Каналы общения

Определитесь, где и как команда будет взаимодействовать:

  • Текстовые обсуждения: Slack, Telegram, Microsoft Teams.

  • Задачи и тикеты: Jira, Trello, Redmine.

  • Pull Request и комментарии: обсуждение кода прямо в GitHub/GitLab.

Совет: Договоритесь об асинхронной коммуникации, чтобы минимизировать отвлечения и дать разработчикам время на глубокую работу.

6.2. Обратная связь: как давать и принимать

Эффективная обратная связь помогает улучшать качество кода и развивать команду. Вот несколько принципов:

  1. Конструктивность и уважение:

    • Избегайте личной критики. Критикуйте код, а не человека.

    • Вместо «Это написано плохо» → «Можно ли использовать более оптимальный метод здесь?»

  2. Формула обратной связи:

    • Похвала → Предложение улучшений → Позитивное завершение.

  3. Принимайте критику:

    • Уважайте комментарии ревьюеров и используйте их для улучшения своих навыков.

6.3. Поддержка и взаимовыручка

3.1 Парное программирование

  • В сложных задачах используйте парное программирование: один пишет код, другой помогает и проверяет.

  • Особенно полезно для:

    • Быстрого решения сложных конфликтов.

    • Обучения младших разработчиков.

3.2 Делитесь знаниями

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

  • Ведите документацию и внутренние гайды: как настроить окружение, как работать с CI/CD и т. д.

6.4. Ответственность и прозрачность

  • Единые правила: все члены команды должны соблюдать стандарты разработки (именование веток, форматирование, процессы ревью).

  • Ответственность за задачи: у каждой задачи есть владелец, который несет ответственность за ее завершение.

  • Прозрачность процессов: используйте дашборды и канбан-доски для визуализации статуса задач.

6.5. Мотивация и вовлеченность команды

Командная работа на может быть трудоемкой, но важно поддерживать мотивацию и вовлеченность участников:

  1. Признавайте успехи: публично хвалите за выполнение сложных задач или успешные релизы.

  2. Устраивайте тимбилдинги: неформальное общение улучшает отношения в команде.

  3. Развивайтесь вместе: создавайте культуру обучения и профессионального роста — курсы, сертификаты, участие в конференциях.

Заключение

Стандарты — это не «дополнительные сложности», а «дорожная карта» к успеху. Разработчики экономят время на рутинных задачах, тестировщики получают стабильный и чистый код, а заказчики — качественный продукт в срок.

Начните с малого и постепенно улучшайте процессы. Вы удивитесь, как быстро команда выйдет на новый уровень продуктивности.

Комментарии (3)


  1. Atorian
    21.12.2024 08:19

    Сколько лет этому флоу? А сколько лет уже говорят что не надо его использовать? Есть же https://githubflow.github.io/ или еще больше примеров в Trunk Based Development https://trunkbaseddevelopment.com/ . Но только не гит флоу.

    И разберитесь как правильно использовать Git merge vs rebase. Если коротко, то Rebase можно использовать ТОЛЬКО если вы еще не делились своей историей, не делали push. Все остальное время вы делаете merge.

    Чистота коммитов - это не то о чем надо заботится в репе. Репа это про изменения в коде, и нет смысла их прятать. Разве что вашим разработчикам стыдно показывать свою работу другим. Но это к психологу. В остальных же случаях, когда говорят про чистоту коммитов, имеют ввиду порядок коммитов для системы релизов. Чтобы коммиты-релизы шли один за другим по порядку. В этому случае - у вас не доделанный пайплайн. Релизы это не про коммиты. Добавьте гит тэги, если их нет. Или уберите, если вы тэгаете все подряд.

    Извините что так резко, у меня ПТСР после всего этого. но переписывать уже лень.


    1. Notactic
      21.12.2024 08:19

      Кто вам сказал, что githubflow это альтернатива для gitflow? Да и TBD, хоть и классный, но точно не альтернатива gitflow.

      Flow выбирается не от хотелки разработчика, а от процессов в компании. У всего есть плюсы и минусы.

      А в остальном согласен :D


      1. Atorian
        21.12.2024 08:19

        Уточните пожалуйста, кто вам сказал что это не альтернатива?

        Не всегда флоу выбирается под процессы. Всегда имеет место человеческий фактор - кто-то нагуглил и не изучил альтернативы.

        Утверждение что он "самый популярный" - никакими цифрами не подтверждается.

        SWOT анализ нам тут не показали. Только хотелки в ведении. И все эти хотелки гараздо лучше решаются TBD или Github Flow.

        Если для вас процессы это важно и вам нужен CI/CD то может автор Continuous Delivery вам расскажет понятнее https://www.youtube.com/watch?v=_w6TwnLCFwA

        Вот цитата с сайта атласина про гит флоу:

        Gitflow is a legacy Git workflow that was originally a disruptive and novel strategy for managing Git branches. Gitflow has fallen in popularity in favor of trunk-based workflows, which are now considered best practices for modern continuous software development and DevOps practices. Gitflow also can be challenging to use with CI/CD. This post details Gitflow for historical purposes.

        А вот ссылка на страницу автора Гит Флоу - https://nvie.com/posts/a-successful-git-branching-model/

        Просто перестаньте это использовать. Пристрелите уже лошадь.