Jednotka 9 / 11

Regresní testování, údržba testů a boj s křehkými testy

zisky:

  • Pochopit účel regresního testování a umět vybírat testy a vytvářet případy regrese podle změn s umělou inteligencí
  • Schopnost diagnostikovat základní příčiny křehkých testů (načasování, závislost na pořadí, sdílený stav, externí závislost) a aplikovat trvalá řešení bez potlačení příznaku
  • Schopnost zachovat disciplínu při spouštění úplného balíčku před vydáním a zároveň udržovat regresní sadu rychlou, nezávislou a spolehlivou díky eliminaci duplicitního testování

Software se neustále mění; Každá nová funkce, každá oprava může rozbít něco, co dříve fungovalo. Následné narušení dříve fungující funkce se nazývá regrese. Regresní testování znovu testuje stávající funkčnost s každou změnou, aby zachytila ​​tato degradace. Postupem času se tyto testovací sady rozrůstají – tisíce testů – a vznikají dva velké problémy: sada se zpomaluje a nespolehlivé testy – nespolehlivé testy, které někdy projdou a někdy selžou ve stejném kódu – ničí důvěru týmu ve výsledky testů. Umělá inteligence (AI) je mocným pomocníkem při udržování regresní sady dobře udržované, rychlé a spolehlivé. Ústřední varování však zůstává: I když AI může nabídnout, že „projde“ křehkým testem, často může vytvořit záplatu, která zakryje skutečnou chybu. Vaším úkolem je najít hlavní příčinu nestability, ne potlačit symptom.

Základní příčiny křehkých testů

Křehké testování je nejzákeřnější problém testování: je nespolehlivé, zda projde, nebo selže, což tlačí tým do zvyku „muselo se to zaseknout, spusťte to znovu“ — a tento zvyk jednoho dne bude skutečnou chybu ignorovat jako „šupinkovou“. Hlavní příčiny:

  • Podmínka časování/závodu: Test kontroluje výsledek, aniž by čekal na dokončení operace. Nejčastější důvod.
  • Závislost na pořadí: Testy závisí na datech, která si navzájem zanechají; Zlomí se při změně pořadí.
  • Sdílený případ: Více testů používá stejná testovací data/uživatele, konfliktní.
  • Externí závislost: Skutečná síť, služba třetí strany, systémový čas, náhodná hodnota.
  • Rozdíl prostředí: Přepne na místní, zůstane v CI (prostředí kontinuální integrace).
Upozornění: Absolvování křehkého testu „několikanásobným opakováním“ často maskuje skutečnou chybu souběžnosti. Opakování je diagnostický nástroj, nikoli léčba. Nejprve najděte hlavní příčinu; Používejte opakování pouze jako poslední možnost pro zdokumentovanou, skutečně vnější nestabilitu.

Testovací údržba: udržování zdravého obalu

Regresní apartmá je jako zahrada; Pokud se o něj nestaráte, převezme ho plevel. AI pomáhá se třemi úkoly údržby:

1. Duplicitní/zbytečné testovací čištění. Postupem času se nahromadí velké množství případů testování stejné věci. AI navrhuje seskupování a slučování podobných testů.

2. Diagnostika křehkého testu. Dáte AI testovací kód a vzorec nestability; navrhne možné základní příčiny a trvalé řešení.

3. Výběr/upřednostňování testu. Spustit celý balík s každou změnou je drahé. Pomocí analýzy dopadu testu (výběr pouze relevantních testů na základě změněného kódu) AI doporučuje, které testy by měly být spuštěny jako první. Nezbytností je však kompletní balíček předběžné verze.

Karanténa: správné řízení křehkého testování

