Přeskočit na hlavní obsah

Jak delta ladění změní rozbité uložení na minimální regresní případ

Původní Persistium protipříklad redukční diagram ukazuje velký zlomený stav zúžil do malé reprodukovatelné regresní fixní fixní.

Praktická metoda pro zmenšení reprodukovatelného zlomeného uložení nebo akční sekvence do malé, revideable regresní fixture bez ztráty porušené invariantní.

Rozbitá záchrana je důkaz, ne vysvětlení.

Pokud úspora selže při načítání, hledání zmizí, nebo migrace porušuje pravidlo hry, první artefakt může být obrovský: stovky polí, vnořené sbírky, dlouhá akční historie, obsah snímek, a prostředí, které již neexistuje. Tento artefakt je cenný, protože reprodukuje problém. Je to obtížné, protože to dává vývojáři mnohem více informací, než mohou odůvodnit najednou. Čtení řádek po řádku často produkuje odhady spíše než vysvětlení.

Delta ladění změní cíl. Místo toho, aby požádat osobu, aby spatřit jednu relevantní hodnotu, zeptejte se deterministické předpovědi, zda kandidát stále vykazuje selhání. Pak odstranit nebo zjednodušit části státu, zatímco predikát zůstává pravdivý. Konečným výsledkem je minimální regresní případ: dost malý na přezkoumání, stabilní dost přehrát, a explicitní o invariant, který zůstává porušen.

Minimální neznamená vizuálně malé nebo univerzálně nejmenší. Užitečným cílem je materiálně snížený protipříklad pod ohraničenou cenu. Snižovač může zastavit, když žádná celá skupina může být odstraněna, když je rozpočet na provedení vyčerpán, nebo když je fixní dost pochopitelné, aby se stal regresní test. Zachování majetku záleží více než abstraktní optimální.

Stanovit reprodukovatelnost před snížením

Redukce funguje pouze v případě, že selhání je opakovatelné. Nejprve zachytit přesné predikát: má současný nakladač hodit klasifikovanou chybu, má invariantní vrátit false, má výsledný stav liší sémanticky od očekávaného výsledku, nebo je akční sekvence produkovat neplatný grant? Vyhněte se použití vágní predikce, jako je "hra vypadá špatně." Předpověď musí vrátit stejnou odpověď pro stejné vstupy, nebo reduktor bude pronásledovat hluk.

Zaznamenejte prostředí vedle kandidáta: aplikace budovat nebo odevzdávat, migrace verze, adaptační verze, obsah a konfigurační snímek, deterministické semínko, předpoklady platform, a start fixture hash. Pokud živé hodiny, náhodný zdroj, vzdálená konfigurace aport, nebo pracovník může změnit výsledek, nahradit jej deterministické zkušební hranice nebo záznam to jako explicitní omezení. Snižovač nesmí tajně testovat nové prostředí na každém pokusu.

Pro akce- sekvence selhání, zachovat počáteční stav a objednané akce odděleně. Konečný stav může skrýt operaci, která jej produkovala. Sestava může vyjádřit "start z tohoto profilu, provést těchto sedm požadavků, pak invariant selhává." To oddělení umožňuje reduktor zmenšit pole, sbírky, a akce, aniž by mate jeden druh důkazů pro jiný.

Snížit pole a sbírky v oddílech

Začněte s hrubými oddíly. Rozdělte horní úroveň uložit do skupin pole, odstranit jednu skupinu z pracovní kopie, a spusťte predikci. Pokud selhání přetrvává, udržet odstranění, pokud zmizí, obnovit skupinu a rozdělit ji. To je efektivnější než odstranění jednoho pole najednou z velkého objektu. Pokračovat do vnořené záznamy a sbírky, jakmile je identifikován příslušný region.

Sbírky potřebují zvláštní péči. Výběrové položky, záznamy výhledů, čítače a historie událostí mohou odkazovat na sebe navzájem. Odstranění jednoho záznamu může změnit indexy seznamu, pravidla kapacity, nebo agregátní zůstatky. Normalizace objednávek, kde objednávka není smysluplná, zachovat stabilní identifikátory, kde reference vyžadují, a uveďte, zda chybějící položka by měla být nepřítomna, null, nebo zastoupena výslovným odkazem. Snižovač by neměl proměnit skutečnou migraci vadu v parser chybu způsobenou malformované testovací vstup.

