Dobički:
- Sposobnost izdelave testov enote, integracije in uporabniškega vmesnika z umetno inteligenco v skladu s piramido testiranja in pokrivanje situacij omejitev in napak ter srečnih scenarijev
- Sposobnost izločanja praznih/neuporabnih testov in napihnjene pokritosti s preverjanjem, ali vsak ustvarjen test dejansko potrjuje vedenje
- Zagotavljanje, da test ujame napako in prepreči, da bi jo popravil, tako da AI pove, kaj naj naredi koda
Pisanje kode je polovica dela; Druga polovica je dokaz, da koda deluje pravilno. Mobilne aplikacije se srečujejo s stotinami različnih naprav, velikosti zaslonov, različic operacijskega sistema in vedenja uporabnikov. Vsega tega je nemogoče preizkusiti ročno; Zato je avtomatizirano testiranje (koda za testiranje kode – testiranje, ki poteka brez človeškega klika) hrbtenica mobilne kakovosti. Umetna inteligenca je neverjetno učinkovita pri pisanju testov, saj je pisanje testov natanko takšna vrsta vzorčnega dela, ki mu je všeč: preverjanje določenega vedenja za specifične vnose. V tej enoti se bomo naučili, kako pospešiti testiranje enot, testiranje vmesnikov in avtomatizacijo z AI, vendar zagotoviti kakovost testa skozi človeške oči.
Testna piramida: kaj testirati in koliko
Strategija zdravega testiranja je podobna piramidi. Baza vključuje veliko število enotnih testov (hitro testiranje, ki testira posamezno funkcijo ali razred v izolaciji); so hitri in poceni. Na sredini je manj integracijskega testiranja (testiranje, kako več delov deluje skupaj). Na vrhu je minimalno testiranje uporabniškega vmesnika/od konca do konca (testiranje se opravi s klikom na zaslon, kot to počne uporabnik); so realistični, a počasni in krhki. Umetna inteligenca pomaga na vseh ravneh, vendar je največja vrednost v osnovi: hitra izdelava testov enote poslovne logike.
Vrsta testa
Področje uporabe
hitrost
Učinkovitost AI
testiranje enote
Ena funkcija/razred
zelo hitro
zelo visoko
integracija
vmesni sloj
srednje
visoka
UI / od konca do konca
Pretok na celotnem zaslonu
počasi
Srednje (lomljivo)
Namig: Ko umetni inteligenci naročite, naj "generira teste za to funkcijo", izrecno zahtevajte robne primere: prazen vnos, nič, negativno število, zelo velika vrednost, omrežna napaka. AI zlahka ustvari srečno pot; Prave napake se skrivajo v mejah in skočijo ven, če jih tam nočeš.
Koraki pisanja testov z AI
- Določite vedenje, ki ga želite testirati. "Ta funkcija bi morala dati ta izhod temu vhodu."
- Določite okvir. JUnit + MockK v sistemu Android, XCTest v sistemu iOS, Espresso (Android) ali XCUITest (iOS) za uporabniški vmesnik.
- Vprašajte za mejna stanja. Vesel scenarij + napaka + prekinitvene točke.
- Upravljanje lažnih predmetov. Zunanje odvisnosti, kot sta omrežje in baza podatkov, so emulirane za testiranje (mock — nadzorovana mock namesto dejanske storitve).
- Izvedite test in preverite. Ali je test uspešen, ali potrdi kaj resnično pomembnega?
Peti korak je kritičen. AI včasih ustvari neuporabne teste, ki "vedno uspejo"; na primer test, ki ne preverja ničesar ali preverja lastne lažne podatke. Uspešen izpit in dragocen izpit sta različni stvari.
Pozor: Samo zato, ker lahko AI proizvaja, še ne pomeni, da je test pravilen. Včasih AI sprejme trenutno (morda napačno) vedenje kode kot "pravilno" in temu primerno napiše teste. Takšno testiranje odpravi napako, namesto da bi jo ujelo. Vi določite, kaj test pričakuje; Povejte AI, kaj naj naredi, ne kaj počne koda.
Mera pokritosti testa in zmota
Pokritost testa (kakšen odstotek kode izvajajo testi) je uporabna, a zavajajoča metrika. 90 % pokritost pomeni, da je bilo izvedenih 90 % kode; vendar ni bilo preverjeno, da te linije delujejo pravilno. Preizkus, ki zažene vrstico in ne preveri rezultata, poveča obseg, vendar ne zagotovi varnosti. Cilj niso visoke številke, ampak smiselna validacija. Z umetno inteligenco lahko hitro povečate obseg, vendar poskrbite, da vsak test dejansko preizkusi vedenje.
trije mini kovčki
Primer 1 – Ujet položaj na meji. Od umetne inteligence so zahtevali teste za funkcijo prenosa denarja v bančni aplikaciji, posebej pa sta bila dodana scenarija "negativen znesek" in "več kot stanje". Test je pokazal, da prenos ni bil blokiran z negativnim zneskom; to bi bila velika varnostna ranljivost v proizvodnji. Zaprto z dodajanjem enovrstičnega kontrolnika. Lekcija: mejni testi so najbolj dragoceni testi.
Primer 2 – Lažni test. Ena ekipa je z olajšanjem povečala pokritost na 85 % s 40 testi enot, ki jih je izdelal AI. Med pregledom je bilo ugotovljeno, da večina testov dejansko ni preverila nobenega izhoda, samo poklicali so funkcijo in zapisali assertTrue(true). Pokritost je bila visoka, zaščita pa nična. Testi so bili prenovljeni in na novo napisani z resničnimi validacijami. Lekcija: številke pokritosti lahko lažejo.
Primer 3 – pospešeno testiranje uporabniškega vmesnika. Ekipa za e-trgovino je v 20 minutah napisala skript XCUITest toka dodajanja v voziček z AI; Če bi bilo napisano na roko, bi trajalo pol dneva. AI je uganil identifikatorje elementov zaslona; Ekipa jih je primerjala s pravo kodo in jih popravila. Hitrost osnutka je resnična, vendar je preverjanje identifikatorja človeško delo.
Šibek poziv/močan poziv
Šibek poziv: "Napišite preizkus za to funkcijo."
Zmogljiv poziv: "Izdelajte teste enote za to funkcijo Kotlin z JUnit5 + MockK. Funkcija: denarni prenos (znesek, vir, cilj). Vedenje za testiranje (kaj naj naredi koda): - Veljaven prenos mora biti uspešen - Negativen ali ničelni znesek mora biti zavrnjen - Znesek, večji od stanja, mora biti zavrnjen - Omrežna napaka mora sprožiti ustrezno izjemo. Vsak test mora preveriti samo eno stvar, njihova imena morajo biti opisna, zasmehovati zunanjo storitev. Ne napiši prazno trditev."
Kopirane predloge
Predloga za preizkus enote: "Ustvari teste enote [JUnit/XCTest] za to funkcijo za [jezik]. Pričakovano vedenje: [kaj storiti]. Vključuje: srečen scenarij, ničelni vnos, prekinitvene točke, primer napake. Naj vsak preizkus preveri posamezno vedenje; uporabi smiselno trditev; posmeh. [koda]"
Predloga za testiranje uporabniškega vmesnika: "Napišite preizkus uporabniškega vmesnika naslednjega toka z [Espresso/XCUITest]: [uporabniški tok korak za korakom]. Izberite elemente zaslona z ID-jem za ljudi s posebnimi potrebami, uporabite ID namesto besedila. Dodajte strategijo čakanja. Opomni me, da uskladim ID-je elementov z dejansko kodo."
Testna revizijska predloga: "Preglejte te teste: 1) Ali dejansko preverjajo izhod/vedenje ali so ničelni? 2) Ali pokrivajo mejne primere? 3) Ali odpravljajo napake v kodi ali pričakujejo pravilno vedenje? Označite in okrepite šibke teste. [testi]"
Predloga za optimizacijo pokritosti: "Identificirajte nepreizkušene dele tega razreda in predlagajte smiselne preizkuse. Dajte prednost potem z dejanskim tveganjem, ne le številu pokritosti. [koda]"
Pogoste napake
- Samo preizkušam srečen scenarij. Napake so shranjene v mejnih stanjih; Vprašajte jih odkrito.
- Sprejemanje praznega/neuporabnega testa. Preizkusi tipa assertTrue(true) povečajo obseg in ne zagotavljajo zaščite.
- Umetna inteligenca mora preveriti, kaj koda počne. Testiranje bi moralo pričakovati, kaj naj naredi koda; drugače popravi napako.
- Napačna številka obsega za namen. 90% pokritost ne pomeni 90% natančnosti.
- Povezovanje z besedilom pri testiranju uporabniškega vmesnika. Test se pokvari, ko se besedilo spremeni; Uporabite stabilen identifikator (id).
- Nepravilna nastavitev mokov. "Preizkus enote", ki kliče dejansko storitev, bo počasen in krhek.
Če povzamem
Testiranje je hrbtenica mobilne kakovosti in umetna inteligenca je na tem področju zelo učinkovita, zlasti pri testiranju enot. Sledite testni piramidi: veliko enot, srednja integracija, malo testiranja uporabniškega vmesnika. Umetno inteligenco izrecno vprašajte za srečen scenarij ter omejitev primerov in poti napak. Prepričajte se, da vsak ustvarjen test dejansko potrdi vedenje; Prazni testi in napihnjena pokritost so zavajajoči. Najpomembneje je, da AI povejte, kaj naj koda počne, ne kaj počne, tako da test ujame napako, ne pa jo popravi.
Aplikacijska naloga
Zahtevajte teste od umetne inteligence z uporabo »predloge za preizkus enote« za funkcijo poslovne logike (npr. izračun popusta ali preverjanje obrazca) in izrecno navedite omejitvene primere (ničelen, negativen, prevelik). Zaženite ustvarjene teste, nato pa dajte iste teste revidirati s "Predlogo za revizijo preizkusa". Poiščite vsaj en šibak test, ga okrepite in preizkusite, ali testi ujamejo dejansko napako funkcije (z dodajanjem majhne napake).
kontrolni seznam
- [ ] Izbral sem ustrezno plast za testno piramido (prioritetna enota)
- [ ] Poleg srečnega scenarija sem želel primere omejitev in napak
- [ ] Preveril sem, da vsak preizkus vsebuje smiselno trditev
- [ ] AI sem povedal, kaj naj koda naredi, ne kaj počne
- [ ] Osredotočil sem se na dejanske poti tveganja, ne na število kritij
- [ ] Uporabil sem stabilni identifikator v testih uporabniškega vmesnika, nisem se povezal z besedilom