Скільки розробників до постійної інтеграції стає для нас ефективним?


34

Існує накладні витрати, пов’язані з постійною інтеграцією, наприклад, налаштування, перепідготовка, активність поінформованості, зупинка для виправлення "помилок", які виявляються проблемами з даними, примусове розділення проблем стилів програмування тощо.

У який момент безперервна інтеграція окупається?

EDIT: Це були мої висновки

Налаштуванням було CruiseControl.Net з Nant, читаючи з VSS або TFS.

Ось кілька причин відмови, які не мають нічого спільного з налаштуванням:

Вартість дослідження : Час, витрачений на дослідження, чи виникає червоне світло, справжнє логічне невідповідність коду, якості даних чи іншому джерелу, наприклад, інфраструктурній проблемі (наприклад, проблема з мережею, зчитування часу очікування з управління джерелом, сторонній сервер вниз і т. д. тощо)

Політичні витрати на інфраструктуру : я розглядав можливість перевірки "інфраструктури" для кожного методу в тестовому циклі. У мене не було рішення на час очікування, крім заміни сервера збірки. Червона стрічка перешкодила і сервера не було замінено.

Вартість виправлення тестових одиниць : Червоне світло, пов’язане з проблемою якості даних, може бути показником погано написаного одиничного тесту. Отже, одиничні тести, залежні від даних, були переписані, щоб зменшити ймовірність виникнення червоного світла через погані дані. У багатьох випадках необхідні дані були вставлені в тестове середовище, щоб можна було точно виконувати його одиничні тести. Є сенс сказати, що, роблячи дані більш надійними, тест стає більш надійним, якщо він залежить від цих даних. Звичайно, це спрацювало добре!

Вартість покриття, тобто написання одиничних тестів для вже наявного коду : Виникла проблема покриття тесту одиниці. Існували тисячі методів, які не мали одиничних тестів. Отже, для їх створення знадобиться значна кількість людських днів. Оскільки це було б надто складно для ділового випадку, було вирішено, що одиничні тести будуть використовуватися для будь-якого нового публічного методу, який рухається вперед. Ті, у кого не було одиничного тесту, називались "потенційно інфрачервоним". Тут важливим є те, що статичні методи є суперечливим питанням того, як можна було б однозначно визначити, як конкретний статичний метод провалився.

Вартість замовлених випусків : Сценарії Нанта заходять лише далеко. Вони не настільки корисні для, скажімо, побудови, залежних від CMS, для розгортання баз даних EPiServer, CMS або будь-якого інтерфейсу.

Це типи проблем, які виникали на сервері збірки протягом погодинних тестових запусків та протягом ночі QA-побудов. Мені подобається, що вони будуть непотрібними, оскільки майстер збірки може виконувати ці завдання вручну під час виходу, особливо, з групою "man man" та невеликим складанням. Отже, побудова одного кроку не виправдала використання CI у моєму досвіді. Що з більш складними, багатоступінчастими побудовами? Це може створити біль, особливо без сценарію Нанта. Тож навіть створивши його, вони не були більш успішними. Витрати на вирішення проблем червоного світла перевищували переваги. Врешті-решт, розробники втратили інтерес і поставили під сумнів дійсність червоного світла.

Надавши це справедливій спробі, я вважаю, що CI є дорогим, і багато роботи по краях замість того, щоб просто виконати роботу. Вигідніше зайняти досвідчених розробників, які не роблять безладу великих проектів, ніж впроваджують та підтримують систему сигналізації.

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

Для роботи КІ недостатньо просто написати тести на одиницю, спробувати підтримувати повне покриття та забезпечити працюючу інфраструктуру для значних систем.

Підсумок: можна поставити під сумнів, чи потрібно виправити стільки помилок перед випуском з бізнес-перспективи. CI передбачає велику роботу, щоб зафіксувати кілька помилок, які замовник міг би визначити в UAT, або компанія могла б платити за виправлення в рамках договору про обслуговування клієнтів, коли термін гарантії в будь-якому випадку закінчується.