Použijte hodnotu zmenšení po strukturální redukci. Přesunout celá čísla směrem k nule nebo důležité hranice, zkrátit řetězce, nahradit dlouhý identifikátor s bezpečným identifikátorem testu, a snížit časové razítka na stabilní epoch pouze tehdy, když jejich přesná hodnota není podmínkou v testu. Každé zjednodušení musí udržet predikát pravdivý. To často ukazuje, že zjevný komplexní profil chyba je ve skutečnosti "jedna položka v důchodu ID plus kompletní inventář" nebo "jeden záporný čítač po přeskočené verzi".

Původní smršťovací stav vizuální ukazuje rozbité uložení rozdělené, zjednodušené, přehrál, a zachovány jako minimální regresní fiktura.
Redukce střídavě mezi řízeným odstraňováním a deterministickým přehráváním, dokud významné selhání nezůstane v menším stavu.

Snižte akční sekvence, aniž byste změnili jejich význam

Některé poruchy se objeví až po čase: nákup retry po opětovném připojení, úspora po aktualizaci konfigurace, nebo migrace po přerušené tutoriál. Aplikujte stejné rozdělení nápad na akce. Odstranit souměrnou polovinu posloupnosti, přehrát, a udržet odstranění, pokud invariant stále selže. Pak se rozdělí. Zachovat požadované akce nastavení, ale výzva náhodnou navigaci, opakované čtení, a nesouvisející mutace.

Akce by měly mít stabilní parametry a očekávání výsledku. Rekordér, který nahradí každý požadavek s čerstvým náhodným identifikací transakce, již netestuje původní retry sémantika. Rekordér, který odstraňuje počáteční zatížení příznakem může změnit konfigurační kontext. Rekordní akční identita, relevantní vstupy, důvěryhodné versus nedůvěryhodné zdroje, a bod, ve kterém je invariant kontrolován. Tím je konečná posloupnost užitečná jak pro vývojáře, tak QA.

Pokud posloupnost závisí na konměna, zvolte deterministický harmonogram. Zaznamenejte pořadí, ve kterém pracovníci nebo simulované klienti dosáhnou kritických hranic. Pokud k selhání dochází pouze v rámci závodu, test může potřebovat řízenou bariéru, spíše než časové-závislé volání spánku. Cílem není předstírat konměna je jednoduché; je to, aby pozorované provázanost reprodukovatelný dost k odůvodnění.

Zachovat narušené invariant v konečném artefaktu

Malá fiktura bez tvrzení se stává dalším tajemným souborem. Uložit porušený invariant vedle fiktury v jasných termínech: duplikát nároku na jednu identitu transakce, neznámá katalogová reference po migraci, negativní měna, nedostupná dokončená výprava, nebo sémantický nesoulad po zpáteční cestě. Zahrňte očekávanou klasifikaci a zjištěnou. Fiktura by měla selhat z nějakého důvodu, ne jen proto, že se funkce vrací nepravdivá.

Porovnejte před a po stavu sémanticky. Surový rozdíl může obsahovat přepsaná časová razítka, přeřazená pole, generované ID, nebo serializace formátování. Semantický rozdíl zvýrazňuje hodnoty, které ovlivňují invariant. To může oznámit, že položka změnila z platné dědictví zálohování na neznámou ID, nebo že rovnováha byla zvýšena dvakrát pro stejné účetní klíč. Udržujte normalizer úzký a zdokumentovaný; široký normalizer může vymazat velmi závadu reducer je určen k zachování.

Napište replay manifest s fixní cestu, zdrojový hash, redukovaný hašiš, otisk životního prostředí, deterministické semínko, akční sekvence, pokud existuje, predikční název, a očekávaný výsledek. Tento manifest umožňuje jiné osobě znovu případ bez přístupu k původnímu předimenzovanému stavu. To také dělá fikturu vhodnou pro CI, kde minimalizovaný případ by měl být rychlý a jasný, spíše než závislý na soukromém místním stroji.

