Fitimet:
- Aftësia për të prodhuar teste të njësisë, integrimit dhe UI me inteligjencën artificiale në përputhje me piramidën e testimit dhe situatat e kufirit dhe gabimit të mbulimit, si dhe skenarët e lumtur
- Aftësia për të eliminuar testet boshe/të padobishme dhe mbulimin e fryrë duke kontrolluar nëse çdo test i krijuar vërteton vërtet një sjellje
- Sigurimi që testi e kap defektin dhe e pengon atë të rregullojë defektin duke i treguar AI se çfarë duhet të bëjë kodi
Shkrimi i kodit është gjysma e punës; Provimi se kodi funksionon si duhet është gjysma tjetër. Aplikacionet celulare ndeshen me qindra pajisje të ndryshme, madhësi ekrani, versione të sistemit operativ dhe sjellje të përdoruesve. Është e pamundur të testohen të gjitha këto me dorë; Kjo është arsyeja pse testimi i automatizuar (kodi i testimit të kodit - testimi që funksionon pa një klikim njerëzor) është shtylla kurrizore e cilësisë së celularit. Inteligjenca artificiale është tepër efikase në shkrimin e testeve sepse shkrimi i testeve është pikërisht lloji i punës së modelit që i pëlqen: vërtetimi i një sjelljeje specifike për inpute specifike. Në këtë njësi, ne do të mësojmë se si të përshpejtojmë testimin e njësisë, testimin e ndërfaqes dhe automatizimin me AI, por të sigurojmë cilësinë e testit përmes syve të njeriut.
Piramida e testimit: çfarë të testoni dhe sa
Një strategji e shëndetshme testimi i ngjan një piramide. Baza përfshin një numër të madh testesh njësi (testim i shpejtë që teston një funksion ose klasë të vetme në izolim); ato janë të shpejta dhe të lira. Në mes është më pak testimi i integrimit (testimi se si funksionojnë shumë pjesë së bashku). Në krye ka testim minimal UI/nga skaj në fund (testimi bëhet duke klikuar në ekran siç bën përdoruesi); ato janë realiste, por të ngadalta dhe të brishta. AI ndihmon në çdo shtresë, por vlera më e madhe është në bazë: prodhimi i shpejtë i testeve të njësive të logjikës së biznesit.
Lloji i testit
Fushëveprimi
shpejtësia
Efikasiteti i AI
testimi i njësisë
Një funksion/klasë
shumë shpejt
shumë e lartë
integrimin
ndërshtresore
e mesme
lartë
UI / nga fundi në fund
Të gjitha transmetimet në ekran
i ngadalshëm
E mesme (e brishtë)
Këshillë: Kur i thoni AI të "gjenerojë teste për këtë funksion", kërkoni në mënyrë eksplicite për rastet e skajeve: hyrje bosh, null, numër negativ, vlerë shumë e madhe, gabim rrjeti. Inteligjenca artificiale krijon një rrugë të lumtur lehtësisht; Gabimet e vërteta fshihen në kufij dhe hidhen jashtë nëse nuk i do atje.
Hapat e shkrimit të testeve me AI
- Përcaktoni sjelljen që do të testohet. "Ky funksion duhet t'i japë këtë dalje këtij inputi."
- Specifikoni kornizën. JUnit + MockK në Android, XCTest në iOS, Espresso (Android) ose XCUITest (iOS) për UI.
- Kërkoni për gjendjet kufitare. Skenar i lumtur + gabim + pika ndërprerjeje.
- Menaxhoni objekte tallëse. Varësitë e jashtme si rrjeti dhe baza e të dhënave imitohen për testim (tallje - tallje e kontrolluar në vend të shërbimit aktual).
- Kryeni testin dhe verifikoni. A kalon testi, a konfirmon diçka vërtet domethënëse?
Hapi i pestë është kritik. AI ndonjëherë prodhon teste të padobishme që “kalojnë gjithmonë”; për shembull, një test që nuk verifikon asgjë ose kontrollon të dhënat e veta false. Një test kalues dhe një test i vlefshëm janë gjëra të ndryshme.
Kujdes: Vetëm për shkak se AI mund të prodhojë nuk do të thotë se testi është i saktë. Ndonjëherë AI e pranon sjelljen aktuale (ndoshta të gabuar) të kodit si "të saktë" dhe shkruan teste në përputhje me rrethanat. Një testim i tillë rregullon defektin në vend që ta kap atë. Ju përcaktoni se çfarë pret testi; Tregojini AI-së se çfarë duhet të bëjë, jo çfarë bën kodi.
Testi i masës së mbulimit dhe gabimit
Mbulimi i testit (sa përqindje e kodit drejtohet nga testet) është një metrikë e dobishme, por mashtruese. Mbulimi 90% tregon se 90% e kodit është ekzekutuar; por nuk është verifikuar që ato linja janë duke punuar si duhet. Një test që kryen një linjë dhe nuk kontrollon rezultatin e fryn hapësirën, por nuk ofron siguri. Qëllimi nuk është shifra e lartë, por vërtetimi kuptimplotë. Ju mund të rriteni shpejt me AI, por sigurohuni që çdo test vërtet teston një sjellje.
tre mini kuti
Rasti 1 — Situata kufitare e kapur. Inteligjencës artificiale iu kërkua teste për funksionin e transferimit të parave në një aplikacion bankar dhe konkretisht u shtuan skenarët "shuma negative" dhe "më shumë se bilanc". Nga testimi rezultoi se transferta nuk ishte e bllokuar me shumë negative; kjo do të ishte një cenueshmëri e madhe e sigurisë në prodhim. Mbyllur duke shtuar një kontroll me një rresht. Mësimi: testet kufitare janë testet më të vlefshme.
Rasti 2 - Test i rremë. Një ekip u lehtësua për të rritur mbulimin në 85% me 40 teste njësi të prodhuara nga AI. Gjatë inspektimit, u pa se shumica e testeve në të vërtetë nuk verifikuan ndonjë rezultat, ata thjesht thirrën funksionin dhe shkruajtën assertTrue(true). Mbulimi ishte i lartë, por mbrojtja ishte zero. Testet u rishikuan dhe u rishkruan me vërtetime reale. Mësimi: numrat e mbulimit mund të gënjejnë.
Rasti 3 - Testimi i UI u përshpejtua. Një ekip i tregtisë elektronike shkroi një skenar XCUITest të rrjedhës së shtesave në shportë me AI në 20 minuta; Nëse do të shkruhej me dorë, do të merrte gjysmë dite. Identifikuesit e elementeve të ekranit të hamendësuar nga AI; Ekipi i përshtati ato me kodin real dhe i rregulloi. Shpejtësia e draftit është reale, por verifikimi i identifikuesit është punë njerëzore.
Prompt i dobët / Prompt i fortë
Prompt i dobët: "Shkruani një test për këtë funksion."
Prompt i fuqishëm: "Prodhoni teste të njësisë për këtë funksion Kotlin me JUnit5 + MockK. Funksioni: transferimi i parave (shuma, burimi, objektivi). Sjelljet për të testuar (çfarë duhet të bëjë kodi): - Transferimi i vlefshëm duhet të jetë i suksesshëm - Shuma negative ose zero duhet të refuzohet - Shuma më e madhe se balanca duhet të refuzohet - Çdo gabim i rrjetit duhet të refuzohet vetëm një gabim i duhur. përshkrues, tallni shërbimin e jashtëm. Mos shkruani një pohim bosh."
Modele të kopjueshme
Modeli i testit të njësisë: "Krijoni teste njësie [JUnit/XCTest] për këtë funksion për [gjuhën]. Sjellja e pritshme: [çfarë duhet bërë]. Përfshi: skenarin e lumtur, hyrjen e pavlefshme, pikat e ndërprerjes, rastin e gabimit. Lëreni çdo test të verifikojë një sjellje të vetme; përdorni pohim kuptimplotë; tallje. [kodi]"
Shablloni i testimit të ndërfaqes së përdoruesit: "Shkruani një test UI të rrjedhës së mëposhtme me [Espresso/XCUITest]: [rrjedha e përdoruesit hap pas hapi]. Zgjidh elementët e ekranit me ID të aksesueshmërisë, përdor id në vend të tekstit. Shto strategjinë e pritjes. Më kujto që të përputh id-të e elementeve me kodin aktual."
Modeli i auditimit të testimit:"Shqyrtoni këto teste:1) A verifikojnë në të vërtetë një rezultat/sjellje apo janë të pavlefshme? 2) A mbulojnë rastet kufitare?3) A rregullojnë kodin e gabimeve apo presin sjellje të saktë? Flamurojnë dhe forcojnë testet e dobëta. [testet]"
Shablloni i optimizimit të mbulimit: "Identifikoni pjesë të patestuara të kësaj klase dhe sugjeroni teste kuptimplote. Jepni përparësi shtigjeve me rrezik real, jo vetëm numrin e mbulimeve. [kodi]"
Gabimet e zakonshme
- Vetëm duke testuar skenarin e lumtur. Gabimet ruhen në gjendjet kufitare; Kërkojini ato hapur.
- Pranimi i një testi bosh/të padobishëm. Testet e tipit assertTrue(true) fryjnë shtrirjen dhe nuk ofrojnë mbrojtje.
- Duke pasur AI të verifikoni se çfarë po bën kodi. Testimi duhet të presë se çfarë duhet të bëjë kodi; përndryshe e rregullon defektin.
- Gabimi i numrit të objektit për qëllimin. Mbulimi 90% nuk do të thotë saktësi 90%.
- Lidhja me tekstin në testimin e ndërfaqes së përdoruesit. Testi prishet kur teksti ndryshon; Përdorni identifikues të qëndrueshëm (id).
- Vendosja e gabuar e talljeve. "Testi i njësisë" që thërret shërbimin aktual do të jetë i ngadaltë dhe i brishtë.
Në përmbledhje
Testimi është shtylla kurrizore e cilësisë së celularit dhe AI është shumë efikas në këtë fushë, veçanërisht në testimin e njësive. Ndiqni piramidën e testimit: shumë njësi, integrim mesatar, testim i vogël i ndërfaqes së përdoruesit. Pyetni në mënyrë të qartë AI për skenarin e lumtur, si dhe kufizoni rastet dhe shtigjet e gabimeve. Sigurohuni që çdo test i krijuar vërtet vërteton një sjellje; Testet boshe dhe mbulimi i fryrë janë mashtrues. Më e rëndësishmja, tregoni AI-së se çfarë duhet të bëjë kodi, jo çfarë bën ai, në mënyrë që testi të kap gabimin, jo ta rregullojë atë.
Detyra e aplikimit
Kërkoni teste nga AI duke përdorur "modelin e testit të njësisë" për një funksion logjik të biznesit (p.sh. llogaritja e zbritjes ose vërtetimi i formularit) dhe specifikoni në mënyrë eksplicite rastet kufi (nul, negativ, shumë i madh). Ekzekutoni testet e krijuara, më pas kontrolloni të njëjtat teste me "Tabela e auditimit të testit". Gjeni të paktën një test të dobët, forcojeni atë dhe provoni nëse testet kapin një gabim aktual të funksionit (duke shtuar një gabim të vogël).
listë kontrolli
- [ ] Zgjodha shtresën e duhur për piramidën e provës (njësia prioritare)
- [ ] Doja raste kufiri dhe gabimi përveç skenarit të lumtur
- [ ] Kam verifikuar që çdo test përmban një pohim kuptimplotë
- [ ] I thashë AI se çfarë duhet të bëjë kodi, jo çfarë bën
- [ ] Unë u fokusova në shtigjet aktuale të rrezikut, jo në numrin e mbulimeve
- [ ] Kam përdorur identifikues të qëndrueshëm në testet e UI, nuk jam lidhur me tekstin