13
Це може бути вигідним навіть для команди з одного. Особливо, якщо у вас є тривалий тестовий набір, набагато краще автоматично отримувати результати побудови та тестування протягом ночі, ніж робити це вручну весь час.
SK-логіка

3
@Carnotaurus, локальний клон віддаленого сховища git позбавляється тайм-ауту від контролю джерел. Проблеми з мережею - для побудови продукту? Тепер справді ...

3
Червоне світло @Carnotaurus через якість даних та інфраструктури є кодовим фрагментом тендітних тестів . Дивіться також так: керування-технічне обслуговування-тест-одиниця-тести
k3b

1
Чим більше тест залежить від зовнішніх аспектів, тим він крихкіший. Приклад: Якщо тест успішний, лише якщо клієнт XY знаходиться в базі даних, тест є крихким, якщо тестова установка не гарантує, що ця необхідна умова існує, вставляючи самі дані, якщо це необхідно.
k3b

6
"Підсумок: навіщо робити робочі продукти, коли ми можемо змусити когось іншого заплатити нам за її виправлення, тому що це не так, як вони очікували, що програмне забезпечення працюватиме в першу чергу"? Це може не відповідати законодавчому визначенню, але це звучить як шахрайство для мене.
Кріс Пітман

Відповіді:


43

Встановлення двигуна CI подібне до встановлення пожежної сигналізації в будинку.

На мій погляд, переваги пов'язані не з багатьма розробниками, а з великою базою коду. CI-двигун активно виконує всю нудну роботу, яку ви не хочете робити самостійно, і робіть це щоразу.

Якщо ви зламаєте віддалений модуль, якого ви довго не торкалися, вам це скажуть негайно. Не тільки компіляція мудра, але й функціонально, якщо ви налаштували одиничні тести.

Також зауважте, що якщо ви дозволяєте CI-двигуну виконувати всі нудні роботи, включаючи налаштування інсталяторів тощо, вам не доведеться робити це вручну. Ви можете просто зайти у свій джерело та дочекатися, коли готовий продукт буде створений у стандартному місці. (EDIT: CI-двигун також працює у чітко визначеному середовищі, уникаючи будь-яких налаштувань для розробників, забезпечуючи відтворюваність)

Це також є частиною забезпечення якості.


EDIT: Після написання сказаного я мав досвід роботи з інструментом збирання Maven для Java. По суті, це дозволяє нам зберігати повну CI-конфігурацію всередині проекту (з pom.xml), що робить його значно простішим у підтримці установки CI та / або міграції до іншого двигуна CI.


1
@Carnotaurus, і в цьому випадку червоне світло використовується і для перехідних помилок. Звучить як обмеження в CI-двигуні, який ви використовуєте.

2
На моєму досвіді @Carnotaurus робота, зроблена для ретельного документування всіх аспектів усього, що стосується, наприклад, випуску, а потім виконання зазначених випусків у декілька разів, є більшим, ніж захоплення робочого процесу в сценарії мурашок або Maven, який потім може бути виконаний роботом будь-яку кількість разів. Згаданий робот також працює в чистому приміщенні, забезпечуючи відтворення конструкцій.

1
Зауважте, що я шукаю невдачі тестування, але не можна виконати фактичні програми, які ми постачаємо. Це вже не так важливо, як ми перейшли до артефактів Maven замість того, щоб збирати все для кожного випуску, але все одно важливо знати, що збірка є повністю функціональною. Нам просто потрібна частина безперервного розгортання.

