Стратегия ветвления Git интегрирована с процессом тестирования / контроля качества

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

Недавно мы наняли пару тестировщиков, чтобы улучшить качество нашего программного обеспечения. Идея состоит в том, что каждая функция должна быть протестирована / QA тестером.

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

В какой ветви тестировщик должен тестировать новые функции?

Очевидно, есть два варианта:

  • в отдельной функциональной ветке
  • в ветке develop

Тестирование в ветке разработки

Изначально мы считали, что это верный путь, потому что:

  • Эта функция тестируется со всеми другими функциями, объединенными в ветку develop с момента ее разработки.
  • Любые конфликты можно обнаружить раньше, чем позже
  • Это упрощает работу тестировщика, он постоянно имеет дело только с одной веткой (develop). Ему не нужно спрашивать разработчика о том, какая ветвь предназначена для какой функции (функциональные ветки - это личные ветки, управляемые исключительно и свободно соответствующими разработчиками).

Самые большие проблемы с этим:

  • Ветка develop забита ошибками.

    Когда тестировщик обнаруживает ошибки или конфликты, он сообщает о них разработчику, который исправляет проблему в ветке разработки (ветка функций была заброшена после слияния), и впоследствии могут потребоваться дополнительные исправления. Множественные коммиты или слияния подпоследовательностей (если ветка заново создается из ветки develop для исправления ошибок) делают откат функции из ветки develop очень трудным, если это возможно. Есть несколько функций, которые объединяются и фиксируются в ветке develop в разное время. Это создает большую проблему, когда мы хотим создать выпуск только с некоторыми функциями из ветки develop.

Тестирование в функциональной ветке

Мы подумали еще раз и решили, что нужно тестировать функции в ветках функций. Перед тестированием мы объединяем изменения из ветки develop в ветку функций (догоняем ветку develop). Это хорошо:

  • Вы по-прежнему тестируете эту функцию с другими основными функциями.
  • Дальнейшее развитие (например, исправление ошибки, разрешение конфликта) не приведет к загрязнению ветки develop;
  • Вы можете легко решить не выпускать эту функцию до тех пор, пока она не будет полностью протестирована и одобрена;

Однако есть и недостатки.

  • Тестировщик должен выполнить слияние кода, и в случае возникновения конфликта (что весьма вероятно) он должен обратиться за помощью к разработчику. Наши тестировщики специализируются на тестировании и не умеют кодировать.
  • функция может быть протестирована без наличия другой новой функции. например Функции A и B тестируются одновременно, эти две функции не знают друг друга, потому что ни одна из них не была объединена с ветвью develop. Это означает, что вам придется снова протестировать ветку develop, когда обе функции все равно будут объединены с веткой разработки. И вы должны не забыть проверить это в будущем.
  • Если функция A и B протестированы и одобрены, но при объединении выявлен конфликт, оба разработчика обеих функций считают, что это не его собственная ошибка / работа, потому что его ветвь функции прошла тестирование. В общении есть лишние накладные расходы, и иногда тот, кто разрешает конфликт, разочаровывается.

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


person David Lin    schedule 22.08.2013    source источник
comment
Кажется, что этот вопрос больше подходит для программистов, поскольку он касается не проблемы программирования, а скорее процесса разработки. Может кто-нибудь перенести?   -  person    schedule 22.08.2013
comment
приподнятый вопрос: Как Git Flow должен работать с тестированием QA как релиза, так и новой функции?   -  person Joshua Goldberg    schedule 10.04.2015
comment
Наша модель точно такая же. Мне интересно услышать о том, как ваша команда QA сообщает о проблемах в ветках функций иначе, чем о проблемах на местах или о проблемах во время процесса UAT (если он у вас есть). Мы используем Atlassian JIRA, и у нас для них другой рабочий процесс.   -  person void.pointer    schedule 18.09.2015
comment
Решаю то же самое прямо сейчас. Кроме того, поскольку наша среда представляет собой приложение java spring, сборка и развертывание в тестовой среде занимает около 20 минут. Счастлив, что кто-то задал те же сомнения, что и я.   -  person digao_mb    schedule 25.02.2016
comment
Первый недостаток не присущ процессу тестирования на функциональных ветках. Такие инструменты, как Github Enterprise и Bitbucket, могут требовать утверждения для запросов на вытягивание, а лицо, ответственное за QA, может утверждать, сигнализируя разработчику о том, что они могут слиться с разработкой.   -  person Derek Greer    schedule 15.12.2016
comment
К недостаткам я бы добавил пару вещей: 1) Существуют проблемы, связанные либо с требованием от тестировщиков развертывать функции в их локальном компьютере, либо с использованием CI для развертывания функций в общей среде QA. 2) Функции часто бывают прогрессивными (например, история 1 добавляет функцию X с поддерживающей инфраструктурой, история 2 строится на инфраструктуре истории 1, чтобы добавить функцию Y). Разрешение объединять только завершенные функции для разработки означает, что вы либо не можете раздавить коммиты функций (больше нежелательных коммитов, чем вызывает исправления ошибок функций), либо вы не можете начать историю 2, пока история 1 не будет завершена.   -  person Derek Greer    schedule 15.12.2016
comment
Забавно, что некоторые вопросы закрываются из-за того, что кажутся общими, даже если они касаются программирования и языков программирования, и тем не менее здесь приемлемо что-то подобное.   -  person Ash    schedule 28.05.2017