Zjistili jste, že test je křehký, ale nemáte čas hned odstranit hlavní příčinu. co dělat? Existují dva špatné způsoby: test úplně smazat (toto chování již není vůbec zachováno) nebo jej umlčet opakovaným pokusem (zakrýt skutečnou chybu). Správným způsobem je karanténa (dočasné oddělení křehkého testu od hlavního balíčku a jeho sledování v samostatném seznamu). Testování v karanténě nebrání sloučení verzí, ale zůstává viditelným dluhem a pravidelně se řeší. Kritickým bodem je toto: karanténa je čekárna, ne odpadkový koš. Pokud se seznam karantény rozrůstá, je to alarm, že testovací zdraví týmu se zhoršuje. Umělá inteligence může pravidelně kontrolovat váš seznam karantény a seskupovat jej podle vzorců hlavních příčin; Umožňuje kolektivní řešení odhalováním společných příčin, jako například „všech 6 testů je připojeno ke stejnému uživateli sdíleného testu“.

Tip: Ke každému karanténnímu záznamu přidejte „vlastníka“ a „datum poslední kontroly“. Opuštěná karanténa se stává trvalou skládkou; Křehké testy tam žijí věčně, protože to nikoho nezajímá.

Tabulka regresní strategie

Stav

strategie

Role AI

drobná oprava

Postižená oblast + kouřový test

Vyberte příslušné testy

nová funkce

Související modul + integrace

Navrhněte nový případ regrese

velký refaktor

Kompletní regresní balíček

Analýza mezery v pokrytí

předběžné vydání

Kompletní balení + průzkum

Odhad priority a trvání

Naléhavá živá oprava

Zaostřeno + kritická cesta

Minimální bezpečná testovací sada

Slabá výzva / Silná výzva

Slabý: "Tento test někdy selže, opravte to."
Silný: "Tento test selže ve 3 z 10 běhů, kód se nezměnil. Diagnostikujte hlavní příčinu nestability: může to být načasování/závod, závislost na objednávce, sdílený stav, externí závislost nebo rozdíl v prostředí. Ukažte, který řádek v testu ukazuje na každou možnou příčinu. Navrhněte trvalé řešení; NEnavrhujte řešení potlačující symptomy, jako je 'přidat opakování' — pokud je nevyhnutelné.]: [chyba nebo kód jasně zapište.]

Výkonná výzva; směruje diagnózu na hlavní příčinu a výslovně zakazuje potlačení symptomů.

Čtyři kopírovatelné šablony

1) Diagnostika křehkého testu:

Tento testovací kód někdy projde a někdy selže beze změny. Uveďte kandidáty hlavní příčiny (rasa, závislost na pořadí, sdílený stav, externí závislost, čas/náhodnost, rozdíl prostředí) a u každého ukažte řadu důkazů v testu. Navrhněte trvalé řešení; označte potlačující řešení, jako je opakování, jako poslední možnost a s odůvodněním. Test: [kód] / Vzor nestability: [kolikrát za kolik běhů]

2) Navrhněte případ regrese:

Byla provedena následující změna: [shrnutí změn/PR]. Uveďte AKTUÁLNÍ chování, která by tato změna narušila, a pro každé navrhněte případ regresního testu. Zvláště zvýrazněte oblasti vedlejších účinků a sdílených závislostí.

3) Vyčištění duplicitního testu:

Podívejte se na testovací sadu níže. Seskupit duplicitní nebo překrývající se případy, které testují stejné chování; Navrhněte, které si mám ponechat a které zkombinovat pro každou skupinu. Varujte, pokud hrozí ztráta krytí. Testy: [seznam/kód]

4) Výběr testovacího efektu:

Následující soubory/funkce se změnily: [seznam]. Ze stávající sady testů vyberte a zdůvodněte testy, které potřebuji spustit jako první (ty, které jsou přímo/nepřímo spojeny se změněným kódem). Poznámka: Připomeňte mi, že stále poběžím celou sadu před vydáním.

tři mini pouzdra