2
@Carnotaurus: Я не кажу про сигналізацію. Якщо тести не вдаються, патч не інтегрується в основне сховище (взагалі), гарантуючи, що кожного разу, коли ви оформляєте замовлення / клонуєте, ви отримаєте повністю працюючу копію і можете розпочати роботу відразу. Тепер я погоджуюся з вами, що тести можуть бути важкими для написання та підтримки ... але я працював з і без тесту, і я бачу певне поліпшення якості з ними. Тож питання: автоматизований чи ні? На мій досвід, тестувати вручну потрібно приблизно стільки часу, скільки писати сценарій автоматизації (але я працюю у великій корпорації з інструментами для цього).
Матьє М.

5
" Це багато роботи, щоб захопити кілька помилок, за які компанія отримала б оплату за виправлення як частина договору про обслуговування клієнтів " - ну в такому випадку ви маєте економічний стимул НЕ виробляти програмне забезпечення з якомога меншою кількістю помилок, і у цьому випадку все це не стосується вас.

33

Справа не в тому, скільки розробників, а скільки кроків, щоб пройти від 1 до n (включно), де 1 & n - це ...

1: Перевірка коду
І
n: встановлення \ розгортаються пакунків

Якщо n <2, можливо, вам не потрібен CI в
іншому випадку, вам потрібен CI

Оновлення
Прочитавши ваші висновки, я можу лише зробити висновок, що ви звернулися до ІП з неправильного напрямку та з неправильних причин.


1
+1 - Я дуже багато можу додати до сказаного - але це дуже близько до основи того, чому мені подобається CI ... не тільки за те, що він робить, але і те, що вимагає від вас, щоб зробити це робота (ці вимоги - це речі, які ви дійсно повинні робити в будь-якому випадку).
Мерф

2
@murph: Yup, і це приносить невеликі переваги, як 1) знаючи, що буде створено у вашому сховищі, 2) збірка одним натисканням кнопки, 3) можливість випустити версію за мить і так багато іншого
Binary Worrier

Тож справедливо сказати, що це залежить від складності того, що має бути випущено, вимірюється його кількістю кроків до розгортання як здатності "перевірити" окремі шари?
CarneyCode

1
@Carnotaurus: Вибачте, товариш, але я не впевнений, що знаю, що ви намагаєтесь сказати. CI не має нічого спільного з тестуванням. Так, ви можете - і повинні - виконувати одиничні тести як частину збірки, але вони не повинні залежати від того, що не встановлено як частина тесту. Однак CI робить допомогу тестуванням. Однією з безлічі переваг CI є те, що вона дозволяє команді QA негайно і, здавалося б, підбирати нові зміни коду. CI = Можливість негайно випустити
Бінарний занепокоєння

1
@BinaryWorrier - Я думаю, що крок 1 - це перевірка коду;)

10

Це може вартувати зусиль навіть для команди з одного. Це особливо актуально, коли ви розробляєте код крос-платформи і вам потрібно забезпечити, щоб ваші зміни працювали на обох платформах. Наприклад, компілятор Microsoft C ++ сприймає більше, ніж GCC, тому якщо ви розробляєтесь в Windows, але вам також потрібно підтримувати Linux, система CI підкаже, коли ваші збірки в Linux є величезною підмогою.

Деякі системи CI досить просто налаштувати, тому накладні витрати насправді не такі величезні. Спробуйте, наприклад, Дженкінса або Хадсона.


Я не розглядав міжплатформенний сценарій. Якщо для створення різних збірок потрібні різні компілятори, то для CI є вагомий випадок - візьміть нагоду.
CarneyCode

4

Як ви кажете, є накладні витрати на його налаштування та підтримку роботи.

Але питання про те, де є точка беззбитковості, - це не функція кількості людей у ​​вашій команді, а швидше функція тривалості вашого проекту.

Сказавши це, є частина вартості налаштування, яку ви можете використовувати у всіх своїх майбутніх проектах, тому в перспективі накладні витрати можуть наближатися до нуля.


Отже, тривалість проекту (розмір проекту) важлива для вас CI? Я визнав помилкові тривоги дуже дорогими.
CarneyCode

Так, вам потрібно мати час, щоб окупити витрати на налаштування та криву навчання. Теоретично вам слід з часом навчитися ліквідувати помилкові тривоги.
Стівен Бейлі