Ответы (6)


Мы делаем это следующим образом:

Мы тестируем ветки функций после того, как объединим с ними последний код ветки разработки. Основная причина в том, что мы не хотим «загрязнять» код ветки разработки до того, как функция будет принята. Если функция не будет принята после тестирования, но мы хотели бы выпустить другие функции, уже объединенные при разработке, это было бы адом. Разработка - это ветка, из которой создается релиз, и поэтому лучше быть в готовом к выпуску состоянии. Длинная версия состоит в том, что мы тестируем в несколько этапов. Более аналитически:

  1. Разработчик создает ветку для каждой новой функции.
  2. Ветка функций (автоматически) развертывается в нашей тестовой среде с каждой фиксацией для тестирования разработчиком.
  3. Когда разработчик завершил развертывание и функция готова к тестированию, он объединяет ветвь разработки с ветвью функции и развертывает ветвь функции, которая содержит все последние изменения разработки в тесте.
  4. Тестер тестирует на ТЕСТ. Когда он закончил, он «принимает» историю и объединяет функциональную ветку при разработке. Поскольку разработчик ранее объединил ветвь разработки для функции, мы обычно не ожидаем слишком большого количества конфликтов. Однако в этом случае разработчик может помочь. Это сложный шаг, я думаю, что лучший способ избежать этого - сделать функции как можно более мелкими / конкретными. В конечном итоге, так или иначе, необходимо объединить разные функции. Конечно, размер команды влияет на сложность этого шага.
  5. Ветка разработки также (автоматически) развертывается на TEST. У нас есть политика, согласно которой, несмотря на то, что сборки ветки функций могут давать сбой, ветка разработки никогда не должна выходить из строя.
  6. Как только мы достигли замораживания функций, мы создаем выпуск из develop. Это автоматически развертывается на ЭТАПЕ. Перед развертыванием в производственной среде там проводятся обширные сквозные тесты. (ладно, может быть, я немного преувеличиваю, они не очень обширны, но я думаю, что они должны быть). В идеале там должны тестировать бета-тестеры / коллеги, то есть реальные пользователи.

Что вы думаете об этом подходе?

