Testování čistých účtů minulo důležitou vadu
Nový Unity build může vypadat skvěle, když začíná s prázdným profilem. Čerstvý účet nemá žádná pole v důchodu, polohotové questy, cached katalog reference, staré inventury zásobníky, přerušené nákupy, nebo hodnoty, které byly platné podle dřívějších pravidel. To proto dokazuje pouze to, že nový formát může vytvořit nový stav. To říká velmi málo o tom, zda hra může bezpečně přenášet hráče ze včerejšího světa do dnešního.
Migrační práce by měla začít silnější otázkou: může tento přesný historický stav vstoupit do současné budovy, zachovat význam, na kterém stále záleží, a buď se stát platným současným stavem, nebo selhat způsobem, který je užitečný k diagnostice? To je otázka produktu stejně jako serializer otázka. Pole může deserializovat úspěšně, zatímco stále porušuje pravidlo progrese, ukazující na chybějící obsah, nebo změna nároku na nákup. Načítání bajtů nestačí.
Tento článek popisuje lokální-první zkušební proces. Je to záměrně není slib, že jeden nástroj může pochopit každé Unity serialization nastavení, backend, nebo integrace platformy. Unity datových modelů se liší, a hra může přidat své vlastní šifrování, cloud synchronizace, binární formát, nebo vlastní adaptéry. Trvalá část je testovací disciplína: zachovat historické tvary, kopírovat je před mutací, aby migrace cesta explicitní, a zkontrolovat herní invarianty po každé hranici.
Vybudovat historický státní korpus
Zacházení staré šetří jako verze corpus, ne jako volné soubory předávané v chatu. Každý přípravek potřebuje stabilní identifikátor, verze, která ho vytvořila, krátký štítek scénáře, prohlášení o formátu, a klasifikace soukromí. Štítek scénáře záleží na tom, protože migrující suite by měly zahrnovat smysluplné stavy, a to nejen náhodný JSON. Příklady zahrnují nový hráč, hráč na hranici kapitoly, inventář na svém limitu stack, přerušený tutorial, stará událost odměna, uživatel s volitelným kosmetickým obsahem, a profil, který záměrně obsahuje neplatné dědictví kombinaci.
Používejte shodné pracovní kopie. Běžec zkoušky by při pokusu o migraci nikdy neměl přepsat zdrojovou fikturu. Kopírovat fikturu do dočasného pracovního adresáře, zaznamenat svůj kontrolní součet nebo obsah hash, spustit adaptér, a udržet výsledný výstup odděleně. To změní překvapivý výsledek na důkaz, že někdo jiný může přehrát. To také zabraňuje testu, aby tiše zlepšit svůj vlastní vstup, dokud původní problém zmizí.
Udržet data výrobních přehrávačů mimo obecný vývojový adresář fiktury. Historický corpus může být syntetický, souhlasný, pečlivě redigován, nebo generován z deterministických scénářů. Klíčem je, že uchovává strukturální a sémantické hrany případy, na kterých záleží. Soukromí není dodatečně: odstranit přímé identifikátory, identifikátory zařízení, kontaktní informace, platební žetony, surové příjmy, a tajemství, než se fiktura stane široce přístupný.
Nakreslete migrační graf před zapsáním převodníku
Verze čísla nejsou migrační plán. Hra se může pohybovat od 1 do 2, 2 do 3, a 3 do 4, Pak se setkat s hráčem, který přeskočil přímo z 1 do 4. To může poslat hotfix, který mění pouze vnořený inventární záznam, nebo odejít do důchodu pole, které starý obsah stále očekává. Graf činí tyto volby viditelné: každý uzel je schema nebo sémantické verze; každá hrana je explicitní transformace nebo úmyslné odmítnutí; každá hrana má předpoklady a postpodmínky.
Pro každou podporovanou startovní verzi rozhodněte, zda herní řetězce sousedních transformací, používá přímou transformaci, nebo vyžaduje service- side upgrade před zatížením klienta. Nenechávejte přeskočené verze na cokoliv, co se stane, když pole chybí. Řetěz může být bezpečnější, když každý krok je malý a testovaný. Přímá transformace může být bezpečnější, když meziformáty nebyly nikdy určeny k pozorovatelné. Oba přístupy potřebují jasné vlastnictví a opakovatelné fixace.