Так, це теорія
CarneyCode

Ну ні, його практика. З часом ви зазначаєте, які тести є крихкими, а які - ні, і ви не переживаєте надто, якщо ваші тендітні тести зламаються, якщо вони не ламаються кілька разів поспіль. Ви пишете більш ізольовані, надійні тести, коли ви навчитесь, і ви дозволяєте застарілому покриттю розвиватися з часом, а не робити все це відразу. На практиці, CI - це не срібна куля, її зміна процесу, яка вимагає часу і врешті-решт призводить до менш глючного програмного забезпечення.
філосодад

3

Цього тижня я створив Дженкінса, щоб створити невеликий проект .NET, над яким я працюю. Я інтегрував його з моїм керуванням джерелом Git, щоб він ініціював побудову кожного комітету. Я інтегрував одиничні тести в збірку. Я інтегрував статичний аналіз у вигляді порушень FxCop та StyleCop.

Тепер при кожному заїзді він перевіряє весь мій код, будує його, збільшує номер версії на всіх збірках, тестує його, аналізує його на порушення FxCop та StyleCop, архівує збірку та записує результати в ряд графіків, так Я маю видимість з часом результатів тестів і порушень.

Робити це з нуля потрібно близько години (можливо, день у Google, якщо ви цього не робили раніше). Це нічого не коштує, тому що всі інструменти доступні безкоштовно.

Якщо, як і коли проект будується, у мене є високоякісна інфраструктура, яка зростатиме з нею без витрат. Якщо або коли нові розробники приєднаються до проекту, я можу отримати повну наочність щодо їх роботи та їх впливу на проект без витрат.

Тож єдиний сценарій, за яким я бачу, що CI не вартує, це або проект, який займе день або близько того, і ніколи не переглядається, або такий, мовою, де немає наявних / безкоштовних інструментів і вартість їх придбання. непропорційний до роботи.


Як я вже сказав, основні витрати представляють саме тестові одиниці для покриття застарілого коду. Крім того, тут ми не говоримо про команду, яка займається однією людиною ... Я дуже ціную голову над Дженкінсом.
CarneyCode

1
Наскільки це варте, я отримав значну користь від запуску сервера CI, не маючи жодних тестів - лише від впевненості в чистому складі та наявності пакетів розгортання.
Мерф

1

Якщо ви можете перевірити всі аспекти свого проекту після кожної зміни, то вам не потрібен ІС.

У всіх інших випадках це чистий виграш.


Я думаю, що звідси я і надходжу. Це набагато дешевше.
CarneyCode

Що ви маєте на увазі під підтвердженням у цьому випадку? Якщо вона автоматизована, трапляється якомога частіше і допомагає виявити психічні ковзання та огляди, то я все для цього. :-)
Вільям Пейн

1

Накладні витрати мінімальні. Я б сказав, що для проектів одного чоловіка це було б корисно. Як тільки ви досягнете двох, це неоціненно.

Я погоджуюсь, що для одного чоловіка проектів, якщо у вас є "складання / перевірка в один крок", то вам може бути добре з постійною інтеграцією, але в тих випадках ви зробили більшу частину важкої роботи, щоб створити CI, а також просто поставити це у формальній системі (CC, Hudson, TeamCity тощо).


Ви маєте на увазі без КІ?
CarneyCode

1

На питання про те, коли CI оплачує себе, важко відповісти на новий проект.

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

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

Інша річ, яку слід врахувати з точки зору вартості. Як виглядає ваш відділ з питань якості? Це ручне тестування? Якщо ви перейдете на CI, ви, можливо, зможете зменшити загальні витрати на якість, автоматизуючи ці сценарії у вашому вікні розробки. Можливо, ви зможете зменшити кількість QA людей, які підтримують ваш проект, залучивши їх до фази ІС.