person Aspasia    schedule 19.09.2013
comment
Как мы можем убедиться, что функции feature1 и feature2, которые были протестированы независимо, также хорошо сочетаются друг с другом (как указано в вопросе)? - person Kumar Deepak; 15.07.2014
comment
мы делаем косвенно, путем слияния одного, а затем другого для развития. Это шаг 4 описанного выше процесса, и он имеет отношение к хронологическому порядку. Таким образом, если функция 2 готова к объединению, но функция 1 уже была объединена, разработчик и тестировщик функции 2 должны убедиться, что их объединение будет работать. - person Aspasia; 15.07.2014
comment
Я думаю, что в любом случае в соответствии с этой моделью ветвления git вы не должны чтобы объединить две ветки функций друг с другом. - person Aspasia; 15.07.2014
comment
На шаге 6 мы столкнулись с проблемами, особенно в периоды кризиса, когда несколько функций были перемещены для разработки, из-за нетривиальных слияний, которые происходят после того, как QA подписался на ветку функций, несмотря на слияние devlop с функцией как можно позже. Я прокомментировал немного подробнее здесь: stackoverflow.com/a/25247382/411282 - person Joshua Goldberg; 10.04.2015
comment
@JoshuaGoldberg Я знаю, что вы имеете в виду, и согласен, что это самая сложная часть. Один из способов уменьшить сложность, который я могу придумать, - это создавать регулярные небольшие выпуски с очень небольшим количеством / даже всего одной функцией. Или функции, которые не затрагивают одни и те же части кода. И в любом случае релиз должен быть тщательно протестирован в целом, прежде чем он попадет в производство, imho. - person Aspasia; 01.06.2015
comment
Есть ли у вас полная тестовая среда (БД, сервер, клиент и т. Д.) Для каждой функциональной ветки? Или они разделяют среду и просто имеют разные имена (например, app-name_feature1- app-name_feature2 и т. Д.) - person hinneLinks; 10.08.2015
comment
@hinneLinks Одной среды должно хватить и одновременно тестировать одну функциональную ветку. - person Aspasia; 13.10.2015
comment
Значит, эта модель по-прежнему не позволяет проводить параллельное тестирование функций без необходимости повторного тестирования после каждого слияния для разработки? - person Oletha; 09.09.2016
comment
Поскольку мы продвигаем сборки (мы используем одну и ту же сборку в каждом env для тестирования перед производством), этот метод не подходит для нас. - person nycynik; 13.12.2016
comment
Как вы обновляете тесты E2E? Вы просто создаете их, когда функция попадает в тестовую среду? Или разработчик сливает тесты E2E? Предполагается, что автоматизированные модульные тесты уже определены и объединены. Требуются ли автоматические тесты E2E для вашей подписи? - person aug; 20.06.2017
comment
@Oletha не уверен, как вы узнали, что все работает, прежде чем перебазировать при разработке. Но если вы знаете, как мне любопытно! - person Aspasia; 21.07.2017
comment
@aug Я бы относился к ним так же, как и ко всем другим тестам, но это зависит от ваших конкретных настроек: кто пишет эти тесты? Они на одном репо? Являются ли они частью непрерывной интеграции? - person Aspasia; 21.07.2017
comment
@Aspasia, если вы объедините / перебазируете разработку в свою функциональную ветку, она будет в том же состоянии, в котором будет разработка после того, как эта функциональная ветка будет объединена с ней. :) конечно, это не идеально, так как разработка может измениться еще до того, как вы будете готовы к слиянию ... - person Oletha; 21.07.2017
comment
@Oletha, это то, что я предлагал выше, я предпочитаю перебазировать. Но да, если тем временем разовьются изменения, это может стать проблемой. Для небольшой команды это работает - person Aspasia; 21.07.2017
comment
@Aspasia, да, раздражает то, что тесты находятся в другом репо, и у нас есть кто-то, кто занимается написанием тестов. Естественно, у нас должно быть хорошее общение с ними, но иногда, в зависимости от того, насколько сложна функция для автоматического тестирования, мы сначала проводим ручное тестирование, а затем возвращаемся, чтобы автоматизировать тестовые случаи. Мне просто было любопытно, есть ли у вас другой процесс. - person aug; 21.07.2017
comment
@GlenThomas, это довольно старый пост. Обзор PR / кода будет происходить на шаге 4, чтобы объединить функциональную ветку для разработки. - person Aspasia; 18.11.2017
comment
@Aspasia, значит, тестировщик создает пиар для кода, который они не писали? - person Glen Thomas; 20.11.2017
comment
@GlenThomas, извините, я имел в виду 3. Итак, разработчик переустанавливается на ветку функций, а затем развертывает ее на TEST. Будет ли тестировщик также проверять код или нет, зависит от того, являются ли тестировщики также разработчиками или нет. В любом случае, когда будут проведены тесты и обзор, а в будущей ветке будут сделаны исправления, PR можно объединить для разработки. - person Aspasia; 21.11.2017
comment
Что произойдет, если после слияния функциональной ветки с ветвями разработки возникнет ошибка? Следует ли исправить ошибку в новой ветке функций или в ветке разработки? - person thoslin; 24.01.2018
comment
@thoslin, я считаю, что если ветка уже была объединена в master, ее следует рассматривать как исправление на master. В противном случае, вероятно, это связано с одним из фьючерсов, и его лучше исправить там. Загляните сюда nvie.com/posts/a-successful-git- модель ветвления - person Aspasia; 24.01.2018
comment
@Aspasia, чего я не понимаю, когда мы публикуем ТЕСТ из функциональных веток. Разве нам не понадобится несколько тестовых сред, фактически столько, сколько функций, которые в настоящее время находятся в разработке? - person shbht_twr; 03.08.2018
comment
@shbht_twr Я думаю, это очень зависит от команды. Например, если у вас есть одна тестовая среда на команду из 5-6 человек, легко скоординировать и протестировать одну функцию за раз. Поскольку функции независимы, как только это сделано, развертывается следующий. Если команда выпускает и тестирует очень часто, то потребуется больше тестовых сред или, возможно, виртуальных / облачных специальных сред. - person Aspasia; 23.08.2018
comment
Привет @Aspasia Спасибо, что поделились этой информацией. Я хотел бы спросить, как развернуть функциональную ветку для тестирования? Я использую GCP и пытаюсь разобраться в этом. Спасибо - person Bill; 22.05.2021

