zisky:
- Schopnosť vytvárať testovanie jednotiek, okrajové prípady a analýzu medzier pokrytia pomocou AI
- Schopnosť vytlačiť testovacie očakávania založené na špecifikácii, nie na aktuálnom správaní kódu
- Schopnosť otestovať, či test skutočne chráni vložením chýb
Písanie testov je jednou z najhodnotnejších úloh, ktorú väčšina vývojárov odkladá. Dobrá testovacia sada je dôkazom, že kód funguje podľa očakávania, a je záchranným lanom pre budúce zmeny. Problém je v tom, že písanie testov je opakované a časovo náročné – presne ten druh práce, kde AI žiari. Má to však háčik: AI často testuje existujúce správanie kódu, nie správanie, aké by malo byť. Riadenie tohto rozdielu je podstatou tejto jednotky.
V tejto lekcii sa naučíte testovanie jednotiek (testovanie, ktoré testuje funkciu samostatne, izolovane), testy hraničných prípadov a generovanie testovacích údajov pomocou AI; odstránenie medzier v pokrytí testov; a prečo je slepé dôverovať testom AI nebezpečné.
Dve strany testovania: Oprava správania vs. overenie
Test môže slúžiť na dva rôzne účely. Prvým je overenie: testuje, či je kód správny, či je v súlade so špecifikáciou. Druhým je regresná ochrana: zmrazí dnešné správanie kódu, takže ak ho niekto zajtra náhodou zmení, test sa preruší a upozorní.
AI je v tom druhom veľmi dobrá; Pozerá sa na kód a generuje prípady, ktoré testujú, „čo práve robí“. Ak je však kód od začiatku nesprávny, AI môže toto nesprávne správanie označiť ako „správne“. Takže musíte skontrolovať tvrdenie každého testu, ktorý AI vygeneruje: „Kód vráti 42 a test očakáva 42“ neznamená, že 42 je správna odpoveď.
Upozornenie: Ak AI prejde testom, neznamená to, že kód „funguje“; znamená to len „správa sa tak, ako AI očakáva“. O tom, či je očakávanie správne alebo nie, sa rozhodnete na základe špecifikácie.
Krok za krokom: Písanie robustných testov s AI
- Uveďte špecifikáciu, nielen kód. Ak pridáte informáciu „Táto funkcia by to mala urobiť“, AI môže napísať správne očakávanie; Ak zadáte iba kód, otestuje aktuálne správanie.
- Požiadajte o okrajové puzdrá. Prázdne, nulové, nulové, záporné, príliš veľké, zlý formát, súbežnosť – výslovne sa hlásime k šťastnej ceste.
- Zadajte testovací rámec a štýl. "použitie pytestu", "Usporiadať-Konať-Presvedčiť vzor", "nech každý test otestuje jednu vec" atď.
- Skontrolujte očakávania (tvrdenie). Porovnajte so špecifikáciou, ktorú každé tvrdenie kontroluje na správnu hodnotu.
- Zatvorte medzery v rozsahu. Uveďte existujúce testy a opýtajte sa "ktoré vetvy a prípady neboli testované?" prinútiť sa pýtať; potom overte vykonané dodatočné testy.
Tri mini puzdrá
Prípad 1 – Pokrytie od 52 % do 85 %. Testovacie pokrytie jedného servisného modulu bolo 52 %. Tím poskytol existujúce testy AI, nechal si vypísať netestované pobočky a vygenerovať pre ne testy. Po preskúmaní človekom sa pokrytie zvýšilo na 85 %; V tomto procese AI odhalila skutočnú chybu (cestu, ktorá vrátila nesprávny kód chyby) vo vetve chyby, ktorá nebola nikdy predtým testovaná.
Prípad 2 – Pasca na fixáciu falošných očakávaní. Funkcia zaokrúhľovania peňazí bola v skutočnosti nesprávna; Namiesto zaokrúhlenia 2,675 na 2,67 bolo zaokrúhlené 2,67 namiesto 2,68. Umelá inteligencia sa pozrela na kód a napísala claim round_money(2,675) == 2,67 – chyba sa zmrazí ako „pravda“. Keď si vývojár prečítal špecifikáciu, opravil očakávania a zachytil skutočnú chybu. Rozdiel prinieslo testovanie pravidla, nie kódu.
Prípad 3 – Explózia v hraničnom stave. Keď požadujete od AI iba „okrajové prípady“ pre funkciu rozsahu dátumov; Vytvoril 8 prípadov, ako napríklad začiatok=koniec, spätný interval, priestupný rok 29. februára, rôzne časové pásma a nulový interval. Dva z nich (obrátený odstup a priestupný rok) v skutočnosti spôsobili chybu. Ručné zvažovanie týchto prípadov sa často vynecháva; AI sa tu stala partnerom „edge-case brainstormingu“.
Štyri kopírovateľné šablóny
Generovanie testu na základe špecifikácie:
Úloha: Vývojár, ktorý píše testy. Rámec: {{pytest/JUnit/Jest...}}.Čo by mala funkcia robiť (špecifikácia): {{pravidlo}}Napíšte testy pre nasledujúcu funkciu. Napíšte očakávania podľa špecifikácie, NIE podľa aktuálneho výstupu kódu. Šťastná cesta + pridajte aspoň 4 okrajové prípady. Nechajte každý test otestovať jednu vec, použite popisný názov. {{funkcia}}
Brainstorming Edge case:
Uveďte prípady okrajov/zlyhaní, ktoré by sa mali vyskúšať pri testovaní tejto funkcie (null, null, body prerušenia, zlý formát, súbežnosť, externá chyba). Pre každý prípad: vstup, očakávané správanie. Zatiaľ NEPÍŠTE kód, len ho uveďte.{{funkcia}}
Analýza medzery pokrytia:
Nižšie sú uvedené funkcie a dostupné testy. Ktoré vetvy, podmienky a prípady neboli testované? Vymenujte nedostatky a nové testy píšte len na nedostatky. Neopakujte existujúce. Funkcia:{{function}}Testy:{{existujúce_testy}}
Testovacie údaje / generovanie falošných objektov:
Generujte realistické testovacie údaje pre testy {{funkcie/služby}}: platné vzorky, hraničné vzorky a neplatné vzorky oddelene. Navrhnite jednoduché simulované správanie pre externú závislosť {{X}}. Používanie skutočných dôverných údajov/PII; Vytvorte falošné údaje.
Slabá výzva / Silná výzva
Slabé: "Napíšte test pre túto funkciu."
Silné: "s pytestom. Funkcia apply_discount(total, percent) — pravidlo: zľava musí byť 0%–30%, mimo hraníc by mala vyvolať ValueError, výsledok by mal byť zaokrúhlený na 2 desatinné miesta. Napíšte očakávania podľa tohto PRAVIDLA (nie pomocou kódu). Šťastná cesta + tieto okrajové prípady: 0%, 30%, 31% (chyba), záporné, celkom=0"
Dáva silné pravidlo uvoľnenia a hovorí „píšte očakávanie podľa pravidla, nie podľa kódu“; Táto jediná veta uzatvára pascu AI, ktorá opravuje nesprávne správanie.
Typ testu
Príspevok AI
ľudská kontrola
Šťastné testovanie cestnej jednotky
rýchla kostra
Je očakávanie správne?
Okrajové prípady
Rozsiahly brainstorming
Odstráňte nepodstatné
Vyplnenie medzier rozsahu
Nájde preskočené konáre
Potvrďte význam
Testovacie údaje/napodobenina
Vytvára realistickú vzorku
Žiadne PII, kontrola realizmu
Testy riadia kvalitu, nie ju zaručujú
Vysoké pokrytie testom dáva dôveru, ale môže byť aj zavádzajúce: 100-percentné pokrytie znamená „každý riadok bol spustený“, nie „každý riadok je správny“. Je ľahké zvýšiť pokrytie pomocou AI; Skutočná hodnota je v písaní zmysluplných očakávaní. Hodnota testu je jeho schopnosť prelomiť a upozorniť vás na porušenie kódu. Preto sú testy generované AI založené na otázke „naozaj sa kód zlomí, keď sa zmení?“ Otestujte si to otázkou; Zámerné prerušenie čiary a videnie prerušenia testu (nápad na mutáciu) je dôkazom, že test fungoval.
Tip: Ak chcete zistiť, či test, ktorý napíše AI, funguje, vytvorte v kóde malú chybu (napr. zmeňte + na -) a zistite, či sa test pokazí. Ak sa nerozbije, tento test vás nechráni.
Časté chyby
- Žiadosť o test bez uvedenia pravidla. Model zmrazí aktuálne správanie; opraví chybu ako "pravda".
- Prijímanie očakávaní bez ich čítania. Testovanie je zavádzajúce, ak neskontrolujete, či tvrdenia kontrolujú správnu hodnotu.
- Len testovanie šťastnej cesty. Skutočné chyby žijú na okraji; Požiadajte výslovne o okrajové prípady.
- Zámena rozsahu s účelom. Vysoké percento nie je zárukou správneho správania.
- Vytváranie skutočných/skrytých údajov ako testovacích údajov. Zákaznícke údaje alebo tajomstvá by nemali vstúpiť do testovania a skladovania; Vytvorte syntetické údaje.
V súhrne
Umelá inteligencia odstraňuje veľkú časť opakovanej záťaže pri písaní testov: vytvára rýchle kostry, veľké zoznamy hraničných prípadov a analýzy medzier pokrytia. Najkritickejším bodom sú však očakávania: AI má tendenciu testovať aktuálne správanie kódu, zatiaľ čo testovanie by malo byť napísané podľa špecifikácie. Dajte pravidlo, skontrolujte očakávania, presadzujte okrajové prípady a otestujte, či testy skutočne chránia vložením chyby. Testovanie je nástroj, nie cieľ.
Aplikačná úloha
Vyberte funkciu a najprv vytlačte test AI jednoduchým zadaním kódu; Všimnite si očakávania. Potom znova vytlačte test a uveďte špecifikáciu (požadované správanie) pre rovnakú funkciu. Porovnajte očakávania dvoch testovacích sád: líšia sa v tom, ktorá z nich odhaľuje skutočnú chybu? Nakoniec overte, že jeden z vygenerovaných testov fungoval tak, že do kódu pridáte zámernú chybu a uvidíte prerušenie testu.
kontrolný zoznam
- [ ] Rozlišujem, či má test opraviť alebo overiť správanie.
- [ ] Keď žiadam o test, dávam pravidlo (špecifikáciu), ktoré by malo platiť, nie kód.
- [ ] Každé vygenerované tvrdenie porovnávam so špecifikáciou.
- [ ] Výslovne požadujem prípady okrajov a porúch.
- [ ] Percentuálne pokrytie vnímam ako nástroj, nie ako cieľ.
- [ ] Testujem, či test skutočne chráni vložením chýb.