Існує накладні витрати, пов’язані з постійною інтеграцією, наприклад, налаштування, перепідготовка, активність поінформованості, зупинка для виправлення "помилок", які виявляються проблемами з даними, примусове розділення проблем стилів програмування тощо.
У який момент безперервна інтеграція окупається?
EDIT: Це були мої висновки
Налаштуванням було CruiseControl.Net з Nant, читаючи з VSS або TFS.
Ось кілька причин відмови, які не мають нічого спільного з налаштуванням:
Вартість дослідження : Час, витрачений на дослідження, чи виникає червоне світло, справжнє логічне невідповідність коду, якості даних чи іншому джерелу, наприклад, інфраструктурній проблемі (наприклад, проблема з мережею, зчитування часу очікування з управління джерелом, сторонній сервер вниз і т. д. тощо)
Політичні витрати на інфраструктуру : я розглядав можливість перевірки "інфраструктури" для кожного методу в тестовому циклі. У мене не було рішення на час очікування, крім заміни сервера збірки. Червона стрічка перешкодила і сервера не було замінено.
Вартість виправлення тестових одиниць : Червоне світло, пов’язане з проблемою якості даних, може бути показником погано написаного одиничного тесту. Отже, одиничні тести, залежні від даних, були переписані, щоб зменшити ймовірність виникнення червоного світла через погані дані. У багатьох випадках необхідні дані були вставлені в тестове середовище, щоб можна було точно виконувати його одиничні тести. Є сенс сказати, що, роблячи дані більш надійними, тест стає більш надійним, якщо він залежить від цих даних. Звичайно, це спрацювало добре!
Вартість покриття, тобто написання одиничних тестів для вже наявного коду : Виникла проблема покриття тесту одиниці. Існували тисячі методів, які не мали одиничних тестів. Отже, для їх створення знадобиться значна кількість людських днів. Оскільки це було б надто складно для ділового випадку, було вирішено, що одиничні тести будуть використовуватися для будь-якого нового публічного методу, який рухається вперед. Ті, у кого не було одиничного тесту, називались "потенційно інфрачервоним". Тут важливим є те, що статичні методи є суперечливим питанням того, як можна було б однозначно визначити, як конкретний статичний метод провалився.
Вартість замовлених випусків : Сценарії Нанта заходять лише далеко. Вони не настільки корисні для, скажімо, побудови, залежних від CMS, для розгортання баз даних EPiServer, CMS або будь-якого інтерфейсу.
Це типи проблем, які виникали на сервері збірки протягом погодинних тестових запусків та протягом ночі QA-побудов. Мені подобається, що вони будуть непотрібними, оскільки майстер збірки може виконувати ці завдання вручну під час виходу, особливо, з групою "man man" та невеликим складанням. Отже, побудова одного кроку не виправдала використання CI у моєму досвіді. Що з більш складними, багатоступінчастими побудовами? Це може створити біль, особливо без сценарію Нанта. Тож навіть створивши його, вони не були більш успішними. Витрати на вирішення проблем червоного світла перевищували переваги. Врешті-решт, розробники втратили інтерес і поставили під сумнів дійсність червоного світла.
Надавши це справедливій спробі, я вважаю, що CI є дорогим, і багато роботи по краях замість того, щоб просто виконати роботу. Вигідніше зайняти досвідчених розробників, які не роблять безладу великих проектів, ніж впроваджують та підтримують систему сигналізації.
Це так, навіть якщо ті розробники виїжджають. Не має значення, чи піде хороший розробник, тому що процеси, які він слідкує, гарантують, що він пише специфікації вимог, проектує специфікації, дотримується інструкцій з кодування та коментує свій код, щоб він був читабельним. Все це переглядається. Якщо цього не відбувається, то керівник його команди не виконує своєї роботи, яку повинен підбирати його керівник тощо.
Для роботи КІ недостатньо просто написати тести на одиницю, спробувати підтримувати повне покриття та забезпечити працюючу інфраструктуру для значних систем.
Підсумок: можна поставити під сумнів, чи потрібно виправити стільки помилок перед випуском з бізнес-перспективи. CI передбачає велику роботу, щоб зафіксувати кілька помилок, які замовник міг би визначити в UAT, або компанія могла б платити за виправлення в рамках договору про обслуговування клієнтів, коли термін гарантії в будь-якому випадку закінчується.