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