Jednotka 6 / 12

Automatizace testování a zajištění kvality

zisky:

  • Schopnost vytvářet testy jednotek, integrace a hraničních případů se smysluplným tvrzením s AI
  • Schopnost systematicky extrahovat pokrytí testů, limitní hodnoty a negativní scénáře s podporou AI
  • Schopnost ověřit, že testy vytvořené AI skutečně ověřují chování a neopakují pouze existující kód

Testování je mechanismus, který dokazuje, že se software skutečně chová tak, jak bylo slíbeno. Dobrá sada testů vám během několika sekund řekne, zda změna něco porušuje, a poskytne technikovi svobodu jednat s důvěrou. Umělá inteligence urychluje nejnudnější a nejvíce přeskakovanou část psaní testů: generování velkého množství scénářů, bodů přerušení a negativních případů. Ale je tu záludná past: AI může psát testy, které ověřují aktuální (možná chybné) chování kódu, nikoli jeho domnělé chování; nebo může vytvářet prázdné testy, které vždy projdou a ve skutečnosti nic nekontrolují. Hodnota testu není v tom, zda projde, ale v tom, zda zkontroluje správnou věc a zčervená, když je špatná.

V této jednotce se naučíte vytvářet testy jednotek, integrace a hraničních případů se smysluplnými tvrzeními; jak systematicky extrahovat testovací pokrytí, body přerušení a scénáře negativních stránek; a uvidíme, jak můžete zkontrolovat, že testy, které AI vytváří, skutečně ověřují chování.

Koncepty: Unit testing: Testuje jednu funkci/třídu izolovaně. Testování integrace: Testuje, zda více částí správně spolupracuje. Assert: Prohlášení, které kontroluje, zda se výsledek rovná tomu, co bylo očekáváno; Toto je srdce testu. Pokrytí: Kolik kódu je spuštěno testy; Vysoké krytí nezaručuje kvalitu.

Vytváření smysluplných testů

Dobrý test dělá tři věci jasně: nastoluje stav, provádí akci, tvrdí výsledek. Při tisku testů pro AI určete, jaké chování chcete ověřit a jaké scénáře by mělo zahrnovat; Jinak produkuje povrchní testy, které vždy projdou.

  1. Definujte chování, které má být testováno. "Co se počítá jako správné?" Odpovězte na otázku jasně.
  2. Zeptejte se na typy scénářů. Normální, limitní, negativní, chybový stav.
  3. Importujte smysluplné tvrzení. Nenahodilo to jen "chybu", ale "vrátilo správnou hodnotu".
  4. Zkontrolujte správnost testu. Zbarví se test červeně, když vědomě porušíte kód?

Výzva ke generování komplexního testu: "Napište testy jednotek pro následující funkci 'použij slevu(částka, kupon)'. Mějte ALESPOŇ jeden scénář v následujících kategoriích: (1) normální platný kupon, (2) body přerušení (0 částka, 100% sleva), (3) negativní (neplatný kupon, záporná částka), (4) hodnota očekávané chyby v každém testu (CONCRETE jen očekávaný případ). 'fungoval'). Pojmenujte čitelné testy.

Výzva k extrakci hraniční hodnoty: "Proveďte analýzu hraničních hodnot pro vstupy této funkce. Pro každý parametr extrahujte hodnoty 'těsně na hranici', 'těsně pod hranicí', 'těsně nad hranicí' jako tabulku. Poté uveďte testovací scénáře, které pokrývají tyto hranice. Zatím nepište kód, pouze analýzu a seznam scénářů. Funkce: [podpis]"

Upozornění: Vysoké pokrytí testem (např. 90 %) neprokazuje, že kód je správný. Pokrytí měří, kolik řádků bylo provedeno; ne že tyto řádky poskytují správný výsledek. Test bez smysluplného tvrzení zvyšuje pokrytí, ale nic nezaručuje. Obsah tvrzení určuje kvalitu, nikoli počet tvrzení.

Testování samotného testu: Logika mutace

Nejpraktičtějším způsobem, jak pochopit, zda test generovaný umělou inteligencí skutečně funguje, je záměrné prolomení kódu (logika testování mutací). Obraťte podmínku, vytvořte znaménko + -; Pokud se žádné testy nezbarví červeně, vaše testy ve skutečnosti toto chování neudržují.

Výzva k testování zranitelnosti: "Řekněte mi, které potenciální chyby v tomto kódu NEMUSÍ následující testy zachytit. Navrhněte 5 malých mutací, které by mohly být v kódu provedeny (např. >= místo >, - místo +) a u každé uveďte, zda by ji zachytily stávající testy. Pro ty, kteří nejsou zachyceni, navrhněte testování, které by mělo být přidáno. Kód: [kód] Testy: [test]“

Slabá výzva / Silná výzva

