zisky:
- Schopnosť vytvárať testy jednotiek, integrácie a hraničných prípadov so zmysluplným tvrdením s AI
- Schopnosť systematicky extrahovať pokrytie testov, limitné hodnoty a negatívne scenáre s podporou AI
- Schopnosť overiť, že testy vytvorené AI skutočne overujú správanie a nielen opakujú existujúci kód
Testovanie je mechanizmus, ktorý dokazuje, že softvér sa skutočne správa tak, ako bolo sľúbené. Dobrý testovací balík vám v priebehu niekoľkých sekúnd povie, či zmena niečo pokazí, a poskytne technikovi slobodu konať s istotou. Umelá inteligencia urýchľuje najúnavnejšiu a najviac preskakovanú časť písania testov: generovanie množstva scenárov, bodov zlomu a negatívnych prípadov. Ale je tu záludná pasca: AI môže písať testy, ktoré overia aktuálne (možno chybné) správanie kódu, nie jeho predpokladané správanie; alebo môže produkovať prázdne testy, ktoré vždy prejdú, pričom v skutočnosti nič nekontrolujú. Hodnota testu nie je v tom, či prejde, ale v tom, či skontroluje správnu vec a zmení sa na červenú, keď je nesprávna.
V tejto lekcii sa naučíte, ako vytvoriť jednotkové, integračné a okrajové testy so zmysluplnými tvrdeniami; ako systematicky extrahovať testovacie pokrytie, body prerušenia a scenáre negatívnych stránok; a uvidíme, ako môžete skontrolovať, či testy, ktoré vytvára AI, skutočne potvrdzujú správanie.
Koncepty: Unit testing: Testuje jednu funkciu/triedu izolovane. Integračné testovanie: Testuje, či viaceré časti správne spolupracujú. Assert: Vyhlásenie, ktoré kontroluje, či sa výsledok rovná tomu, čo sa očakávalo; Toto je jadro testu. Pokrytie: Koľko kódu je spustené testami; Vysoké krytie nezaručuje kvalitu.
Vytváranie zmysluplných testov
Dobrý test robí tri veci jasne: nastolí stav, vykoná akciu, potvrdí výsledok. Pri tlači testov pre AI špecifikujte, aké správanie chcete overiť a aké scenáre by malo pokrývať; Inak produkuje povrchné testy, ktoré vždy prejdú.
- Definujte správanie, ktoré sa má testovať. "Čo sa považuje za správne?" Odpovedzte na otázku jasne.
- Požiadajte o typy scenárov. Normálny, limitný, negatívny, chybový stav.
- Importujte zmysluplné tvrdenie. Nenahodilo to len "chybu", ale "vrátilo správnu hodnotu".
- Skontrolujte správnosť testu. Sfarbí test na červeno, keď vedome porušíte kód?
Výzva na vygenerovanie komplexného testu: „Napíšte testy jednotiek pre nasledujúcu funkciu „použiť zľavu (suma, kupón)“. Majte MINIMÁLNE jeden scenár v nasledujúcich kategóriách: (1) normálny platný kupón, (2) body prerušenia (0 suma, 100 % zľava), (3) negatívny (neplatný kupón, záporná suma), (4) hodnota kupónu v každom prípade chyby (CONCRETE len očakávaný prípad). 'spracované'). Pomenujte čitateľné testy.
Výzva na extrakciu hraničnej hodnoty: "Vykonajte analýzu hraničnej hodnoty pre vstupy tejto funkcie. Pre každý parameter extrahujte hodnoty 'tesne na hranici', 'tesne pod hranicou', 'tesne nad hranicou' ako tabuľku. Potom uveďte testovacie scenáre, ktoré pokrývajú tieto hranice. Zatiaľ nepíšte kód, len analýzu a zoznam scenárov. Funkcia: [podpis]"
Upozornenie: Vysoké pokrytie testom (napr. 90 %) nedokazuje, že kód je správny. Pokrytie meria, koľko riadkov bolo vykonaných; nie že tieto riadky prinášajú správny výsledok. Test bez zmysluplného tvrdenia zvyšuje pokrytie, ale nič nezaručuje. Obsah tvrdenia určuje kvalitu, nie počet tvrdení.
Testovanie samotného testu: Logika mutácie
Najpraktickejším spôsobom, ako pochopiť, či test vygenerovaný AI skutočne funguje, je zámerne prelomiť kód (logika testovania mutácií). Obráťte podmienku, urobte znak + -; Ak sa žiadne testy nezmenia na červenú, vaše testy v skutočnosti neudržiavajú toto správanie.
Výzva na testovanie zraniteľnosti: "Povedzte mi, ktoré potenciálne chyby v tomto kóde NEMUSIA zachytiť nasledujúce testy. Navrhnite 5 malých mutácií, ktoré by bolo možné v kóde urobiť (napr. >= namiesto >, - namiesto +) a pri každej uveďte, či by ju zachytili existujúce testy. Pre tých, ktorí neboli zachytení, navrhnite testovanie, ktoré by sa malo pridať. Kód: [kód] Testy: [test]“
Slabá výzva / silná výzva
SLABÝ: "Napíšte test tejto funkcie." (Výsledok: zvyčajne jeden šťastný scenár, slabé tvrdenie; vynechané chyby.) SILNÝ: "Napíšte test tejto funkcie 'passwordStrong'. Pravidlo: aspoň 8 znakov, 1 veľké písmeno, 1 požadovaná číslica. Nasledujúce scenáre zakryte ako SAMOSTATNÉ testy: presne 8 znakov (limit), 7 znakov (pod limitom), žiadne veľké písmená, žiadne dlhé znaky, iba dlhé znaky 100 očakávanú hodnotu true/false v každom teste a pomenujte test podľa toho, čo kontroluje."
Výkonná výzva poskytuje pravidlá a úplné hraničné scenáre. Hraničné páry ako „presne 8/7 znakov“ sú najčastejšími miestami, kde dochádza k chybám (zámena > s >=). Slabá výzva obchádza tieto hranice a prenáša chybu do výroby.
Typy testov a ich použitie
Typ testu
Čo to potvrdzuje?
Príspevok AI
Pozornosť
jednotka
Jedna funkcia/trieda
Rýchlo generuje viacnásobné scenáre
Vyžaduje sa zmysluplné tvrdenie
integrácia
Časti spolupracujúce
Návrh scenára a falošných údajov
Skutočné návykové správanie
ukončiť/prijať
Celý tok používateľov
Zoznam krokov a očakávania
náchylné na krehkosť
regresia
Stará chyba sa nevracia
Testovanie špecifické pre poruchu
Treba pridať ku každej oprave
Mini kufríky
Prípad 1 – Test, ktorý vždy prejde. AI zapíše do funkcie 12 testov a všetky prejdú. Inžinier sa stáva podozrivým a úmyselne skresľuje návratovú hodnotu funkcie; Iba 3 z testov sú červené. Zvyšných 9 testov neobsahuje zmysluplné tvrdenia. Testovanie je posilnené lovením mutácií; skutočná ochrana sa získa v 9 scenároch.
Prípad 2 – Hraničná chyba. Funkcia overenia veku by mala povedať „18 a viac je platné“, ale je napísané >18, čo znamená, že vek 18 je zamietnutý. Chyba sa objaví okamžite pri testovaní, pretože AI generuje scenár „presne 18“ prostredníctvom analýzy bodov zlomu. Jediný limitný test zabraňuje akýmkoľvek skutočným sťažnostiam používateľov.
Prípad 3 – Oprava súčasného správania. Keď sa AI povie, aby „napísala test na základe tohto kódu“, vytvorí test, ktorý akceptuje ako „správnu“ chybu zaokrúhľovania, ktorá už v kóde existuje. Keď inžinier vytlačí test podľa požiadavky (očakávaná správna hodnota) a nie podľa kódu, test sa zmení na červenú a nastane skutočná chyba. Testy by mali byť odvodené z očakávaní, nie z kódu.
Časté chyby
- Nezmyselné tvrdenie. "Nevyhodilo chybu" nestačí; Správna hodnota musí byť overená.
- Zamieňanie rozsahu s kvalitou. Vysoké pokrytie nie je zárukou presných výsledkov.
- Tlač testu podľa kódu. Opravuje aktuálnu chybu na "true"; Testy by mali vychádzať z očakávaní.
- Preskakovanie limitných hodnôt. Zámena > s >= je najčastejšou chybou; musia byť testované hraničné páry.
- Nekontroluje samotný test. Test, ktorý sa pri porušení kódu nerozsvieti načerveno, neposkytuje ochranu.
V súhrne
Dobrá testovacia sada je kľúčom k vykonávaniu zmien s istotou. AI rýchlo generuje množstvo scenárov, hraníc a negatívnych situácií; Ak však odvodzuje testy z kódu a nie z požiadaviek, môže opraviť existujúce chyby alebo napísať nezmyselné testy, ktoré vždy prejdú. V každom teste uveďte konkrétnu očakávanú hodnotu, zahrňte viazané páry a overte, či vaše testy skutočne chránia úmyselným porušením kódu. O kvalite rozhoduje obsah tvrdenia, nie počet rozsahov.
Aplikačná úloha
Vyberte funkciu a nechajte ju vygenerovať testy v štyroch kategóriách (normálne, limitné, negatívne, chybové) s komplexnou výzvou na generovanie testu; V každom teste uveďte konkrétnu očakávanú hodnotu. Potom spustite výzvu na testovanie zraniteľnosti, navrhnite 5 malých mutácií v kóde a spustite testy, aby ste skontrolovali, ktoré zachytili. Pridajte nový test na aspoň jednu mutáciu, ktorá nebola zachytená, a ukážte, že je teraz v červených číslach.
kontrolný zoznam
- [ ] Testy som vytlačil na základe očakávaného/správneho správania, nie na základe kódu.
- [ ] Pokryl som normálne, limitné, negatívne a chybové scenáre.
- [ ] V každom teste som tvrdil konkrétnu očakávanú hodnotu.
- [ ] Testoval som hraničné páry (tesne nad-pod / tesne nad-dole).
- [ ] Úmyselným prelomením kódu som potvrdil, že testy sa zmenili na červenú.
- [ ] Pridal som nový test na nezistené mutácie.