A nagy törött mentés bizonyíték, nem magyarázat.
Ha egy mentés nem jelenik meg, a küldetés eltűnik, vagy a migráció megsérti a játékszabályt, az első ereklye hatalmas lehet: mezők százai, fészkeltek gyűjtemények, hosszú akciótörténelem, tartalmi pillanatfelvétel, és egy olyan környezet, amely már nem létezik. Ez az ereklye azért értékes, mert reprodukálja a problémát. Nehéz, mert egy fejlesztőt sokkal több információval lát el, mint amennyit egyszerre meg tud magyarázni.
A Delta hibakeresés megváltoztatja a célt. Ahelyett, hogy arra kérnénk egy személyt, hogy szúrja ki az egyetlen releváns értéket, kérdezzen meg egy meghatározó jóslatot, hogy a jelölt még mindig bizonyítja-e a hibát. Ezután távolítsa el vagy egyszerűsítse le az állam egyes részeit, míg az előrejelzés igaz marad. A végeredmény egy minimális regressziós eset: elég kicsi ahhoz, hogy felülvizsgáljuk, elég stabil ahhoz, hogy visszajátsszuk, és explicit legyen a megmaradó változóról.
Minimális nem azt jelenti, vizuálisan kicsi vagy általánosan legkisebb. A hasznos cél egy lényegesen csökkent counterexample határolt áron. A redukáló megállhat, ha nem lehet eltávolítani az egész csoport, amikor a végrehajtási költségvetés kimerült, vagy ha a rögzítés elég érthető, hogy legyen egy regressziós teszt. A tartósított ingatlan többet jelent, mint egy absztrakt optimális.
A redukció előtti reprodukálhatóság megállapítása
A redukció csak akkor működik, ha a hiba megismételhető. Először is rögzítsük a pontos előrejelzést: az aktuális betöltő eldob egy titkosított hibát, egy változatlanul visszatérő hamis, nem különbözik szemantikusan a várt kimenetel, vagy nem egy akciószekvencia eredményez érvénytelen támogatást? Kerüljük egy homályos predikáció használatát, mint "a játék rosszul néz ki". Az előrejelzésnek ugyanazt a választ kell válaszolnia ugyanazokra a bemenetek, vagy a reduktor üldözni fogja a zajt.
Rögzítse a környezetet a jelölttel együtt: application build or commit, migration version, adapter verzió, tartalom és konfiguráció pillanatfelvétel, determinista mag, platform feltételezések, és a kezdő rögzítés hash. Ha egy élő óra, véletlenszerű forrás, távoli konfigurációs fetch, vagy a háttérmunkás megváltoztathatja az eredményt, helyettesíti azt egy determinista vizsgálati határ vagy rögzíti, mint egy explicit korlátozás. A reduktor nem lehet titokban tesztelni egy új környezet minden kísérlet.
A művelet-szekvencia meghibásodások, megőrizni az eredeti állapot és a megrendelt intézkedések külön. A végső állam elrejtheti a művelet, amely létrehozta. A szekvencia beállítás is kifejezi "start from this profile, végre ezt a hét kérést, majd a változatlan". Ez a szétválasztás lehetővé teszi a redukáló zsugorítani mezők, gyűjtemények, és a cselekvések anélkül, hogy összetévesztené az egyik fajta bizonyítékot a másik számára.
A partíciók mezőinek és gyűjteményeinek csökkentése
Kezdje durva partíciókkal. Osszon a felső szintű mentés mezőcsoportokba, távolítson el egy csoportot egy munkapéldányból, és futtassa az előrejelzést. Ha a hiba továbbra is fennmarad, tartsa meg az eltávolítást; ha eltűnik, állítsa vissza a csoportot és ossza el azt. Ez hatékonyabb, mint egy mező törlése egy időben egy nagy objektumról. Folytatni a fészkes feljegyzéseket és gyűjteményeket, amint egy adott régiót azonosítanak.
Gyűjtemények speciális gondoskodást igényelnek. Leltár tételek, keresési rekordok, számlálók, és esemény előzmények utalhatnak egymásra. Eltávolítása egy bejegyzés megváltoztathatja listaindexek, kapacitási szabályok, vagy összesített egyenlegek. Normalizálni rendelés, ahol a megrendelés nem érdemi, megőrzi a stabil azonosítókat, ahol a hivatkozások megkövetelik őket, és azt, hogy egy hiányzó elem hiányzik, nulla, vagy képviseli explicit örökölt defekt. A reduktor nem szabad átalakítani egy valódi migrációs hiba által okozott parser vizsgálati bemenet.
Használja az érték zsugorodása után strukturális csökkentés. Mozgassa egész szám felé nulla vagy egy fontos határ, lerövidíti húrok, cserélje ki a hosszú azonosító biztonságos vizsgálati azonosító, és csökkentse az időbélyegzők egy stabil időszak csak akkor, ha a pontos érték nem a feltétel a vizsgálat alatt. Minden egyszerűsítés meg kell tartani az előrejelzés igaz. Ez gyakran azt mutatja, hogy a látszólagos komplex profilhiba valóban "egy visszavont elem ID plusz egy teljes leltár" vagy "egy negatív számláló után egy kihagyott verzió".

