Тестування чистого рахунку пропускає важливий дефект
Новий конструктор Unity може виглядати ідеально, коли він починається з порожнього профілю. Свіжий обліковий запис не має змінних полів, напівфабрикатів, посилання на каталог, старі складські стеки, перервовані покупки, або значення, які були дійсні під більш ранніми правилами. Тому доведено лише те, що новий формат може створити новий стан. Це говорить дуже мало про те, чи можна безпечно носити гравця з вчорашнього світу на сьогодні.
Міграційна робота повинна початися з більш міцного питання: це точний історичний стан вводять в поточну споруду, зберегти значення, яке ще має значення, і або стати дійсним поточним станом або не в тому випадку, що корисно діагностувати? Це питання продукту, стільки як серійне питання. поле може десеріалізувати успішно, поки не порушує правила прогресування, що вказує на відсутність вмісту, або зміни договору купівлі. Завантаження байтів не вистачає.
У статті описано локально-перший регенеральний процес. Він навмисно не обіцяє, що один інструмент може зрозуміти кожен Unity, налаштування послідовності, резервної копії або інтеграції платформи. Unity моделі даних різняться, а гра може додавати власне шифрування, хмарну синхронізацію, бінарний формат або користувацькі адаптери. Довгою частиною є тестова дисципліна: збереження історичних форм, скопіювати їх перед мутацією, зробити шлях міграції явним, і перевірити гра варіантів після кожного кордону.
Створіть історичний державний корпу
Трет старий економить як перевірений корпу, не як вільні файли, що пройшли в чаті. Кожна фіксація потребує стабільного ідентифікатора, версія, яка виробляється її, коротка сценарна етикетка, форматна декларація, а також класифікація конфіденційності. Сценарійна етикетка має значення, тому що пакет міграції повинен містити значущі стани, не просто випадкові JSON. Приклади включають новий гравець, гравець в рубцевій межі, інвентаризацію в його стеці ліміт, перериваний підручник, стару нагороду події, користувач з додатковим косметичним змістом, і профіль, який навмисно містить недійсне поєднання спадщини.
Використовуйте бездоганні робочі копії. Тестовий бігун ніколи не повинен перезаписувати вихідну фіксацію при спробі міграції. Скопіювати фіксацію на тимчасові робочі каталоги, записувати його контрольний пристрій або вміст хеш, запустити адаптер, і зберегти отриманий вихід окремо. Це перетворює дивно результат в докази, що хтось інший може повторювати. Він також запобігає перевірці тихо покращуючи власний вхід, поки початкова проблема зникне.
Зберігати дані про гравця з загального каталогу фіксації розвитку. історичний корпу може бути синтетичним, згодженим, ретельно відреагованим, або створеним з детермінованих сценаріїв. Ключ полягає в тому, що він зберігає структурні та смислові випадки, які мають значення. Конфіденційність не є після: видалення прямих ідентифікаторів, ідентифікаторів пристроїв, контактної інформації, платіжних токенів, сирих квитанцій і секретів перед фіксацією стає широко доступним.
Складання графіка міграції перед написанням конвертера
Версія номера не є планом міграції. Гра може переходити від 1 до 2, 2 до 3, і 3 до 4, потім зіткнутися з гравцем, який пропускає безпосередньо від 1 до 4. Він може перенести гарячийфікс, який змінює тільки приглушений інвентарний запис, або перезаписати поле, що старий вміст все ще очікує. Графік робить ці варіанти видимими: кожен вузол є збереженнямки або смантичного постіль; кожен край;
Для кожного підтримуваного стартового варіанту необхідно визначити, чи є ігрові ланцюги суміжних трансформацій, використовує пряму трансформацію, або вимагає підвищення сервісу перед тим, як клієнт завантажує. Не залишає пропущених версій для того, що відбувається, коли поля відсутні. Ланцюжок може бути безпечніше, коли кожен крок невеликий і перевірений. Прямий трансформ може бути безпечнішим, коли проміжні формати ніколи не призначені для дотримання. Обидва підходи потребують чіткої власності і повторюваних світильників.