Graf by měl obsahovat více než serializovaný typ. Závislost na obsahu, konfigurační verze, funkce vlajky, které ovlivňují interpretaci, a aktuální verze aplikace. Uložit může být syntakticky proud, ale neplatný, protože referenční položka již neexistuje nebo pravidlo změnilo význam. To jsou hranice kompatibility, ne otravné hrany případy.
Aby save- load zpáteční cesty pozorovatelné
Jakmile fiktura vstoupí do migrační cesty, provede celou zpáteční cestu: načíst historický vstup, migrovat jej, vytvořit in- game model, uložit jej pomocí současného spisovatele, pak načíst, že aktuální výstup znovu. První zatížení kontroluje, zda historický záznam může vstoupit do systému. Druhý zatížení kontroluje, zda současný spisovatel vytvořil stabilní, samo-konzistentní výsledek. Porovnejte stav po prvním a druhém zatížení podle sémantických pravidel, nejen syrové byte rovnost.
Syrová rovnost je často nesprávné tvrzení. Nové chyby mohou být přidány, pořadí pole se může změnit, časové razítka mohou být obnoveny, a sbírky mohou obdržet stabilní objednávání. Definovat normalizátor pro hodnoty, které jsou záměrně non-semantic, pak porovnat zbytek. Normalizátor sám si zaslouží přezkum; nesmí se stát deka ignorovat seznam, který skrývá skutečnou ztrátu. Dobré srovnání zprávy, které pole byly přidány, odstraněny, transformovány, nebo záměrně ignorovány.
Výsledek testu by měl pojmenovat první neplatný stav. Má-li migrační řetězec tři přechody, nenahlašte pouze to, že konečné zatížení selhalo. Zachyťte stát po každém kontrolním bodu, potvrďte ho, a zastavit na nejbližší hranici, která porušuje invariantní. Tato lokalizace převádí vágní "staré uložit rozbité" hlášení do specifické migrační hrany, fiktury a státní rozdíl.
Expresní herní invarianty
Obecný migrační postroj nemůže vědět, co progrese znamená v konkrétní hře. Hra musí poskytnout své vlastní invarianty. Napište je v jazyce, který spojuje s výsledky hráče: úroveň je v aktuálním rozsahu; inventární množství je non-negativní a ohraničené; každá vlastněná položka má známou definici nebo explicitní odkaz; dokončené tutoriální pobyty dokončeny; měna je konečný; odkaz na hledání patří do aktuálního katalogu; nárok je jedinečný; svět semínko a generovaný světový stát souhlasí.
Oddělte invarianty do vrstev. Strukturální invarianty odpověď, zda jsou požadovaná pole a typy existují. Referenční invarianty odpověď, zda ID poukazují na známé definice. Domain invariants odpověď, zda hodnoty dodržovat pravidla hry. Bezpečnostní invarianty odpověď, zda data je konečný, ohraničený, a bezpečné zobrazení. Když fixní selže, vrstva řekne týmu, zda potřebuje serializer změnu, katalogový adaptér, rubeset rozhodnutí, nebo politiky obnovy.
Použijte deterministické mutace, aby corpus pracovat těžší. Začněte od známého fixture a záměrně odstranit pole, duplikovat inventář ID, nahradit katalog reference, přeskočit verzi, přepsat akční seznam, nebo změnit mezní množství. Každá mutace by měla mít očekávaný výsledek: migrovat s dokumentovanou výchozí, odmítnout s diagnostickou kategorií, karanténa pro obnovu, nebo vyžadují vlastní- schválené opravy dat. "Nehavaruje" není dostatečný očekávaný výsledek.
Snižte selhávající úsporu bez ztráty chyby
Velké stavy hráčů je obtížné pochopit. Pokud fiktura obsahuje stovky polí a migrace selže, vývojář může strávit hodiny čtením nesouvisejících dat. Minimalizace protistrany snižuje fikturu při zachování porušené invariantní. Odstranit skupinu pole, znovu vyzkoušet stejné deterministické migrace, a udržet odstranění pouze tehdy, když selhání stále dochází. Pak rozdělení sbírky, zmenšit hodnoty směrem k hranicím, a snížit historii akce, pokud přehrát chování záleží.