SLABÝ: "Napište test této funkce." (Výsledek: obvykle jeden šťastný scénář, slabé tvrzení; chybí chyby.) SILNÝ: "Napište test této funkce 'passwordStrong'. Pravidlo: alespoň 8 znaků, 1 velké písmeno, 1 číslice povinná. Následující scénáře zahrňte jako SAMOSTATNÉ testy: přesně 8 znaků (limit), 7 znaků (pod limitem), žádná velká písmena, žádné dlouhé znaky 0 pouze mezery, 10 znaků očekávanou hodnotu true/false v každém testu a pojmenujte test podle toho, co kontroluje."

Výkonná výzva poskytuje pravidla a úplné hraniční scénáře. Hraniční páry jako „přesně 8/7 znaků“ jsou nejčastější místa, kde dochází k chybám (záměna > s >=). Slabá výzva obchází tyto hranice a přenáší chybu do výroby.

Typy testů a jejich použití

Typ testu

co to potvrzuje?

Příspěvek AI

Pozor

jednotka

Jediná funkce/třída

Rychle generuje více scénářů

Je vyžadováno smysluplné tvrzení

integrace

Části spolupracující

Scénář a falešný datový koncept

Skutečné návykové chování

ukončit/přijmout

Celý uživatelský tok

Seznam kroků a očekávání

náchylné ke křehkosti

regrese

Stará chyba se nevrací

Specifické testování závad

Mělo by být přidáno ke každé opravě

Mini pouzdra

Případ 1 — Test, který vždy projde. AI zapíše do funkce 12 testů a všechny projdou. Inženýr začne být podezřelý a záměrně zkresluje návratovou hodnotu funkce; Pouze 3 z testů zčervenají. Dalších 9 testů neobsahuje smysluplná tvrzení. Testování je posíleno lovem mutací; skutečnou ochranu získáte v 9 scénářích.

Případ 2 – Hraniční chyba. Funkce ověření věku by měla říkat „18 a více je platné“, ale je napsáno >18, což znamená, že věk 18 je zamítnut. Chyba se okamžitě objeví při testování, protože AI generuje scénář „přesně 18“ pomocí analýzy bodů přerušení. Jediný limitní test zabraňuje jakýmkoli skutečným stížnostem uživatelů.

Případ 3 — Oprava aktuálního chování. Když je AI řečeno, aby „napsala test na základě tohoto kódu“, vytvoří test, který akceptuje jako „správnou“ chybu zaokrouhlení, která již v kódu existuje. Když technik vytiskne test podle požadavku (očekávaná správná hodnota) a ne podle kódu, test zčervená a dojde ke skutečné chybě. Testy by měly být odvozeny z očekávání, nikoli z kódu.

Časté chyby

  • Bezpředmětné tvrzení. "Nevyhodilo chybu" nestačí; Správná hodnota musí být ověřena.
  • Záměna rozsahu s kvalitou. Vysoké pokrytí není zárukou přesných výsledků.
  • Tisk testu podle kódu. Opravuje aktuální chybu na "true"; Testy by měly vycházet z očekávání.
  • Přeskakování mezních hodnot. Záměna > s >= je nejčastější chybou; musí být testovány hraniční páry.
  • Nekontroluje samotný test. Test, který při porušení kódu nezčervená, neposkytuje ochranu.

V souhrnu

Dobrá testovací sada je klíčem k provádění změn s jistotou. Umělá inteligence rychle generuje množství scénářů, hranic a negativních situací; Pokud ale odvozuje testy z kódu spíše než z požadavků, může opravit existující chyby nebo napsat nesmyslné testy, které vždy projdou. V každém testu uveďte konkrétní očekávanou hodnotu, zahrňte vázané páry a ověřte, že vaše testy skutečně chrání záměrným porušením kódu. Kvalitu určuje obsah tvrzení, nikoli počet rozsahů.

Aplikační úkol

Vyberte funkci a nechte ji vygenerovat testy ve čtyřech kategoriích (normální, limitní, negativní, chyba) s komplexní výzvou ke generování testu; Nechte v každém testu prosadit konkrétní očekávanou hodnotu. Poté spusťte testovací výzvu k vyhledání zranitelnosti, navrhněte 5 malých mutací v kódu a spusťte testy, abyste zjistili, které z nich chytí. Přidejte nový test na alespoň jednu mutaci, která nebyla zachycena, a ukažte, že je nyní v červených číslech.

kontrolní seznam

  • [ ] Testy jsem vytiskl na základě očekávaného/správného chování, nikoli na základě kódu.
  • [ ] Pokryl jsem normální, limitní, negativní a chybové scénáře.
  • [ ] V každém testu jsem tvrdil konkrétní očekávanou hodnotu.
  • [ ] Testoval jsem hraniční páry (těsně nad-pod / těsně nad-pod).
  • [ ] Záměrným porušením kódu jsem potvrdil, že testy zčervenaly.
  • [ ] Přidal jsem nový test na nedetekované mutace.