Як уникнути постійної нестабільності, викликаної інтеграцією, у тестових середовищах?


19

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

Але також припустимо, що у вашому тестовому циклі є інші люди, наприклад, менеджери чи клієнти. Має сенс залучати інших людей до спроб переглянути (перервати?) Свої майбутні зміни, ні?

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

  • they може витратити свій час на звітування про проблеми, які до моменту збереження (поглибленого) звіту вже не можуть відтворити цю проблему більше (наприклад, тому що випадково ви також зіткнулися з тим самим випуском і вже виправили це у своєму оточенні).
  • you можливо, не вдасться відтворити проблеми, про які вони повідомляли, оскільки середовища, в яких вони стикалися з якоюсь проблемою, вже не ідентичні (ви (!!!), можливо, наклали їхнє середовище).

То що ви можете зробити (як налаштувати речі?), Щоб уникнути подібних (розчаровуючих) ситуацій?

Відповіді:


10

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

Деякі контексти для початку:

  • У нас 7 середовищ для розміщення приблизно 80 програм, більшість з них покладаються один на одного через веб-сервіси або спільні таблиці в db2-iSeries.
  • Для хорошого чи поганого, iSeries - це наша система довідок БД.
  • Цей останній момент скасовує будь-яку ідею переведення додатка з його залежностями в ізольоване середовище, оскільки піднесення AS400 для кожного коштуватиме занадто багато, і ми не матимемо обладнання для його запуску.

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

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

Коротка версія - мати систему «семафор» навколо програм у навколишньому середовищі, команда повинна мати можливість блокувати цільове додаток залежностями (та перехідними залежностями) на час ручних тестів.
Реалізація цього семафору сильно залежить від вашої системи автоматизації, тому я не буду на цьому продовжувати.

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


Ця відповідь є варіантом того, до чого я звик (мейнфрейми), де ми робимо такі речі принаймні 1,5 десятиліття або близько того (до того, як народився "DevOps"). Цікаво, чи було б сенсом додати тут свою власну відповідь (для подальшого розширення цієї відповіді, як ми це робимо з CMN / ZMF для, наприклад, "банків"), або просто перенести її на нове (самовідповідаюче) питання. Що ти думаєш? Також мені цікаво те, що метафора, варто нового питання (з посиланням на цю відповідь)? PS: Ви заперечуєте, якщо я виправляю деякі помилки?
Pierre.Vriens

Немає проблем для редагування :) Я все-таки тримав це загальне, Це не особливо специфічно для devops org IMHO. Знову DevOps - це організаційна зміна, яка може допомогти налаштувати кращу автоматизацію, поділившись на проблемах ... тому я називаю це семафором, як у програмуванні, я не думаю, що це варто питання, але це вирішувати саме вам
Tensibai

Гаразд, редагування завершено (як завжди: відкат / покращення, як вважаєте за потрібне). До речі, у вас на клавіатурі є "s"?!?!?! Крім цього: речі, над якими варто подумати над вихідними: дивіться моє новітнє мета-питання ... Приємні вихідні! Час для садівництва тут (обрізка ...)
П’єр. Врієнс

8

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

IMHO, ви не повинні використовувати таке тестування в межах своїх кваліфікаційних цілей CI / CD, оскільки це фактично скасує ваш кваліфікаційний процес (принаймні в цій області). Скажімо, що програмне забезпечення проходить тест X, фактично не виконуючи тест X для кожної доставленої версії програмного забезпечення або не маючи впевненості, що passотриманий результат не є випадковим (через помилкові позитиви), це призведе до погіршення рівня довіри вашого тестування. Помилкові негативи не шкодять довірі, але вони також небажані через непотрібний "шум", який вони створюють.

Добре виконувати такі тестування поза вашим кваліфікаційним процесом CI / CD. Але ви будете лікувати невдалий результат у такому тестуванні, як помилка, знайдена клієнтом: вам потрібно буде надійно відтворити проблему, щоб мати змогу розробити виправлення для неї та підтвердити, що виправлення працює. І ви справді не можете цього зробити, якщо тестування не є надійним.