1
Для заміни тесту на регресію вручну деякими автоматизованими тестами користувальницького інтерфейсу потрібно зовсім небагато часу та навичок. В одній компанії один хлопець написав близько 40% тестів і покинув компанію. Через кілька років про тести досі не писали. Б'юсь об заклад, що це типово.
CarneyCode

Ні, це не типово.
Quant_dev

Я не бачив багато протилежних доказів
CarneyCode

Якщо ви пишете тести на інтеграцію / прийняття на природній мові DSL, як Gherkin, ви можете легко перевести автоматизований тест в посібник. Тож я не вважаю це проблемою.
Майк Корнелл

@Carnotaurus - Я думаю, що це типово. Я теж бачив це двічі. Автоматизовані тести користувальницького інтерфейсу важкі.
Роклан

1

CI завжди завжди того вартий: почуття безпеки, яке він дає вам, дозволяє вам працювати швидше, ніж це було б можливо інакше. Здається, проблема, яка у вас виникає навколо тестів одиниць. Я погоджуюся, що одиничні тести дуже дорогі, але також думаю, що (для багатьох речей) вони є найменш гіршим варіантом, який ми маємо. Особисто і стосовно тих систем, над якими я прагну працювати, я клянусь тестами на рівні системи, що працюють на поєднанні реальних та (можливо синтетичних) патологічних випадків; Це дешевше, ніж одиничні тести, і потрапляє в ті важкодоступні куточки вашої концептуальної світобудови: "Невідомі невідомі" Дональда Рамсфельда.


Мені подобається трохи про тести на інтерфейс користувача на системному рівні. Значна частина тестувань втрачається в тумані одиничних тестів сумнівної якості та покриття.
CarneyCode

Покриття - це питання і психології людини; ми маємо вроджену тенденцію писати тести для тих випадків, про які ми вже думали. Саме тому, щоб отримати сертифікацію на високому рівні SIL, одиничні тести повинні бути складені окремою командою, ніж ті, що розробили тестувану систему, і навіть тоді є багато випадків і ситуацій, очевидних лише для всіх в ретроспективі. Потрібна ретельна перевірка покриття коду; але надзвичайно складно і дорого.
Вільям Пейн

... Звідси вигода, яку ви отримуєте, кидаючи найефективніші мотлохи, які ви можете знайти в системі на найвищому рівні і бачити, що відбувається ... :-)
Вільям Пейн

1
+1 - Повністю згоден. Деякі частини системи просто не перевіряються одиницями (тобто ребрами, як у базі даних). Звичайно, ви можете знущатися над db, але це залишає код, який розмовляє з db, не перевіреним. У якийсь момент вам потрібно написати кілька тестів реального світу, які інтегрують ваші системи та спілкуються з іншими системами. Зробивши це, ви завжди знайдете помилки, які ви пропустили у затишному чистому світі тестового модуля та глузуючої рамки (на думку LINQ до SQL).

Насправді, я нещодавно виявив цікаве заняття тестовим тестуванням, яке може викупити тестування блоку: jester.sourceforge.net
Вільям Пейн

0

Завжди використовуйте його, незалежно від чисельності команди. Якщо ви, наприклад, це лише ви, хто знає, що ви можете кодувати зі свого ноутбука у Starbucks, а потім продовжувати роботу з вашої домашньої системи?

Накладні гроші насправді не такі вже й погані.


0

Один. Так, одного достатньо, щоб почати використовувати безперервну інтеграцію.


0

Справа не в тому, скільки розробників, а скільки

а. Скільки часу ви економите, використовуючи автоматику і як часто.

  • Заощаджений час на побудову після інтеграції, запуск автоматизованих тестів та створення установок * частота реєстрації = відсоток заощадженого часу.

б. Скільки у вас версій / галузей / продуктів.

  • Якщо у вас є один розробник, який працює над двома різними гілками, то заощаджений час збільшується вдвічі, оскільки кожна галузь потребує побудови, тестування та упаковки.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.