Випускають сіточку, не один номер версії
З'єдналися ігри і додатки рідко оновлення як один невидимий об'єкт. Гравець може відкрити старий клієнт, поки служба вже змінила. Каталог контенту може оновити перед клієнтом, який розуміє новий елемент. Конфігурація згортання може досягати одного регіону до іншого. Повернутися може прийняти як старі, так і нові форми запиту на деякий час, після чого відреставрувати адаптер. Витрачаючи все це, як "версія 42" приховує відносини, швидше за все, розриваються в реальних умовах згортання.
Починайте сканувати розміри версій окремо. У мінімальному режимі записувати клієнтську збірку, резервну копію або послугу, версія протоколу, schema або збереження версії, версія каталогу контенту, версія конфігурації та стан міграції. Деякі продукти також повинні редагувати варіант, набір функцій, можливість операційної системи, когорт облікового запису, або регіон. Мета полягає в тому, щоб не створити гігантський розподіл для власних цілей. Це полягає в тому, щоб виявити, де один компонент інтерпретує інший вихід компонента.
Корисне питання – це не «здійснити новий клієнт?» – це «які комбінації можуть співіснути, які повинні кожний комбінацій, і які комбінації заборонені?» Політика сумісності перетворює це питання на обмежений тестовий простір. Він іменує прийнятих діапазонів, перекладачів, вбиває перемикачі, витончені відмови, і розгортання воріт перед виробкою інциденту змушує команду здогадатися.
Написати обмеження сумісності в обох напрямках
Узгода часто асиметрична. Новий зворотний зв'язок може приймати запити від старого клієнта, тоді як старий спинка не може зрозуміти новий клієнт. Новий клієнт може прочитати старе збереження після міграції, а старий клієнт не повинен перекривати мігрований варіант. Новий контент може бути нешкідливим для старих клієнтів, коли прихований прапором функції, але небезпечний, коли старий клієнт лікує невідомого типу елемента як дійсний за замовчуванням.
Напишіть кожен обмеження як зв'язок з очікуваною поведінкою. Наприклад: клієнт 5 може автентифікувати проти служби 7 через протокол 2; клієнт 4 може прочитати каталог 10 тільки при виключенні елементів типу X; зберегти schema 3 може мігруватися до 5 через підтримувані краї; конфігурація 12 не повинна включати в себе функцію для клієнтів нижче побудови 6. Включіть пропозицію для непідтримуваних блоків змін
Не варто покладатися на порівняння версій поодинці. Більший номер не доводить можливості, а старше число не доводить функції відсутні. Використовуйте можливість заперечення або явну сумісність метаданих, де практична. Сам метаданих потребує тестів; відсутній прапор не повинен випадковим чином "безпечний приступ".