Якщо ви плануєте вирішити цю проблему, то в ідеалі слід спочатку розробити автоматизований, надійний тестовий зразок для відтворення проблеми. Який ви б використали для розробки виправлення та підтвердження його ефективності (результат тесту повинен перейти від FAIL до PASS). Ви можете (слід?) Також розмістити цей тестовий зразок у вашому процесі кваліфікації CI / CD, щоб запобігти подальшому повторному виникненню, за бажанням - для підвищення загального рівня якості випуску програмного забезпечення.


У вашій відповіді є багато, що можна переварити (я не впевнений, що це я зрозумів уже повністю). Але те, що ви писали про " виконати таке тестування поза вашим процесом кваліфікації CI / CD ": Я б очікував, що кінцевий результат того, що виробляється / постачається, зберігається у ваших середовищах QA і prod (через компакт-диск, автоматичний або вручну). Але це також мені " здається ", що CI також повинен доставити свої результати там, тоді як "назовні" здається поділом чи дублюванням чи що-небудь, ні?
Pierre.Vriens

Посилання insideта outsideпосилання відносяться до циклу верифікації CI. В основному я ставлю під сумнів причину існування середовища QA - більшість тестів, зроблених там, повинні бути надійними і врешті-решт виконані як частина перевірок CI, особливо в контексті безперервного розгортання - оскільки ви хочете виконати їх під час кожної ітерації CI (успішно) до цього моменту принаймні) у будь-якому разі.
Дан Корнілеску

7

Звичайний підхід полягає у створенні різних середовищ:

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

PREPROD / QA - це місце «відтворення» QA / тестування / перевірка команди, які роблять тести. Це середовище зазвичай замерзає під час тестів. Інтеграція CI з цим середовищем полягає лише у наданні нової версії продукту, конфігурацій тощо.

ВИРОБНИЦТВО - це потрібно пояснювати :)?


добре, це повинно допомогти покращити стабільність, мерсі! Моє запитання стосується "тестових" середовищ, тому очевидно "виробництво" не слід розглядати як таке. Незважаючи на тих, хто використовує «виробництво» для тестування, ви знаєте приказку « Найкращий тест - це активувати його у виробництві, а якщо він не працює, просто виконайте відкат / резервну копію! »?
Pierre.Vriens

@ Pierre.Vriens, "грати" в prod IMHO не мудро :) Такий поділ середовища навмисний. На попередній роботі у нас було 5 різних середовищ .... A votre serivce
Ромео Нінов

1
"Я" погоджуюся, що така гра - не мудра. Однак що можна зробити "ти" щодо ковбоїв (мій "термін" я використовую для таких юппій), які продовжують робити це знову і знову, і кожен раз, коли вони отримують схвалення від своїх менеджерів, щоб обійти (наприклад) щомісячну активацію випуску , ще одним виправленням помилок (наприклад, для їх виправлення за день до цього…, який ввів нову помилку). Ви думаєте, що цього не відбувається в реальному світі? BTW: про "заморожування" у вашій відповіді ви вважаєте, що має сенс розмістити запитання на кшталт "Що таке зразкові реалізації замороженого середовища?"
Pierre.Vriens

@ Pierre.Vriens, для мене є ідеальним сенсом ставити таке питання. Зазвичай це регулюється правилами компанії, але девчі створюють досить динамічне середовище, і це може стати справжньою проблемою :)
Ромео Нінов

1
Це мій вподобаний підхід, тому він створює середовище, де розробники можуть негайно перевірити свої зміни в інтегрованому середовищі, але зберігає QA чистим, поки код не буде готовий до формальної перевірки
Taegost

3

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


3

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

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

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


Цікаві точки зору / доповнення, хоча в цьому є деякі речі, які, можливо, ви хочете уточнити / переробити: (1) "додатки" в цьому контексті, що ви маєте на увазі (деякі приклади?) (2) будь-яку ідею, як це могло б працювати в (старий добрий) мейнфрейм (3) що тут "пом'якшувальне"? PS: Дайте мені знати, якщо ви думаєте, що я повинен створити нове запитання для будь-якої з цих «речей» (куль).
Pierre.Vriens
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.