Poznat, kdy by snížení mělo přestat

Každý předpokládaný běh stojí čas. Některé migrace jsou pomalé, některé scénáře potřebují servisní adaptéry, některé podmínky selhání jsou ochablé, dokud prostředí je pevně stanoveno. Nastavit rozpočty pro pokusy, čas na zdi, a počet artefaktů. Zastavit, když je přípravek dostatečně malý vysvětlit problém, kdy žádný oddíl může být odstraněn bez ztráty selhání, nebo když zbývající práce vyžaduje doménu rozhodnutí, spíše než mechanické zmenšení.

Redukce má limity. Nemůže se rozhodnout, zda by odkaz položka měla mapovat na náhradu, zda výprava v důchodu potřebuje kompenzaci, nebo zda je uložená hodnota legální v přepracovaném hospodářství. To jsou rozhodnutí o produktu. To také nemůže bezpečně snížit zašifrované nebo citlivé údaje kopírováním do širokého nástroje. V těchto případech vytvořte syntetický ekvivalent, který zachovává strukturální stav, nebo udržet omezené šetření v rámci příslušné hranice přístupu.

Nezveřejňujte stav surového hráče jako regresní fixní. Názvy, kontaktní informace, data o příjmu, identifikátory zařízení, přístupové žetony a jakékoli pole, které není potřebné pro predikci. Minimální fixace je příležitostí ke zlepšení soukromí, stejně jako diagnostikovatelnost. Konečný artefakt by měl být bezpečný, aby se do testovacího corpus projektu a dostatečně užitečné, aby se zabránilo opakování.

Praktický kontrolní seznam

  • Definujte deterministické selhání prediktovat před odstraněním jakéhokoliv stavu.
  • Zaznamenejte prostředí aplikace, adaptéru, obsahu, konfigurace, osiva a upevnění.
  • Udržujte počáteční stav a akční sekvenci oddělenou, když se chování v průběhu času rozvine.
  • Snižte nejprve skupiny na nejvyšší úrovni, poté vnořené pole, sbírky a hodnoty.
  • Zachovat reference a strukturální platnost při náročnosti sémantického významu.
  • Použít řízený konměna harmonogram místo času-závislé retry.
  • Uložit porušené invariantní, očekávané klasifikace, sémantický rozdíl, a replay manifest s výsledkem.
  • Zastavit na užitečné ohraničené protipříklad; Neoptimalizovat na neurčito pro teoretickou minimalitu.
  • Redact nebo syntetizovat citlivá data před tím, než přípravek vstoupí do rutinních testů.

Často kladené otázky

Je delta ladění pouze pro havárie?

Ne. Předpověď může být havárie, ale může to být také porušená hra invariant, špatný počet nároků, selhání save- load round trip, odmítnutí migrace klasifikace, nebo nesoulad mezi očekávaným a pozorovaný stav. To je nejužitečnější, pokud komplexní vstup spolehlivě vede k výsledku, který by neměl dojít.

Co když je selhání přerušované?

Nejprve snížit nedeterminismus. Oprava semínka, zachycení konfigurace, izolovat čas a síťové hranice, a kontrolovat konměna. Pokud výsledek zůstává pravděpodobnostní, použijte buthold-based predikovat pouze s péčí a zaznamenávat, že omezení. Stabilní menší scénář je obvykle cennější než velký flaky fixture.

Může reduktor běžet proti produkčním datům?

Rutinní redukce by neměla. Používejte syntetické nebo redigované přípravky a kontrolované prostředí. Omezené vyšetřování incidentů může potřebovat chráněné důkazy, ale to je samostatný operační proces s kontrolou přístupu, retenční pravidla, a přezkumu. Nedělejte regresní suite kopie hráčských dat.

Co tady Persistium tvrdí?

Persistium je ve vývoji jako local- first Spolehlivost produktová rodina. Tato poznámka představuje obecně užitečné redukční pracovní postup a netvrdí, že veřejný výrobek automaticky diagnostikuje svévolné ukládání, sledoval selhání zákazníků, nebo provozuje hostitelskou analytickou službu.

Související systémProzkoumejte Persistium