Генерувати ризик-орієнтовану матрицю
Повний продукт Cartesian може бути величезним. Чотири клієнтські збірки, три послуги, чотири варіанти контенту, і п'ять конфігураційних станів вже створюють комбінації 240 перед платформою і станом міграції. Тестування кожного можливого друку може бути повільніше, ніж цикл релізу і все ще пропущено межі, що має значення. Замість, генерувати ризик-орієнтовану матрицю від обмежень і зміни впливу.
Завжди включають новітній сумісний шлях, найстаріший ще підтримується шлях, і кордони переходу. Додайте комбінації, які перетинають поле змінного протоколу, межі міграції, правило інтерпретації вмісту, шлях заголовку або прапор функції. Включаючи принаймні один шлях згортання: клієнт або сервіс, що повертається до попереднього сумісного стану після нового стану, спостерігали дані. Коли зміна дійсно ізольована, записуйте, чому він не розширює матрицю замість тихого, як це не викликає.
Поранчеве покоління може допомогти приховати взаємодій, але воно не повинно замінити судом. Деякі збої вимагають трьох або чотирьох розмірів, щоб вирівняти: старий клієнт, новий каталог, мігрований збереження, і прапор конфігурації може бути безпечним в кожній парі, але недійсним. Додати ім'я сценарних тестів для цих продуктів специфічні ризики. Матриця слід переглянути людьми, які розуміють особливості, не тільки тест-генератором.
Випробування старих і нових клієнтів, які живуть разом
Coexistence - це нормальний стан згортання. Симулятор старого клієнта, який створює або змінює стан, а новий клієнт читає його, потім зворотний замовлення. Випробування відключень, одночасних сеансів, переривання оновлення завантажень, а користувач, який відновлює на іншому пристрої. Для кожного шляху визначимо, що сторона володіє авторитетною інтерпретацією. Клієнт не повинен забувати про новий значення поля, що служба пізніше лікує як довірено, так як обидва були оновлені в одному локальному тестовому режимі.
Зміни протоколу заслуговують явні адаптери. Коли поле перейменовано, тип розширюється або розщеплюється на кілька значень, перевірте старе уявлення, нове представництво та будь-який шар перекладу. Переклад повинен зберігати документальне значення або відхилити запит до небезпечної мутації. Сервер повертає чуйний, але неправильний за замовчуванням може бути більш небезпечним, ніж чітка невідповідність, оскільки він поширюється безшумною корупцією.
Клієнтська сумісність включає в себе досвід користувача. Якщо Стара будівля не може безпечно продовжуватися, шлях оновлення повинен з'явитися перед державною дією, а не після невдалої угоди. Якщо функція прихована від старих будівель, підтвердіть, що вона залишається прихованою в меню, глибокі посилання, контактні пункти входу та відновлені сеанси. Корисне рішення Backend ще може відчувати себе поломки, якщо інтерфейс представляє дію поточного клієнта не може завершитися.
Конфігурація та налаштування, як виконувані залежності
Зміст каталогів і віддалена конфігурація часто вважаються оперативними даними, а не кодом. У живій системі вони виконувані залежності, тому що вони змінюють те, що ідентифікатори, які функції з'являються, і які правила застосовуються. Тестувати новий каталог контенту з старими і новими клієнтами. Тестувати статичну конфігурацію кешу з новим сервісом. Перевірте прапор функції, що дозволяє шляхкоду до необхідного вмісту присутній. Тестувати зворотний дзвінок вмісту після того, як деякі гравці набули посилання на новий запис.
Використовуйте перевірені контракти з контентом. У записі каталогу необхідно вказати поля та можливості, необхідні для надання або виконання його. Установчий пакет повинен визначити клієнт або сервіс, що відповідає очікуванням. Якщо запис залежить від недоступної можливості, виберіть безпечну поведінку: приховати його, замінити документоване падіння, активацію деферів або зупинити розгортання. Не використовуйте загальний за замовчуванням, який випадково надає елемент, обходить перевірку на заголовок або зміни прогресування.
Для збереженого стану розрізняють міграцію схеми від семантичної міграції. Зміна схеми може додати поле за замовчуванням. Смантичні зміни можуть підірвати елемент, розбити квест або змінити правила економіки. Останні потребує варіагентів і рішень для відновлення, не тільки тест на десеріалізатора. Запис, який версія каталогу і конфігурації інтерпретував збережений стан, особливо коли релей або розслідування підтримки потрібно для відтворення результату.
Випробувано зворотний зв'язок перед випуском
Rollback не просто розгортається старішим кодом. Запитайте, чи може старий клієнт читати стан, написаний новим клієнтом, чи може старий сервіс інтерпретувати нові запити, чи потрібні записи контенту для нового рендерера, і чи перекреслена міграція одностороннього кордону. Деякі зміни пересилаються вперед. Це може бути прийнятно при заявленні, але він змінює план релізу: використовувати поетапну когорту, вікно сумісності, резервну копію або знімну політику, а також шлях підтримки замість того, щоб забезпечити миттєвий повернення.
Випробувано можливість зворотного відключення як сценарій. Починайте на старий сумісний набір, передайте один компонент, зробіть статус представника, потім перемістіть вибраний компонент назад. Вставте очікуваний стан: продовжуйте сумісність, прочитану безпеку, керовану відмову або заплановане відновлення. Результат повинен назвати те, що було виконано і що було імітовано. Рецензія ніколи не повинна помилитися структурною діаграмою для виконуваних решей зворотного відключення.
Зберігайте вихідний короткий і бетон. Запис релізу може стан: підтримувані діапазони сумісності, сценарії, виконані, відомі невиконані ризики, зміни, які знаходяться на пересиланні, розгортання воріт і умов для хитання. Не варто претендувати на універсальну безпеку, оскільки матриця пройшла. Чесний результат є доказом завершення релізу.
Схард докази в CI
Виконайте невеликий набір диму сумісності на кожній зміні, що доторкнуться до спільних контрактів. Виконайте розширені шарди, коли клієнт, протокол, зберегти, вміст, конфігурація або перегортання кодових змін. Shard by сценарія сім'ї, а не випадкових комбінацій: автентифікація та реставрація сеансів, покупка та заохочення, міграція та збережений стан, надання вмісту, повноліття поведінки та зворотного зв'язку. Це зберігає збої значущості та робить вартість нового виміру.
У звіті CI слід зберегти під час тестування і класифікації результатів. У тому числі, клієнтська структура, сервісне дослідження, протокол, параметри контенту і конфігурації, фіксація або ідентифікатор сценарію, тип навколишнього середовища, і перше правило сумісної сумісності. Уникайте відставання облікового запису або стану гравця. Коли сценарій імітується, позначте його. Коли сценарій працює від виконуваних адаптерів або пісочниці, етикетки, що теж. Якість віддачі є частиною рішення релізу.
Перегляньте ці звіти з власниками релізу перед розширенням розгортання; докази сумісності є введенням рішення, а не декоративним приладом.
Використання мінімізації несправностей при розбиттях матриць. Перший з ладу може містити непотрібні варіанти або прапори. Тримають детермінативне середовище все ще, зменшують розміри при збереженні несправності, зберігають отриманий мінімальний сценарій як регресивний випадок. Це робить матрицю більш цінним протягом часу, замість того, щоб стабільно стати непристойною колекцією історичних пригод.
Практичний контроль
- Ім'я клієнта, сервіс, протокол, схема, зміст, конфігурація та розміри міграції окремо.
- Написати підтримку, перекласти і заборонити зв'язок з очікуваною поведінкою.
- У тому числі найстаріших, новітніх, перехідних і невидимих сценаріїв.
- Додати ім'я багатовимірних тестів, де недостатнє покриття паром.
- Випробування старих і нових клієнтів, створення, читання та відновлення стану в межах одного сервісу.
- Поповнення каталогу та конфігураційних змін у відповідності до умов сумісності.
- Розгортання вперед-тільки міграції і забезпечити поетапний розгортання або відновлення плану.
- Зареєструвати, чи є докази імітовані, виконувані локально, пісочниці або зовні перевірені.
- Забезпечити мінімальний відмову від підпису як сценарій регресія.
Часті питання
Тестування паром достатньо для сумісності релізу?
Поранчеве покриття є корисним способом зменшити велику матрицю, але це не може довести всі багатовимірні обмеження. Використовуйте його для широкого покриття взаємодії, а потім додайте чіткі сценарії для високорослих комбінацій, таких як мігрований стан плюс новий зміст плюс старий клієнт, або зворотний дзвінок після зміни конфігурації.
Коли слід заблоковано старий клієнт?
Заблокувати його перед гасінням, коли він не може безпечно інтерпретувати необхідний вміст, задовольняти договір протоколу або читати поточний державний кордон. Вимога чіткого оновлення є безпечніше, ніж продовжуючи за замовчуванням, що змінює значення. Точна політика є специфікаційним, але стан і поведінка користувачів повинні бути протестовані разом.
Чи може сам прапорець вирішувати сумісність?
Немає. прапор може контролювати вплив, але це не може зробити несумісний протокол, schema або запис вмісту сейфу. Перевірте кеш прапора і оновлені стани, його залежність від можливостей клієнта, і що відбувається, якщо він змінюється під час сеансу є активним.
Що це робить про Persistium?
Persistium - це локально-перша надійність сімейства продуктів. Ця стаття описує підхід до проектування, а не претензію, що вивільнений продукт автоматично генерує кожну матрицю або забезпечує цілодобове управління релізом. Його напрямок безперервності досліджує обмежені докази для видів рішень сумісності, описаних тут.