Az akciószekvenciák csökkentése a jelentésük megváltoztatása nélkül
Néhány hiba csak idő után jelenik meg: a vásárlás visszaállítása után egy visszacsatolás, egy mentés után egy konfigurációs frissítés, vagy a migráció egy megszakított bemutató. Alkalmazza ugyanazt a partíciós ötlet cselekvések. Távolítsa el egy összefüggő fele a szekvencia, visszajátszás, és tartsa meg az eltávolítást, ha az invazív még mindig nem sikerül. Ezután spread szükséges beállítási intézkedések, de kihívás véletlen navigáció, ismételt olvasatok, és kapcsolódó mutációk.
A művelet stabil paraméterekkel és elvárásokkal kell, hogy rendelkezzen. Az a redukáló, amely minden kérést új, véletlenszerű tranzakciós azonosítóval helyettesít, már nem teszteli az eredeti retry szemantikát. A redukáló, amely eltávolítja a kezdeti tulajdonság-zászló terhelést, megváltoztathatja a konfigurációs kontextust. Rögzítheti a művelet azonosítóját, a vonatkozó bemeneteket, a megbízható vagy megbízhatatlan forrást, és azt a pontot, ahol a változót ellenőrzik. Így a végső szekvencia mind a fejlesztők, mind a QA számára hasznos lesz.
Ha egy sorozat függ a konvaluta, válassza ki a determinista ütemtervet. Jegyezze fel azt a sorrendet, amelyben a dolgozók vagy szimulált ügyfelek eléri a kritikus határokat. Ha a hiba csak akkor történik egy verseny, a teszt lehet szükség egy ellenőrzött akadály helyett időfüggő alvási hívások. A cél nem az, hogy tettetni konvaluta egyszerű; ez az, hogy a megfigyelt megszakítás elég reprodukálható ahhoz, hogy ok.
Őrizd meg a sértettet az utolsó ereklyében.
Egy kis tartozék állítás nélkül válik egy másik titokzatos fájl. Tárolja a megsértett invariant mellett a rögzítés egyértelmű szavakkal: kétszeres jogosultság egy tranzakció identitás, ismeretlen katalógus hivatkozás után migráció, negatív valuta, elérhetetlen befejezett küldetés, vagy szemantikai eltérés után egy körút. Tartalmazza a várt osztályozás és a megfigyelt egyet. A rögzítés kell hiba okkal, nem csak azért, mert egy függvény visszatér hamis.
Összehasonlítás előtt és után állam szemantikusan. A nyers diff tartalmazhat átírt időbélyegzők, átrendezett tömbök, generált ID, vagy szerializáció formázás. Egy szemantikai diff kiemeli az értékeket, amelyek hatással vannak a változók. Azt jelentheti, hogy egy elem megváltozott egy érvényes örökség visszaesés egy ismeretlen ID, vagy hogy az egyenleg nőtt kétszer ugyanazon főkönyv kulcs. Tartsa meg a normalizer keskeny és dokumentált; egy széles normalizer törölheti a nagyon hiba a reduktor célja, hogy megőrizze.
Írjon egy visszajátszás manifeszt a fixtúra útvonal, forrás hash, csökkentett hasis, környezeti ujjlenyomat, determinista mag, akció szekvencia, ha van, előrejelzés név, és a várt eredmény. Ez a manifeszt lehetővé teszi egy másik személy újrafuttatni az ügyet anélkül, hogy az eredeti túlméretezett állapot. Ez is teszi a rögzítés alkalmas a CI, ahol a minimalizált eset kell gyors és egyértelmű, ahelyett, hogy függ egy privát helyi gép.
Tudd, mikor kell abbahagyni a csökkentést.
Minden előre jelzett futási idő. Néhány vándorlás lassú; néhány forgatókönyv kell szolgáltatás adapterek; néhány meghibásodási feltételek pelyhesek, amíg egy környezet rögzítése. Állítsa be a költségvetéseket kísérletek, falidő, és ereklyék száma. Állítsa le, ha a rögzítés elég kicsi ahhoz, hogy magyarázza a kérdést, amikor nincs partíció eltávolítható anélkül, hogy elveszítené a hiba, vagy ha a fennmaradó munka igényel domain ítélet helyett mechanikai zsugorodás.
Csökkentés korlátai. Nem tudja eldönteni, hogy egy örökhagyó termék térítse-e meg a cserét, hogy a visszavonult küldetésnek kártérítésre van-e szüksége, vagy hogy a megtakarított érték legális-e egy áttervezett gazdaságban. Ezek termékdöntések. Nem tudja biztonságosan csökkenteni a titkosított vagy érzékeny adatokat azáltal, hogy széles eszközzé alakítja át. Ezekben az esetekben hozzon létre egy olyan szintetikus megfelelőt, amely megőrzi a strukturális állapotot, vagy tartsa a korlátozott vizsgálatot a megfelelő hozzáférési határon belül.
Ne tegye közzé a nyers játékos állapot regressziós tartozék. Strip nevek, elérhetőségek, átvételi adatok, eszköz azonosítók, hozzáférés zsetonok, és minden olyan mező nem szükséges az előrejelzett. Minimális rögzítés egy lehetőség, hogy javítsa a magánélet és a diagnosztika. A végső ereklye legyen biztonságos, hogy tartalmazza a projekt teszt corpus, és elég hasznos ahhoz, hogy megakadályozzák az ismétlődés.
Gyakorlati ellenőrzőlista
- Határozza meg a determinista meghibásodást, mielőtt eltávolít bármilyen állapotot.
- Rögzítse az alkalmazás, adapter, tartalom, konfiguráció, vetőmag, és rögzítési környezet.
- A kezdeti állapot- és akciószekvencia legyen elkülönítve, amikor a viselkedés idővel kibontakozik.
- Csökkentse a felső szintű csoportok először, majd fészkelt mezők, gyűjtemények, és értékek.
- Tartózkodási referenciák és strukturális érvényesség, miközben kihívást jelent a szemantikai relevancia.
- Az időfüggő relikviák helyett az ellenőrzött konvalencia-ütemtervet kell használni.
- Tárolja a megsértett invariáns, várható osztályozás, szemantikai diff, és visszajátszás manifeszt az eredménnyel.
- Megáll egy hasznos határolt counterexample; ne optimalizálja határozatlan ideig elméleti minimalitás.
- Redact vagy szintetizálja az érzékeny adatokat, mielőtt a tartozék rutin vizsgálatokba kerül.
Gyakran feltett kérdések
A delta-depolizás csak a balesetekre vonatkozik?
Nem. Az előrejelzés lehet egy összeomlás, de lehet egy megsértett játék túlélő, egy rossz jogosultsági szám, egy sikertelen szabadterhelésű körút, egy elutasított migrációs besorolás, vagy egy eltérés a várt és megfigyelt állapot között. Ez a leghasznosabb, amikor egy összetett bemenet megbízhatóan eredményez egy olyan eredményt, amely nem következhet be.
Mi van, ha a hiba szakaszos?
Először csökkentse a nondeterminizmus. Javítsa a magokat, rögzítés konfiguráció, izolálja az időt és a hálózati határokat, és ellenőrzési konvaluta. Ha az eredmény továbbra is probabilisztikus, használja a csépold- alapú előrejelzés csak gondossággal, és rögzítse, hogy a korlátozás. Egy stabil kisebb forgatókönyv általában sokkal értékesebb, mint egy nagy flaky tartozék.
A redukáló futhat a gyártási adatok ellen?
Rutin redukció nem szabad. Használjon szintetikus vagy redukált rögzítőket és egy ellenőrzött környezet. Korlátozott incidensek vizsgálat lehet szükség védett bizonyíték, de ez egy külön működési folyamat a hozzáférés ellenőrzése, retenciós szabályok, és felülvizsgálat. Ne tegye a regressziós csomag egy másolatot a játékos adatait.
Mit állít itt az Persistium?
Persistium fejlesztés alatt áll, mint egy helyi-első megbízhatósági termék család. Ez a megjegyzés egy általánosan hasznos redukciós munkafolyamat, és nem azt állítja, hogy egy nyilvános termék automatikusan diagnosztizálja önkényes megtakarítások, már megfigyelt ügyfélmulasztások, vagy működik egy hosted elemzési szolgáltatás.







