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

StackOverflow https://stackoverflow.com/questions/214695

Вопрос

Я могу придумать множество веских причин для его использования;однако, каковы у этого недостатки?

(Помимо покупки другого сервера)

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

Это было полезно?

Решение

(Стоит отметить, что под «непрерывной интеграцией» я имею в виду автоматизированную интеграцию с автоматизированным процессом сборки и автоматически запускает тесты и < strong> автоматически обнаруживает сбой каждого элемента.

Стоит также отметить, что «непрерывная интеграция» просто значит транк или тестовый сервер. Это не означает «пушить каждое изменение».

Есть много способов сделать неправильную непрерывную интеграцию.)

<Ч>

Я не могу придумать ни одной причины, чтобы не проводить непрерывное интеграционное тестирование. Я предполагаю, что я предполагаю, что "непрерывная интеграция" включает в себя тестирование. То, что он компилируется, не означает, что он работает.

Если сборка и / или тестирование занимают много времени, то непрерывная интеграция может дорого обойтись В этом случае запустите тесты, очевидно связанные с вашими изменениями, до фиксации (инструменты анализа покрытия, такие как Devel :: CoverX :: Covered может помочь выяснить, какие тесты идут с каким кодом), проведите интеграционное тестирование после фиксации, используя что-то вроде SVN :: Notify и предупредить разработчиков в случае сбоя. Заархивируйте результаты теста, используя что-нибудь вроде Smolder . Это позволяет разработчикам работать быстро, не тратя время на просмотр тестовых наборов, но при этом рано обнаруживая ошибки.

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

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

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

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

Другие советы

Я не думаю, что в этом есть какие-либо недостатки. Но ради аргумента вот статья Эрика Миника на UrbanCode (" речь идет о тестах, а не сборках. ") Он критикует инструменты, основанные на работа Мартина Фаулера о том, что им не хватает времени на тесты.

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

Добавьте требования к сборке для каждого коммита, и требования начнут казаться невероятными. Возможные варианты: более медленная обратная связь или удаление некоторых тестов. & Quot;

У Джеймса Шора была отличная серия записей в блоге об опасностях, связанных с мыслью, что использование такого инструмента CI, как CruiseControl, означает непрерывную интеграцию:

Одна из опасностей настройки сервера CI заключается в смещении цели, когда кажется, что важно "поддерживать процесс сборки", а не "обеспечивать нас высококачественным программным обеспечением".Таким образом, люди перестают заботиться о том, сколько времени займет выполнение тестов.Тогда им требуется слишком много времени, чтобы просмотреть их все перед проверкой.Затем сборка продолжает ломаться.Тогда сборка всегда прерывается.Поэтому люди комментируют тесты, чтобы сборка прошла успешно.И качество программного обеспечения падает, но, эй, сборка проходит успешно...

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

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

Другой сценарий, о котором я слышал, это то, что CI не имеет смысла, если вы не собираетесь ничего делать с результатами. Например, если ваше программное обеспечение должно быть отправлено в QA, и сотрудники QA действительно могут просматривать новую версию только каждые несколько дней, нет смысла собирать сборки каждые несколько часов. Если другие разработчики не собираются смотреть на метрики кода и пытаться улучшить их, нет смысла отслеживать их. Конечно, это не вина того, что КИ не является хорошей техникой, это недостаток вашей команды, готовой принять КИ. Тем не менее, внедрение системы CI в таком сценарии не имеет смысла.

При запуске требуется некоторое время, чтобы все настроить.

Если вы добавляете тесты, покрытие, проверки статического кода, поиск дубликатов, сборку и развертывание документации, то для ее правильного выполнения может потребоваться много времени (недели). После этого поддержание сборки может стать проблемой.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top