Перед тестированием мы объединяем изменения из ветки разработки в ветку функций.

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

Заставьте разработчика выполнить перебазирование его / ее feature ветки поверх devel и подтолкнуть эту feature ветку (которая была подтверждена разработчиком как компилирующая и работающая поверх последнего состояния ветки devel).
Это позволяет:

Каждый раз, когда тестировщик обнаруживает ошибку, он / она сообщает об этом разработчику и удаляет текущую ветку функции.
Разработчик может:

  • исправить ошибку
  • переустановить поверх недавно полученной ветки разработки (опять же, чтобы убедиться, что его / ее код работает в интеграции с другими проверенными функциями)
  • нажмите ветку feature.

Общая идея: убедитесь, что часть слияния / интеграции выполняется разработчиком, оставив тестирование QA.

person VonC    schedule 18.09.2013
comment
Вы говорите, что не используйте слияние, а вместо этого используйте rebase? Если это так, я запутался, учитывая часто задаваемые вопросы Git о разнице между ними: git.wiki.kernel.org/index.php/ - person Vicki Laidler; 21.09.2013
comment
@VickiLaidler: да, если функциональная ветка отклонена QA, разработчик должен перебазировать, а не объединить (stackoverflow.com/a/804178/ 6309) - person VonC; 21.09.2013
comment
@VonC: Вау, я очень удивлен, что никто больше не грокнет это. Вы порекомендуете однозначно правильный способ сделать это. Я бы даже зашел так далеко, что утверждал, что вам не нужно перебазировать каждый раз, пока функциональная ветка была запущена в стабильной точке и не слишком сильно отстала. Но если мы собираемся настоять на том, чтобы синхронизировать функциональную ветку с разработкой, тогда абсолютно перебазируйте, а не объединяйте. Комментарий Джунио Хамано к этой статье довольно хорошо объясняет это: kentnguyen. com / development / visualized-git-practice-for-team / - person Dan Moulding; 13.03.2015
comment
@DanMoulding Я согласен. Я использую такой рабочий процесс (локальная перестановка, затем push), поскольку он обеспечивается большинством других современных инструментов: я использую RTC прямо сейчас (Rational Ream Concert: jazz.net/products/rational-team-concert) с таким же рабочим процессом. Я описал Git в stackoverflow.com/a/457988/6309 и stackoverflow.com/a/804178/6309 несколько лет назад. - person VonC; 13.03.2015
comment
@VonC Я полностью согласен, но есть некоторые проблемы: 1) Удаление ветки влияет на другие инструменты, такие как Stash Pull Requests (удаление ветки закрывает PR). Предпочитаю силовое толкание. 2) Если это большая функциональная ветка, в которой на протяжении всего ее существования работали два человека, слияние было бы предпочтительнее, чем ребазирование. Повторное размещение его в конце создает кошмар конфликта, поскольку коммиты слияния будут удалены, и если код зависел от этих изменений слияния, исправить нетривиально - person void.pointer; 18.09.2015
comment
@ void.pointer Я согласен, что этот рабочий процесс не подходит для всех ситуаций. И я уже упоминал принудительное нажатие ранее (stackoverflow.com/a/26753583/6309). - person VonC; 19.09.2015
comment
Оглядываясь назад на свой ответ, я бы также сделал перебазирование, а не слияние для более чистой истории. - person Aspasia; 13.10.2015
comment
Нет. Не надо, особенно если «мы» - тестировщик качества. Причина не указана, поэтому этот обзор бесполезен - person Steve Harrison; 02.05.2017
comment
@SteveHarrison Правильно: я добавил причину (которая повторяется в последнем предложении этого ответа) - person VonC; 02.05.2017
comment
Общая идея: убедитесь, что часть слияния / интеграции выполняется разработчиком, оставив тестирование QA. не является причиной перед тестированием, мы (тестировщик QA) объединяем изменения из ветки разработки в ветку функций. - person Steve Harrison; 02.05.2017
comment
Ребазинг следует использовать только для частных историй разработчиков (то есть историй, которые еще не были переданы другим разработчикам или над которыми работали другие разработчики). Это не всегда может быть разумным для всех сред. - person bompf; 31.05.2017
comment
@VonC Для вашего первого момента ветка функций уже переустановлена ​​поверх разработки, конфликтов слияния не ожидается. Кто все это делает, конечно, зависит от настройки команды. Наши QA тоже были разработчиками. - person Aspasia; 21.07.2017
comment
@Aspasia Если функциональная ветка уже перебазирована поверх разработки, вы не объединяете разработку с функцией. - person VonC; 21.07.2017
comment
@VonC, извините, я имел в виду наоборот, очевидно, я думаю, вы понимаете, что я имею в виду, это ответственность разработчиков за перебазирование разработки поверх ветки функций перед созданием PR - person Aspasia; 24.07.2017
comment
@Aspasia Странно: разработка перебазирования изменила бы его историю, что непрактично ... - person VonC; 24.07.2017
comment
@VonC о путанице. Обычно я работаю так: переустановите ветку функции, например: git rebase -i develop, решите, какие сообщения-коммиты я сохраню, а затем создайте запрос на перенос. Если все пойдет хорошо, мы объединим пр. - person Aspasia; 25.07.2017
comment
@Aspasia Хорошо, на этот раз я понял;) a git rebase -i develop не перебазирует develop, он перебазирует (текущая ветка) поверх develop. Если текущая ветка feature, это имеет смысл! - person VonC; 26.07.2017
comment
@VonC Я знаю, вот что происходит, когда вы быстро печатаете между другими вещами. Итак, чтобы ответить на ваш вопрос. Если ветка feature уже перебазирована поверх разработки, вы не объединяете разработку с функцией: нет, но вы действительно объединяете pr. - person Aspasia; 26.07.2017
comment
@Aspasia: PR делается между функцией и разработкой? Например: «Я буду применять этот PR от функции к разработке?» - person VonC; 26.07.2017
comment
@VonC да между функцией и разработкой. То, что в гитхабе называется запросом на слияние. Почему вы задаете этот вопрос? - person Aspasia; 26.07.2017
comment
@Aspasia, просто чтобы убедиться, что мне нужно изменить в своем ответе: это все еще слияние от функции к мастеру, но не перемотка вперед, как я описываю: скорее, запрос на перенос, который должен быть принят / объединен. - person VonC; 26.07.2017
comment
@VonC, да, я говорю о слиянии PR. Однако, если вы перебазировали перед объединением PR, то же самое происходит в фоновом режиме, ускоренная перемотка вперед, как описано здесь help.github.com/articles/about-pull-request-merges/. Лично я предпочитаю пиар по нескольким причинам. Одна из них - они могут быть красиво связаны с проблемами github и автоматически закрывать их при слиянии. Другие причины заключаются в том, что описания могут быть полезны рецензенту для понимания того, что было сделано и что необходимо проверить, и при необходимости их очень легко вернуть. - person Aspasia; 27.07.2017
comment
@Aspasia Хорошие отзывы. Я включил в ответ запросы на вытягивание для большей наглядности. - person VonC; 27.07.2017
comment
@VonC Каждый раз, когда тестировщик обнаруживает ошибку, он / она сообщает об этом разработчику и удаляет текущую ветку функции. Какой смысл удалять текущую ветку функции? - person Wenneguen; 05.02.2018
comment
@Wenneguen Просто убедитесь, что ветка не слита по ошибке. (Полагаю, это то, чем я занимался 5 лет назад) - person VonC; 05.02.2018

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

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

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

