Какие программы контроля версий могут обеспечить выполнение и прохождение тестов до интеграции изменений?

В моей работе в настоящее время мы используем систему контроля версий Aegis /SCM. То, как мы его настроили, у нас есть куча тестов, и это заставляет придерживаться следующих вещей, прежде чем изменение может быть интегрировано:

  • Полный набор тестов должен быть запущен.
  • Все тесты должны быть пройдены.

При разработке через тестирование (TDD) это кажется разумным требованием. Но я не слышал о том, как вы можете сделать это с любыми другими системами контроля версий. (В настоящее время мы не планируем переключаться, но я хотел бы знать, как это сделать в будущем без использования Aegis.)

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

ETA: ОК, кажется, что обычно нужно иметь программное обеспечение для непрерывной интеграции VCS +, а выполнение тестов автоматизируется как часть сборки, а не как отдельный шаг. Если я правильно понимаю, это все еще позволяет вам фиксировать код, который не проходит тесты, просто вы получаете уведомление об этом - это правильно? Есть ли что-нибудь, что могло бы помешать вам вообще интегрировать / зафиксировать это?

9 ответов

Решение

IMO, вам гораздо лучше использовать систему непрерывной интеграции, такую ​​как CruiseControl или Hudson, если вы хотите обеспечить прохождение ваших тестов и сделать сборку, а не регистрацию зависимой от результатов тестов. Инструменты просты в настройке, и вы получаете преимущества встроенного уведомления о результатах (через электронную почту, RSS или плагины браузера) и отчеты о результатах тестирования через веб-страницу.

Что касается обновления вопроса, вы правы - VCS + CI позволяет вам фиксировать код, который не проходит тесты; с большинством настроек CI вы просто не получите окончательную сборку вашего продукта, если не пройдете все тесты. Если вы действительно хотите, чтобы кто-то даже не совершал коммиты, пока не пройдут все тесты, вам придется использовать хуки в VCS, как предлагали другие. Однако мне кажется, что с этим трудно иметь дело - либо разработчикам придется запускать все тесты каждый раз, когда они делают проверку, включая тесты, которые не имеют отношения к проверке, которую они делают, или вам придется создайте несколько очень детализированных хуков VCS, которые запускают только те тесты, которые имеют отношение к данной регистрации. По моему опыту, гораздо эффективнее полагаться на то, что разработчики будут запускать соответствующие тесты локально, а система CI обнаружит случайные ошибки.

С помощью Subversion и Git вы можете добавить хуки pre-commit для этого.

Похоже, вам нужно посмотреть на непрерывную интеграцию (или вариант).

Думаю, у Git тоже есть возможность применить патч.

Subversion и git поддерживают это с помощью хуков предварительной фиксации.

Visual Studio Team System поддерживает это изначально с помощью политик регистрации.

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

Мы используем git и buildbot, чтобы сделать что-то похожее, но не совсем то же самое. Мы даем каждому разработчику свой собственный репозиторий Git, и у нас есть набор buildbot для сборки в любое время, когда один из этих репозиториев отправляется. Затем есть кто-то, кто выступает в качестве интегратора, который может проверить состояние buildbot, просмотреть изменения и объединить их изменения или сказать им, чтобы исправить что-то по мере необходимости.

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

Я считаю, что программное обеспечение для непрерывной интеграции, такое как team city, позволит вам выполнить предварительную фиксацию и тестирование. Я не знаю ни одного vcs, который бы предоставлял его напрямую... может быть какой-то похожий на тот, который вы используете, но я не знаком с ними.

Вы также можете использовать хуки pre-commit в Perforce. И, если вы магазин.NET, Visual Studio можно настроить так, чтобы он требовал "закрытых" проверок.

VSTS с пользовательскими рабочими элементами, верно? Я не вижу ничего плохого в использовании этого. Встроенная отчетность. Выбор для автоматизации. Почему бы и нет?

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

Вы можете найти больше информации о стратегиях интеграции здесь, а также комментарии о Марке Шаттлворте о контроле версий здесь.

В большинстве реализаций CI есть механизм отклонения проверок, которые не соответствуют всем критериям (прежде всего, проходят все тесты). Их называют разными именами. VCS должен делать то, что они делают лучше всего.. исходный код версии.

Другие вопросы по тегам