Redukce vyžaduje reprodukovatelnost. Uzamkněte hašiš, verzi migrace, verzi adaptéru, deterministické semínko, relevantní konfigurační snímek, a očekávaný invariant. Pokud se životní prostředí změní během každé rezkoušky, reduktor může vytvořit menší stav pro jiný problém. Udržujte REPLAY manifest s těmito vstupy a sledovaný výsledek. Výstup není jen menší soubor, je to regresní případ, který může provést někdo jiný.
Generované regresní fixace by měly vstoupit do stejné revizní cesty jako ručně autorované. Dejte každému fixaci stabilní název, krátké vysvětlení selhání, invariantní to zachová, a očekávané klasifikace. Regresní fixace je cenný, protože to dělá dříve překvapivé hranice rutina. Nemělo by se stát skrytým zdrojem údajů produkčního hráče nebo catch-vše pro nevysvětlené selhání.
Nacvičte to na informátora, aniž by to bylo hlučné.
Spustit rychlý reprezentativní podmnožina na každé relevantní změny: aktuální migrační hrany, high-risk historické stavy, a malý soubor deterministických mutací. Spustit kompletní corpus na plánovanou práci, uvolnění kandidáta, nebo změna, která se dotýká serializace, progrese, katalog interpretace, cloud synchronizace, nebo save- formát kód. Shard by fixture rodina nebo migrační hrana spíše než zaslání každý test přes jednu dlouhou sekvenci.
CI výstup by měl být stručný, ale kontrolovatelný. Hlásit ID fiktury, start a cílové verze, migrační hrana, invariantní vrstva, první neplatný kontrolní bod, a cesta k vybroušený artefakt nebo rozdíl. Vyhněte se tisku plný obsah profilu v protokolech. Pokud je selhání nové, zachovejte minimální informace potřebné pro reprodukci místně; pokud se očekává, zaznamenávat, že klasifikace tak vydání není tiše normalizovat známé riziko.
Rozhodnutí o vydání by mělo uvádět, co důkazy znamenají. Provedení migrace testy podporují ohraničené tvrzení: testované corpus a deklarované cesty se choval tak, jak se očekává v tomto prostředí. Neprokáží, že každý hráč uložit, zařízení, nebo externí služba se bude chovat stejně. Týmy stále potřebují Rollback plány, customer- podpora manipulace, a sledování, že dodržování soukromí.
Praktický kontrolní seznam
- Udržujte verzi historického corpus s štítky scénářů a klasifikací soukromí.
- Kopírovat vstupy před migrací a zachovat hashes pro zdroj a výstupní artefakty.
- Nakreslete podporované migrační hrany, včetně politiky pružné verze a výslovné odmítnutí.
- Potvrďte strukturální, referenční, doménové a bezpečnostní invarianty po každém kontrolním bodu.
- Round- trip migroval výstup prostřednictvím současného spisovatele a čtenáře.
- Použijte deterministické mutace k testování chybějících polí, duplikovaných záznamů, vysloužilého obsahu a hraničních hodnot.
- Snížit reprodukovatelné poruchy do revidovaných regresních fixací s replay manifesty.
- Spustit podsety se zaměřením na rizika nepřetržitě a kompletní corpus před uvolněním citlivých změn.
- Udržujte záznamy a artefakty zredigované; nepřeměňujte informátor do archivu dat přehrávače.
Často kladené otázky
Potřebujeme zachránit skutečné hráče, abychom otestovali migraci?
Ne. Reálné historické tvary jsou užitečné, ale corpus může být syntetický nebo pečlivě zredigován. Záleží na tom, zachovat složité kombinace stavu: v důchodu obsah, dlouhá progrese, přerušené přechody, volitelné údaje, a hodnoty na smysluplné hranice. Je-li výrobní údaje použity k objevení hrany pouzdro, odvodit bezpečnou fikturu, která si ponechá pouze majetek pod zkouškou.
Měla by každá stará verze zůstat podporována navždy?
Ne nutně. Podpora je produkt a provozní rozhodnutí. Důležité je, aby hranice explicitně: které verze migrují, které vyžadují dřívější aktualizaci, které jsou zamítnuty, a jak hráč je informován. Nezdokumentovaná náhodná cesta je nejméně bezpečná volba, protože není spolehlivě podporována ani jasně odmítnuta.
Může Serializer test nahradit herní testy?
Ne. Serializer testy stanoví, že data lze číst a psát podle deklarovaných tvarů. Gameplay a doménové testy stanoví, že výsledný stav má smysl v aktuálním rulesetu. robustní migrace zkouška potřebuje jak, plus přezkum obsahu a konfiguračních referencí, které ovlivňují význam uložených hodnot.
Jaká je zde úloha Persistium?
Persistium je in- development local- first conformation product family. Pokyny v této poznámce jsou praktické technické poradenství, ne tvrzení, že veřejný produkt Persistium je k dispozici nebo že diagnostikoval skutečné údaje o zákaznících. Jeho směr kontinuity zkoumá druh explicitní migrace, přehrávání, porovnávání a redukce, jak je popsáno výše.