Для получения дополнительной информации перейдите по этой ссылке.

person Johnny Z    schedule 18.09.2013
comment
Вы все еще можете делать CI с ветками + ребазинг в Git. - person void.pointer; 18.09.2015

Мы используем то, что мы называем «золотом», «серебром» и «бронзой». Это можно назвать prod, staging и qa.

Я назвал это моделью плавильного котла. Это хорошо работает для нас, потому что у нас есть огромная потребность в QA с точки зрения бизнеса, поскольку требования могут быть трудными для понимания по сравнению с техническими аспектами.

Когда ошибка или функция готовы к тестированию, они переходят в «бронзу». Это запускает сборку jenkins, которая помещает код в предварительно созданную среду. Наши тестировщики (кстати, не супертехнологи) просто нажимают на ссылку и не заботятся о системе контроля версий. Эта сборка также запускает тесты и т. Д. Мы ходили туда и сюда по этой сборке, фактически отправляя код в среду тестирования \ qa, если тесты (модульные, интеграционные, селеновые) терпят неудачу. Если вы тестируете отдельную систему (мы называем ее ведущей), вы можете предотвратить внесение изменений в среду qa.

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

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

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

Экстренные исправления добавляются прямо в золотое дерево. Если изменение является простым и сложным для QA, оно может перейти непосредственно в серебро, которое попадет в дерево тестирования.

