Модель ветвления Trunk Based Development (TBD)
Trunk Based Development, TBD, транковая или магистральная разработка — это модель ветвления системы управления версиями, при которой все разработчики работают в одной ветке. В TBD основная ветка называется «trunk», и все разработчики вносят свои изменения непосредственно в неё. Дополнительные ветки в TBD тоже создаются, но они существуют очень недолго, относительно других моделей ветвления (GitFlow, например), максимум 2 дня. То есть работа над большими задачами декомпозируется и выполняется очень короткими итерациями.
Этот подход отличается от традиционных моделей ветвления, где каждый разработчик долго работает над своей собственной веткой и объединяет изменения в основную ветку только после полного завершения своей работы. В TBD в основную ветку добавляются в том числе и не до конца реализованные «фичи», но при этом их наличие не мешает развёртыванию — код покрывается тестами, ревьюится, используются CI/CD, а недописанные фичи «закрыты» флагами функций (Feature Flags).
Это означает, что каждый разработчик работает над одной и той же кодовой базой, и любые изменения, внесенные одним разработчиком, станут очень быстро видны всем остальным разработчикам, работающим над тем же проектом. Этот подход делает упор на сотрудничество и непрерывную интеграцию, поскольку разработчики могут оперативно работать над разрешением любых возникающих конфликтов или проблем.
Преимущества TBD
Одним из основных преимуществ разработки на основе транков является ее скорость и простота. Поскольку все разработчики работают в одной ветке, нет необходимости управлять несколькими ветками с большими объёмами изменений и иметь дело со сложными конфликтами слияния.
Trunk Based Development также способствует сотрудничеству и общению между разработчиками. Разработчики могут легко видеть изменения друг друга, оставлять отзывы или вносить предложения. Такой подход может привести к ускорению разработки и повышению качества кода, поскольку улучшается общее владение кодом, а проблемы можно быстро выявлять и решать.
Еще одним преимуществом транковой разработки является ее способность поддерживать непрерывную интеграцию и непрерывное развертывание. Поскольку все изменения вносятся непосредственно в транк‑ветку, процесс сборки и развертывания легко автоматизировать. Это может помочь командам быстрее предоставлять новые функции и обновления, а также снижает риск возникновения ошибок и неполадок.
Недостатки TBD
Разработка на основе транков имеет множество преимуществ, но она не лишена недостатков.
Одна из потенциальных проблем заключается в том, что, когда все разработчики работают в одной и той же ветке, существует риск конфликтов или проблем, возникающих из‑за того, что несколько человек одновременно вносят изменения в один и тот же участок кода. Этот риск можно снизить, внедрив качественные методы общения и совместной работы. И, разумеется, что использование инструментов системы контроля версий позволяет разрешать такие конфликты. При этом стоит отметить, что в других моделях ветвления эта проблема тоже есть и объём усилий для разрешения конфликтов там обычно заметно больше, так как слияние изменений происходит реже и их накапливается сильно больше.
Еще одним потенциальным недостатком транковой разработки является то, что откатить изменения может быть сложнее, если что‑то пойдет не так. Поскольку все изменения вносятся непосредственно в транк, может быть сложно выделить конкретное изменение и отменить его при необходимости. Этот риск можно снизить путем внедрения хороших методов тестирования и развертывания, а также ведения подробной истории всех изменений, внесенных в базу кода. Ещё одним полезным способом является использование флагов функций (Feature Flags), благодаря которым можно включать или отключать определенные функции приложения в рантайме без необходимости переразвертывания.
Декомпозиция больших задач на небольшие итерации тоже не самая простая задача в рамках TBD. Она требует более детальной проработки используемых в проекте абстракций, хорошего понимания ООП и активного использования интерфейсного подхода в проектировании взаимодействия между компонентами системы.
Как внедрить TBD?
Первым шагом для реализации магистральной разработки является создание четкого процесса управления изменениями в кодовой базе. Это включает в себя использование систем контроля версий, таких как Git или SVN, а также внедрение хороших практик тестирования и развертывания, чтобы гарантировать, что изменения проходят надлежащую проверку перед их объединением в транк.
Также важно установить правила общения и сотрудничества между разработчиками. Это может включать организацию регулярных собраний команды, использование инструментов для совместной работы и обеспечение доступа всех разработчиков к одним и тем же инструментам и ресурсам.
Наконец, важно обеспечить, чтобы все разработчики прошли надлежащую подготовку в области разработки на основе транков и поняли преимущества и недостатки этого подхода. Это может включать в себя проведение учебных занятий, предложение наставничества и поддержки, а также поощрение постоянного обучения и развития.
Trunk Based Development — это мощная модель ветвления, которая может помочь командам более эффективно сотрудничать и быстрее создавать высококачественный код. Несмотря на то, что здесь есть свои проблемы, при наличии правильных инструментов и процессов trunk‑разработка может стать ценным инструментом для любой команды разработчиков.
Вот несколько примеров компаний, которые успешно используют транковую разработку:
1. Google: Google использует Trunk Based Development для многих своих внутренних проектов, включая поисковую систему и операционную систему Android. Такой подход помог Google быстрее предоставлять новые функции и обновления, а также улучшить качество кода и снизить риск ошибок.
2. Amazon. Amazon — еще одна компания, которая успешно внедрила разработку на основе транков. Компания использует этот подход для многих своих внутренних проектов, включая платформу электронной коммерции и услуги облачных вычислений.
3. Netflix. Netflix известен своим инновационным использованием технологий, и Trunk Based Development не является исключением. Компания использует этот подход для многих своих внутренних проектов, включая свою потоковую платформу и систему рекомендаций контента.
Это всего лишь несколько примеров компаний, которые успешно внедрили транковую разработку. Многие другие компании, как большие, так и малые, приняли этот подход и увидели значительные преимущества с точки зрения совместной работы, качества кода и скорости доставки изменений.
Тематические статьи
Флаги функций (Feature Flags)
Флаги функций позволяют отделить развертывание функций от развертывания кода, обеспечивают возможности для A/B-тестирования и предоставляют механизм быстрого отключения проблемных функций
TDD — разработка через тестирование
TDD, test-driven development или разработка через тестирование — это методология разработки ПО, повышающая надёжность и сопровождаемость проектов.
TDD основывается на повторении коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется программный код, который реализует желаемое поведение системы и позволяет пройти написанный тест, а после этого проводится рефакторинг написанного кода с постоянной проверкой прохождения тестов.
GIT — система управления версиями
GIT — распределённая система управления версиями, созданная Линусом Торвальдсом для управления разработкой ядра Linux и в настоящее время получившая очень широкое распространение в среде разработчиков программного обеспечения.
Модель ветвления GitFlow
GitFlow — модель ветвления системы управления версиями, разработанная для структурированного управления изменениями в коде и повышения качества совместной работы разработчиков.
Цифровая трансформация бизнеса
Цифровая трансформация — это процесс интеграции цифровых технологий во все области бизнеса, фундаментально меняющий способы их работы и приносящие пользу клиентам.
Применение искусственного интеллекта и машинного обучения в бизнесе
Искусственный интеллект (Artificial Intelligence, AI) и машинное обучение (Machine Learning, ML) за последние годы привнесли много нового в бизнес, в электронную коммерцию и в веб‑разработку. Бизнес использует эти технологии для улучшения качества обслуживания клиентов, оптимизации бизнес‑процессов и получения конкурентного преимущества на рынке.