Kasu:
- Võimalus luua tehisintellektiga sisuka kinnitusega ühiku-, integratsiooni- ja servajuhtumiteste
- Võimalus AI toega süstemaatiliselt välja võtta testide katvus, piirväärtused ja negatiivsed stsenaariumid
- Võimalus kontrollida, kas tehisintellekti loodud testid tõepoolest kontrollivad käitumist ega korda ainult olemasolevat koodi
Testimine on mehhanism, mis tõestab, et tarkvara käitub tegelikult nii, nagu lubatud. Hea testikomplekt annab sekunditega teada, kas muudatus rikub midagi ja annab insenerile vabaduse enesekindlalt tegutseda. AI kiirendab testi kirjutamise kõige tüütumat ja enim vahele jäetud osa: luuakse palju stsenaariume, katkestuspunkte ja negatiivseid juhtumeid. Kuid siin on salakaval lõks: AI võib kirjutada teste, mis kontrollivad koodi praegust (võib-olla vigast) käitumist, mitte selle oletatavat käitumist; või see võib toota tühje teste, mis alati läbivad, tegelikult ei kontrolli midagi. Testi väärtus ei seisne selles, kas see läbib, vaid selles, kas see kontrollib õiget asja ja muutub punaseks, kui see on vale.
Selles üksuses saate teada, kuidas koostada tähenduslike väidetega ühiku-, integratsiooni- ja servajuhtumiteste; kuidas süstemaatiliselt välja võtta testide katvus, murdepunktid ja negatiivsed stsenaariumid; ja vaatame, kuidas saate kontrollida, kas AI tehtud testid tegelikult käitumist kinnitavad.
Mõisted: Ühiku testimine: testib ühte funktsiooni/klassi eraldi. Integratsiooni testimine: testib mitu osa õigesti koos töötamist. Assert: väide, mis kontrollib, kas tulemus on võrdne oodatuga; See on testi tuum. Katvus: kui suurt osa koodist testid käivitavad; Kõrge katvus ei taga kvaliteeti.
Tähenduslike testide koostamine
Hea test teeb selgelt kolm asja: see loob oleku, sooritab toimingu, kinnitab tulemuse. AI-le testide printimisel määrake, millist käitumist soovite kontrollida ja milliseid stsenaariume see peaks hõlmama; Vastasel juhul annab see pinnapealseid teste, mis alati läbivad.
- Määratlege testitav käitumine. "Mis loetakse õigeks?" Vastake küsimusele selgelt.
- Küsige stsenaariumitüüpe. Tavaline, piir, negatiivne, veatingimus.
- Importige sisukas väide. See ei teinud lihtsalt "viga", vaid "tagas õige väärtuse".
- Kontrollige testi täpsust. Kas test muutub punaseks, kui rikute koodi teadlikult?
Põhjalik testi genereerimise viip: "Kirjutage ühikutestid järgmise funktsiooni "rakenda allahindlus(summa, kupong)" jaoks. Kasutage VÄHEMALT ühte stsenaariumi järgmistes kategooriates: (1) tavaline kehtiv kupong, (2) katkestuspunktid (0 summa, 100% allahindlus), (3) negatiivne (kehtetu kupong, negatiivne summa), (4) iga oodatava vea testi puhul CONCTE väärtus (ei nulli). lihtsalt "töötas").
Piirväärtuse ekstraheerimise viip: "Tehke selle funktsiooni sisendite jaoks piiriväärtuse analüüs. Eraldage iga parameetri jaoks väärtused "just piiril", "vahetult allpool piiri", "vahetult üle piiri". Seejärel loetlege neid piire katvad testistsenaariumid. Ärge kirjutage veel koodi, vaid lihtsalt analüüs ja stsenaariumiloend]."
Ettevaatust! Testi kõrge katvus (nt 90%) ei tõenda, et kood on õige. Katvus mõõdab, mitu rida täideti; mitte, et need jooned annaksid õige tulemuse. Test ilma sisulise väiteta suurendab katvust, kuid ei garanteeri midagi. Väite sisu määrab kvaliteedi, mitte väidete arv.
Testi enda testimine: mutatsiooniloogika
Kõige praktilisem viis mõista, kas tehisintellekti loodud test ka tegelikult töötab, on koodi tahtlik murdmine (mutatsioonitestimise loogika). Pöörake tingimus, tehke + märk -; Kui ükski test ei muutu punaseks, ei säilita teie testid seda käitumist.
Testige haavatavuse otsimise viip: "Öelge mulle, milliseid võimalikke vigu selles koodis järgmised testid EI TOHI tabada. Soovitage 5 väikest mutatsiooni, mida saaks koodis teha (nt >= asemel >, - + asemel) ja märkige igaühe puhul, kas olemasolevad testid suudaksid selle kinni püüda. Kellele, keda ei tabata, soovitage testida, mis tuleks lisada. Kood: [kood]" Testid: [test]"
Nõrk viip / Tugev viip
NÕRK: "Kirjutage sellele funktsioonile test." (Tulemus: tavaliselt üks õnnelik stsenaarium, nõrk kinnitus; vead puuduvad.) STRONG: "Kirjutage sellele funktsioonile "passwordStrong" test. Reegel: vähemalt 8 tähemärki, 1 suurtäht, 1 number nõutav. Katke järgmised stsenaariumid ERALDI testidena: täpselt 8 tähemärki (limiit), 7 tähemärki pole tühi (ainult tähed alla, tähed ei ole tühi, tühikud, liiga pikk (1000 tähemärki) Kinnitage igas testis selgesõnaliselt eeldatav tõene/väär väärtus ja nimetage test vastavalt sellele, mida see kontrollib."
Võimas viip annab reeglid ja täielikud piiristsenaariumid. Piiripaarid nagu "täpselt 8/7 tähemärki" on kõige levinumad kohad, kus vigu tehakse (segi ajades > ja >=). Nõrk viip ületab need piirid ja kannab vea tootmisse.
Testitüübid ja kus kasutada
Testi tüüp
Mida see kinnitab?
AI panus
Tähelepanu
üksus
Üks funktsioon/klass
Loob kiiresti mitut stsenaariumi
Nõutav on sisukas väide
integratsiooni
Osad töötavad koos
Stsenaarium ja näidisandmete mustand
Tõeline sõltuvust tekitav käitumine
lõpeta/võta vastu
Kogu kasutajavoog
Sammude nimekiri ja ootus
kalduvus rabedusele
regressioon
Vana viga ei naase
Vea spetsiifiline testimine
Tuleks lisada igale parandusele
Mini korpused
Juhtum 1 – test, mis alati läbib. AI kirjutab funktsioonile 12 testi ja need kõik läbivad. Insener muutub kahtlustavaks ja moonutab tahtlikult funktsiooni tagastusväärtust; Ainult 3 testist lähevad punaseks. Ülejäänud 9 testi ei sisalda sisukaid väiteid. Testimist tugevdab mutatsioonijaht; tõeline kaitse saavutatakse 9 stsenaariumi korral.
Juhtum 2 – piirviga. Vanuse kinnitamise funktsioon peaks ütlema "18 ja vanemad on kehtiv", kuid kirjas on >18, mis tähendab, et vanus 18 lükatakse tagasi. Viga ilmneb testimisel kohe, kuna AI genereerib murdepunkti analüüsi kaudu "täpselt 18" stsenaariumi. Ühe limiidi test hoiab ära kõik tegelikud kasutajakaebused.
Juhtum 3 – voolukäitumise parandamine. Kui AI-l kästakse "selle koodi põhjal test kirjutada", loob see testi, mis aktsepteerib "õigena" koodis juba olemasolevat ümardamisvea. Kui insener prindib testi vastavalt nõudele (eeldatav õige väärtus), mitte koodi, muutub test punaseks ja ilmneb tõeline viga. Testid tuleks tuletada ootustest, mitte koodist.
Levinud vead
- Mõttetu väide. "Ei visanud viga" ei piisa; Õiget väärtust tuleb kontrollida.
- Segamine ulatus kvaliteediga. Kõrge katvus ei taga täpseid tulemusi.
- Testi printimine koodi järgi. Parandab praeguse vea väärtuseks "tõene"; Testid peaksid lähtuma ootusest.
- Piirväärtuste vahelejätmine. > segamini ajamine >=-ga on kõige levinum viga; tuleb katsetada piiripaare.
- Ei kontrolli testi ennast. Test, mis koodi murdmisel punaseks ei lähe, ei paku kaitset.
Kokkuvõttes
Hea testimiskomplekt on võti muudatuste enesekindlaks tegemiseks. AI loob kiiresti palju stsenaariume, piire ja negatiivseid olukordi; Kuid kui see tuletab testid koodist, mitte nõuetest, saab see olemasolevaid vigu parandada või kirjutada mõttetuid teste, mis alati läbivad. Kinnitage igas testis konkreetne eeldatav väärtus, lisage seotud paarid ja kontrollige, kas teie testid tegelikult kaitsevad koodi tahtliku murdmisega. Väite sisu, mitte ulatuste arv, määrab kvaliteedi.
Rakenduse ülesanne
Valige funktsioon ja laske sellel luua nelja kategooriasse (tavaline, piirväärtus, negatiivne, viga) teste koos põhjaliku testi genereerimise viipaga; Laske igas katses kinnitada konkreetne eeldatav väärtus. Seejärel käivitage haavatavuse otsimise viip, soovitage koodis 5 väikest mutatsiooni ja käivitage testid, et kontrollida, millised need kinni püüavad. Lisage uus test vähemalt ühe mutatsiooni jaoks, mida ei leitud, ja näidake, et see on nüüd miinuses.
kontrollnimekiri
- [ ] Printisin testid eeldatava/õige käitumise, mitte koodi järgi.
- [ ] Käsitlesin tava-, piir-, negatiivse- ja veastsenaariume.
- [ ] Kinnitasin igas katses konkreetse eeldatava väärtuse.
- [ ] Testisin piiripaare (veidi üleval-all / veidi üleval-all).
- [ ] Tahtlikult koodi murdes kinnitasin, et testid läksid punaseks.
- [ ] Lisasin uue testi avastamata mutatsioonide jaoks.