Наша команда разработчиков использовала стратегию ветвления GitFlow , и это было здорово!
Недавно мы наняли пару тестировщиков, чтобы улучшить качество нашего программного обеспечения. Идея состоит в том, что каждая функция должна быть протестирована / QA тестером.
В прошлом разработчики работали над функциями в отдельных ветвях функций и по завершении объединяли их обратно в develop
ветку. Разработчик сам проверит свою работу на этой feature
ветке. Теперь с тестерами мы начинаем задавать этот вопрос
В какой ветви тестировщик должен тестировать новые функции?
Очевидно, есть два варианта:
- в отдельной функциональной ветви
- на
develop
ветке
Тестирование в ветке разработки
Изначально мы считали, что это верный путь, потому что:
- Эта функция тестируется со всеми другими функциями, объединенными в
develop
ветку, с момента ее разработки. - Любые конфликты можно обнаружить раньше, чем позже
- Это облегчает работу тестировщика, он
develop
всегда имеет дело только с одной веткой ( ). Ему не нужно спрашивать разработчика, какая ветвь предназначена для какой функции (функциональные ветки - это личные ветки, управляемые исключительно и свободно соответствующими разработчиками).
Самые большие проблемы с этим:
develop
Филиал загрязняется с ошибками.Когда тестировщик обнаруживает ошибки или конфликты, он сообщает о них разработчику, который исправляет проблему в ветке разработки (ветка функций была заброшена после слияния), и впоследствии могут потребоваться дополнительные исправления. Множественные коммиты или слияния подпоследовательностей (если ветка заново создается из
develop
ветки для исправления ошибок) делают откат функции изdevelop
ветки очень трудным, если это возможно. Есть несколько функций, которые объединяются и фиксируются вdevelop
ветке в разное время. Это создает большую проблему, когда мы хотим создать выпуск только с некоторыми функциями вdevelop
ветке.
Тестирование в функциональной ветке
Мы подумали еще раз и решили, что нужно протестировать функции в ветках функций. Перед тестированием мы объединяем изменения из develop
ветки в функциональную ветку (догоняем develop
ветку). Это хорошо:
- Вы по-прежнему тестируете эту функцию с другими основными функциями.
- Дальнейшее развитие (например, исправление ошибки, разрешение конфликта) не приведет к загрязнению
develop
ветки; - Вы можете легко решить не выпускать функцию, пока она не будет полностью протестирована и одобрена;
Однако есть и недостатки.
- Тестировщик должен выполнить слияние кода, и в случае конфликта (что весьма вероятно) он должен попросить помощи у разработчика. Наши тестировщики специализируются на тестировании и не умеют кодировать.
- функция может быть протестирована без наличия другой новой функции. например, функция A и B тестируются одновременно, две функции не знают друг друга, потому что ни одна из них не была объединена в
develop
ветку. Это означает, что вам придется снова протестироватьdevelop
ветку, когда обе функции все равно будут объединены с веткой разработки. И вы должны не забыть проверить это в будущем. - Если функция A и B протестированы и одобрены, но при объединении обнаружен конфликт, оба разработчика обеих функций считают, что это не его собственная ошибка / работа, поскольку его ветвь функции прошла тестирование. В общении есть лишние накладные расходы, и иногда тот, кто разрешает конфликт, разочаровывается.
Выше наша история. Имея ограниченный ресурс, я бы не хотел тестировать все везде. Мы все еще ищем способ лучше с этим справиться. Я хотел бы услышать, как другие команды справляются с подобными ситуациями.