Организация процесса разработки продукта на C++ / Windows
От: Unhandled_Exception Россия  
Дата: 27.02.14 11:58
Оценка:
Всем привет,

У нас проект на С++ для Windows. Пишем на VC++, тикеты в trac, репозиторий svn.

Процесс сейчас поставлен таким образом.

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

Решил улучшить процесс, чтобы большая часть работы выполнялась автоматически, заодно перейти на git (в котором пока не профи).

Итак, будет ветка development и ветка production. Ветка production всегда содержит только тот код, который прошел тесты, из production можно делать релизы. Ветка development — для текущей разработки.

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

Когда он считает, что разработка завершена, то выставляет в тикете статус "Ready to test". Это отслеживает специальный скрипт, который по выставлению статуса мерджит ветку в development (но не коммитит — тут вопрос, об этом ниже).

Если произошел конфликт при мердже, то тикет опять переходит в статус "Open".

Если все смерджилось, то код собирается, потом прогоняются тесты. Если тесты не прошли, то тикет опять переходит в статус "Open".

Если тесты прошли, то — если бы тут был svn, то было бы сделано svn commit в development, не знаю как в git, а тикет закрывается.

Меня пугает такой сценарий: пока прогоняются тесты (они у нас долго исполняются, и, кроме того, они будут запускаться на куче виртуалок, потому что продукт чувствителен к разным версиям Windows) development может измениться, и нету гарантии, что после коммита в development, development останется стабильным (т.е. тесты проходят). Ведь мы брали старую ревизию development-а.

Что же, в таком случае надо делать мердж бранча и коммитить его в development, а уже потом прогонять тесты?

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

Можно было бы тесты прогонять в git hook, но они прогоняются довольно долго. Не получится ли так, что нельзя будет делать новые коммиты пока хук не отработал свое? Ну а как еще гарантировать, что каждая ревизия development стабилльна...

Как лучше всего организовать процесс? У кого какая практика?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.