После нашего выпуска мы переводим изменения с золота (prod) в бронзу (тестирование), чтобы все было синхронизировано.

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

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

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

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

person Eric Twilegar    schedule 30.07.2014

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

Наш подход к работе с GIT таков;

Мы внедрили Git Flow в нашей компании. Мы используем JIRA, и в производство должны поступать только утвержденные билеты JIRA. Для утверждения Test мы расширили его, создав отдельную Test-Branch.

Шаги по обработке заявок JIRA:

  1. Создайте новую ветку из Develop-Branch
  2. Внесите изменения кода в Feature-Branch
  3. Извлеките из Feature изменения в ветку Test / QA
  4. После утверждения бизнеса мы переносим изменение из функциональной ветки в разработку.
  5. Разработка часто идет в выпуске, а затем, наконец, в основной ветке

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

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

person Christian Müller    schedule 01.07.2020
comment
Значит, этот процесс позволяет одновременно тестировать только одну функцию? Это кажется огромным препятствием для большой команды разработчиков. - person Kane; 21.10.2020
comment
Вы можете протестировать несколько функций в тестовой системе, объединив их, как в тестовой ветви. А если у вас несколько тестовых систем, вы можете создать несколько тестовых веток. - person Christian Müller; 22.10.2020
comment
В этом проблема ... наличие нескольких тестовых систем. Никто никогда не говорит об этом узком месте. Кроме того, тестирование нескольких функций в одной тестовой ветке рискованно ... поскольку вы не знаете, какое влияние функция A окажет на функцию B. - person Kane; 23.10.2020
comment
Вы правы, решение о наличии нескольких тестовых веток рискованно и требует тщательного рассмотрения. Используется, если у вас есть долгосрочные изменения, которые нужно тестировать отдельно от краткосрочных исправлений ошибок. Часто обновлять тестовые системы с помощью Develop важно после выпуска, иначе у вас могут возникнуть проблемы позже, когда появятся более крупные функции (например, новогодний выпуск или что-то в этом роде). Но для долгосрочных изменений, поскольку они обычно имеют большее влияние, перед запуском необходимо провести регрессионный тест также в ветке Release. - person Christian Müller; 30.10.2020
comment
@ ChristianMüller, ваш подход очень интересен. Мне просто было любопытно узнать, как вы обрабатываете сценарии базы данных, учитывая различия между ветвью функций и ветвью разработки? - person Felicity; 16.02.2021
comment
@Felicity: Это может быть немного проблематично, в зависимости от того, что вы используете. У меня есть два подхода к MS SQL Server. (1) При первом подходе к базе данных на SQL Server вы можете использовать DACPAC - ›docs.microsoft.com/de-de/sql/relational-databases/ / (2) Сначала замените код, вы можете использовать Концепция миграции: docs.microsoft.com/de- de / ef / ef6 / моделирования / code-first / migrations - person Christian Müller; 18.02.2021

Я бы не стал полагаться только на ручное тестирование. Я бы автоматизировал тестирование каждой функциональной ветки с помощью Jenkins. Я настраиваю лабораторию VMWare для запуска тестов Jenkins в Linux и Windows для всех браузеров. Это действительно отличное решение для кроссбраузерного тестирования и кросс-платформенного тестирования. Тестирую функционал / интеграцию с Selenium Webdriver. Мои тесты на селен выполняются под Rspec. И я написал их специально для загрузки jRuby в Windows. Я запускаю традиционные модульные тесты под Rspec и тесты Javascript под Jasmine. Я настраиваю безголовое тестирование с помощью Phantom JS.

person Natus Drew    schedule 08.09.2013