Případ 1 – Skutečná chyba zakrytá opakováním. Jeden tým přidal 3 pokusy k občasnému zbývajícímu testu výplaty; Test teď vždy „prošel“. Použitím „diagnostiky křehkého testu“ bylo zjištěno, že nestabilita pochází ze skutečného závodu: při vysoké zátěži bylo potvrzení platby někdy zpracováno dvakrát. Celé měsíce Retry zakrýval chybu, která mohla mít za následek skutečnou ztrátu peněz naživo. Hlavní příčina opravena, opakování odstraněno.

Případ 2 – Balíček se zmenšil, rychlost se zvýšila. Regresní sada 1400 testů trvala 55 minut. Při „čištění duplicitních testů“ se ukázalo, že 380 testů bylo duplicitních nebo pokrytých; sloučeny. Balíček se zkrátil na 900 testů, čas se zkrátil na 34 minut, krytí se měřitelně nezkrátilo. Rychlejší zpětná vazba povzbudila tým k častějšímu testování.

Případ 3 – Závislost na objednávce. Test by vždy prošel lokálně, ale náhodně by selhal v CI. Diagnostika AI ukázala, že test závisel na uživateli vytvořeném jiným testem, v CI se zlomil, protože testy probíhaly paralelně/v jiném pořadí. Každý test byl proveden za účelem zjištění vlastních dat; S nerozhodností je konec.

Časté chyby

  • Umlčení křehkého testu opakováním. Zkuste to znovu, aniž byste hledali hlavní příčinu; zakrýt skutečnou chybu.
  • Kultura „znovu uvízla“. Rutinní ignorování červených výsledků; Jednoho dne přeskočí skutečnou chybu.
  • Balíček vůbec neprořezávám. Umožňuje duplicitní testy hromadit se a zpomalovat balík.
  • Závislost mezi testy. Testy jsou založeny na běžném stavu/sekvenci; zdroj nejistoty.
  • Testování pouze změněné části a přeskakování celého balení. Předběžná zkratka; Skryté vedlejší účinky unikají.
  • Spoléhání na vnější závislost. Testy založené na skutečné síti/hodinách/náhodné hodnotě; přirozeně nestabilní.

V souhrnu

Regresní testování zachycuje změny narušující dříve fungující funkce; Ale jak balíčky rostou, pomalost a křehké testování narušují důvěru. Základními příčinami křehkého testování jsou obvykle načasování, závislost na pořadí, sdílený stav a externí závislosti. AI je výkonný pomocník při diagnostice, čištění a výběru testů; Ale potlačení nerozhodnosti opakováním zakrývá skutečné chyby. Najděte hlavní příčinu, udělejte testy nezávislé a deterministické, pravidelně ořezávejte balíček, spusťte celý balíček před vydáním.

Aplikační úkol

Vyberte si test ze svého vlastního projektu, o kterém víte, že je křehký (nebo se zdá být nestabilní). Extrahujte kandidáty hlavní příčiny a ověřte linie důkazů v testu pomocí šablony „diagnostiky křehkého testu“. Identifikujte hlavní příčinu a implementujte trvalé řešení bez opakování. Poté vyberte 10 testů ze svého balíčku a najděte ty, které lze zkombinovat s „vyčištěním duplicitních testů“. Nahlaste, kolik testovacích nestabilit jste vyřešili z jejich hlavní příčiny a kolik zbytečných případů jste odstranili ze sady.

kontrolní seznam

  • [ ] Diagnostikoval jsem hlavní příčinu křehkého testu; Příznak jsem nepotlačil.
  • [ ] Retry jsem považoval za oprávněnou poslední možnost, nikoli za lék.
  • [ ] Testy jsem učinil nezávislými a deterministickými (izolovanými od externích závislostí).
  • [ ] Ořízl jsem duplicitní/nepotřebné testy z regresní sady.
  • [ ] Rozhodl jsem se testovat na základě změny, ale spustil jsem předběžnou verzi celého balíčku.
  • [ ] Každou červenou jsem bral vážně, proti kultuře „zase zaseknout, projít“.