Графік повинен включати більше, ніж серійний тип. Каталог записів залежностей, версій конфігурації, прапори функцій, які впливають на інтерпретацію, і поточну версію програми. Збереження може бути синтактичним струмом, але недійсним, тому що посилений елемент не існує або правило змінився значення. Ці межі сумісності, не дратівливі випадки крою.
Зберігати завантажувальні поїздки
Після того, як фіксація надходить в шлях міграції, виконує повну круглу подорож: завантаження історичного входу, мігрувати її, побудувати модель в грі, зберегти її за допомогою поточного письменника, потім знову навантажити цей вихід. Перше навантаження перевіряє, чи може потрапити історичний запис в систему. Друга навантаження перевіряє, чи створюється нинішній письменник стабільний, самосприятливий результат. Порівняйте стан після перших і других навантажень відповідно до сеймантичних правил, не тільки сирої рівноправності.
Сира рівноправність часто невірна твердження. Нові за замовчуванням можуть бути додані, поле замовлення може змінитися, часові темпи можуть бути оновлені, а колекції можуть отримати стабільний замовлення. Визначте нормалізатор для значень, які навмисно не-семантичні, після порівняння решти. Сам нормалізатор заслуговує на огляд; він не повинен стати пледом ігнорувати список, який приховує реальну втрату. Хороші звіти порівняння, які поля були додані, видалені, трансформовані або навмисно ігноруються.
Результати тесту повинні називатися першою недійсною державою. Якщо міграційна мережа має три переходи, не повідомляють лише про те, що кінцеве навантаження не вдалося. Захоплення стану після кожного пункта перевірки, валідувати її, і зупинитися на ранніх кордонах, що порушує неінваріант. Ця локалізація перетворює ваговий «старий збитий» звіт в певну чергу міграції, фіксацію і різниці стану.
Експрес ігриспецифічні варіанти
Загальна міграція не може знати, що прогресування означає в певній грі. Гра повинна надати власні інваріанти. Написати їх на мову, яка з'єднує до результатів гравця: рівень знаходиться в межах поточного діапазону; кількість інвентаризації не є неінгативним і обмеженим; кожен належить елемент має відомий визначення або явною спадщиною; завершений підручник залишається завершено; валюта скінченна; посилання квесту належить до поточного каталогу; авторське право унікальний; світове насіння і генерується світовим державним згодою.
Окремі інваріанти в шари. Структурні інваріанти відповідають на те, чи існують необхідні поля і типи. Референціальні інваріанти відповідають, чи точка ідентифікатора до відомих визначеннях. Інваріанти домену відповідають, чи значення одержують правила гри. Інваріанти безпеки відповідають, чи є дані скінченними, обмеженими і безпечними для відображення. Коли фіксація не вдається, шар розповідає команду, чи потрібна зміна послідовників, перехідник каталогу, правила рішення або політика відновлення.
Використовуйте детермінаційні мутації, щоб зробити роботу корпу. Починайте з відома фіксації і навмисно видаліть поле, дублікуйте ідентифікатор інвентаризації, замініть посилання на каталог, пропустіть версію, переадресуйте список дій, або змініть граничну кількість. Кожна мутація повинна мати очікуваний результат: мігруйте з документованим за замовчуванням, відхиляючись від діагностичної категорії, карантину для відновлення, або вимагають власника-затвердженого ремонту даних. «Це не аварійно» не є достатнім очікуваним результатом.
Зменшити не вдалося зберегти без втрати помилок
Великі стани гравця важко зрозуміти. Якщо фіксація містить сотні полів і міграція не виходить, розробник може витрачати час на читання не пов'язаних даних. Мінімізація лічильників скорочує фіксацію при збереженні порушеного варіанту. Видаліть групу полів, потроїти однакову детермінатичну міграцію, і зберегти видалення тільки при виникненні несправності. Потім перегородки, усадки значень на межі, і зменшити історію дії, якщо релейувати поведінкові питання.

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






