Fitimet:
- Aftësia për të parandaluar që inteligjenca artificiale të pranojë sjelljen e gabuar si 'të saktë' duke llogaritur vlerën e pritur në testet e njësisë pavarësisht nga rregulli i pranimit
- Aftësia për të printuar teste të shpejta, të pavarura dhe të përsëritshme duke zbatuar parimet AAA dhe FIRST dhe duke u tallur me varësitë e jashtme
- Aftësia për të testuar teste me mutacion (thyerja e kodit) dhe për të njohur kodin e vështirë për t'u testuar si një erë dizajni
Shtresa më e madhe dhe më e shpejtë e piramidës së testimit është testimi i njësisë - testimi që verifikon një funksion ose një pjesë të vogël kodi të izoluar nga gjithçka tjetër. Mijëra teste të njësive ekzekutohen në sekonda dhe kapin një defekt ndërsa kodi është ende në ekranin e zhvilluesit. Inteligjenca artificiale (AI) është ndoshta më e aftë në prodhimin e testeve të njësive: ju i jepni një funksion, AI prodhon dhjetëra teste. Por pikërisht kjo lehtësi krijon kurthin më të madh: AI prodhon lehtësisht teste që "shkëlqejnë jeshile, por nuk verifikojnë asgjë" ose pranojnë sjelljen aktuale (ndoshta të gabuar) të kodit si "të saktë". Në këtë njësi do të mësoni se si të shkruani teste të vërteta të njësisë mbrojtëse me AI dhe marrëdhënien midis kodit të testueshëm dhe AI.
Cilësitë e një testi të mirë njësie: E PARA
Testet e mira të njësisë ndjekin parimet e PARË: Të shpejta, të pavarura (testet nuk duhet të varen nga njëra-tjetra), të përsëritshme (të përsëritshme - i njëjti rezultat në çdo mjedis), Vetë-vleftësues (kalim/dështim i qartë), Në kohë (në kohë). Kujtojini vetes këto parime kur bëni teste të prodhimit të AI; në mënyrë specifike kërkoni që testi të mos varet nga bota e jashtme (baza e të dhënave aktuale, rrjeti, ora) të jetë "i pavarur" dhe "i përsëritur".
Modeli AAA dhe pohimi shprehës
Një test i njësisë solide ndjek strukturën AAA: Rregulloni (përgatitni - konfiguroni hyrjet dhe varësitë), Vepro (ekzekutoni - thirrni funksionin nën provë), Vërtetoni (vleftësoni - krahasoni rezultatin me vlerën e pritur). Ajo kritike është pohimi. Gabimi më i zakonshëm që bën AI është nxjerrja e pohimit nga dalja e kodit nën provë - logjika "çfarëdo që të kthejë kodi është e vërtetë". Kjo e bën testin të pakuptimtë. Mënyra e saktë është të përcaktoni vlerën e pritur në mënyrë të pavarur (nga kriteret e pranimit, llogarisni atë me dorë).
Kujdes: Nëse i thoni AI "shkruani një test për këtë funksion", AI mund të ekzekutojë funksionin dhe të shkruajë daljen e tij si "të pritshme". Ky test kalon edhe nëse funksioni është fals. Në vend të kësaj, thoni "ju llogaritni rezultatet e pritura sipas këtyre rregullave, mos i referoni daljes aktuale të funksionit".
Tallje, cung dhe varësi
Testimi i njësisë kërkon izolim. Nëse funksioni juaj varet nga një bazë të dhënash ose API, ato zëvendësohen me objekte tallëse (tallje/cung - një zëvendësues i kontrolluar, bedel për varësinë reale) në testim. Kjo e bën testin të shpejtë, të pavarur dhe të riprodhueshëm. Inteligjenca artificiale mund të prodhojë instalime të rreme; Por kujdes nga talljet e tepërta: nëse tallni gjithçka, testi do të verifikojë vetëm "çfarë të kthen tallja", jo logjikën aktuale. Bilanci: imitoni botën e jashtme, ekzekutoni logjikën reale në provë.
Testueshmëria dhe AI
Ka një reagim interesant: kodi që është i vështirë për t'u testuar shpesh është kod i dizajnuar keq. Nëse AI ka probleme me shkrimin e testeve për një funksion (shumë varësi, gjendje të fshehur globale, efekte anësore), kjo është një erë dizajni. Të pyesësh AI "si do ta rifaktosh këtë kod për ta bërë atë të testueshëm" çon në testim më të mirë dhe kod më të mirë.
Testet e parametrizuara dhe diversiteti i të dhënave
Shkrimi i një testi të veçantë çdo herë për të verifikuar të njëjtin rregull me inpute të ndryshme është i lodhshëm dhe i vështirë për t'u ruajtur. Testimi i parametrizuar - një strukturë që kryen në mënyrë të përsëritur të njëjtën logjikë testimi në një listë të hyrjeve dhe rezultateve të pritshme - e eliminon këtë përsëritje: një trup i vetëm testues ushqehet me dhjetëra çifte të dhënash. AI është shumë efikase në prodhimin e këtyre tabelave të rezultateve të pritura nga inputet kur i jepni rregullat tuaja të pranimit; Në veçanti, ai rendit në mënyrë sistematike vlerat kufitare dhe klasat e ekuivalencës.
Por ka edhe këtu një kurth: AI tenton të nxjerrë rezultatet e pritura në tabelën e gjeneruar nga kodi në provë. Ky gabim është edhe më i rrezikshëm në testimin e parametrizuar, sepse një logjikë e vetme e pasaktë zhvlerëson dhjetëra rreshta. Prandaj, duhet të llogaritet gjithmonë kolona e rezultatit të pritur në mënyrë të pavarur sipas rregullit të pranimit dhe të vërtetojë manualisht të paktën disa rreshta. Kërkoni gjithashtu një kolonë përshkrimi "çfarë përfaqëson çdo rresht"; kështu që kur prishet një rresht, ju menjëherë shihni se cila gjendje është prishur.
Këshillë: Shtoni qëllimisht një "rresht kurthi" në tabelën e testimit të parametrizuar - domethënë, gabimisht shkruani rezultatin me vetëdije. Nëse kjo linjë nuk kthehet në të kuqe kur kryeni testin, testi juaj në fakt nuk po e verifikon atë situatë. Ky është një kontroll i shpejtë i kalimit.
Prompt i dobët / Prompt i fortë
E dobët: "Shkruani një test njësi për këtë funksion."
I fortë: Shkruani testet e njësisë [gjuhë/kornizë] për funksionin "taxCalculate(samount, rate). Rregulli i pranimit: rezultat = shuma * norma, e rrumbullakosur në 2 dhjetore; shuma negative ose norma hedh një gabim; kthen 0 nëse norma është 0. Përdorni strukturën AAA. Llogaritni manualisht vlerat e pritshme sipas KËTO rregullave aktuale, mos funksiononi shumë negative. i madh, i rrumbullakët në dhjetor, le të përshkruajë emrin e secilit test, varësinë e jashtme "Jo".
Prompt i fuqishëm; Ai jep rregullin e pranimit, pritshmërinë e pavarur të vlerës së pritshme, strukturën dhe rastet e avantazhit. Kështu, testi bëhet rojtari i rregullit, jo pasqyra e kodit.
Tabela e cilësisë së testit të njësisë
simptomë
Test i keq (besimi i rremë)
provë e mirë
pohojnë
Asnjë ose "jo nul"
Vlera konkrete e pritshme
Burimi i vlerës së pritur
Prodhimi i funksionit
Rregulli i pranimit / llogaritja manuale
varësia
DB/rrjet/orë aktuale
Izoluar me tallje/cung
kuti buzësh
Vetëm rrugë e lumtur
kufi, negativ, gabim
Kur thyeni kodin
mbetet e gjelbër
bëhet e kuqe
Emri
testi1, Metoda e testimit
përshkruan rregullin që konfirmon
Katër shabllone të kopjueshëm
1) Testimi i njësisë së drejtuar nga rregullat:
Roli juaj: inxhinier i lartë i testit të softuerit. Shkruani një test njësi për funksionin e mëposhtëm me [gjuhë/kornizë]: [nënshkrimi]. Rregullat e pranimit: [rregullat].- Përdorni strukturën AAA.- Llogaritni manualisht vlerat e pritura sipas KËTO rregulla; MOS referoni daljen aktuale të funksionit. - Mbuloni kufirin, negativin, gabimin dhe rrugën e lumtur me teste të veçanta. - Le të përshkruajë çdo emër testi rregullin që verifikon. - Tallje me varësitë e jashtme; Bëni që logjika aktuale të funksionojë.
2) Kontrolli i rezistencës ndaj mutacioneve:
Shikoni këto teste të njësisë. Listoni 5 ndryshime të vogla që mund t'i bëj kodit nën provë (a - në vend të një +, një >= në vend të një >, një zhvendosje kufiri) dhe më tregoni për secilën CILË nga këto teste do të bëhet e kuqe? Nëse asnjë nuk kthehet, testi është i pamjaftueshëm. Kodi + testet: [ngjit]
3) Rishikimi i testueshmërisë:
Pse është e vështirë të shkruhet një test njësi për këtë funksion? Varësia e fshehur, statusi global, efektet anësore, a ka shumë përgjegjësi? Sugjeroni rifaktorim minimal për ta bërë atë të testueshëm; mos ndryshoni sjellje. Kodi: [ngjit]
4) Përfundimi i paplotë i skenarit:
Janë dhënë funksioni i mëposhtëm dhe testet e disponueshme. Rendisni se cila sjellje/kase e fundit nuk është testuar KURRË (boshllëk në fushëveprimi) dhe shtoni një test për secilën. Funksion + teste: [ngjit]
tre mini kuti
Rasti 1 - Testi i pasqyrimit të kodit. Një zhvillues i kërkoi AI të shkruante një test për funksionin e rrumbullakimit; 10 teste ishin të gjelbra. Në fakt, funksioni po rrumbullakohej në drejtim të gabuar, por AI kishte marrë vlerat e pritura nga dalja e funksionit, kështu që testet e konsideruan gabimin "të vërtetë". Kur vlerat e pritura u llogaritën manualisht me shabllonin "të drejtuar nga rregullat", 4 teste u kthyen në të kuqe dhe u zbulua gabimi i vërtetë.
Rasti 2 - Vlera e kontrollit të mutacionit. Një ekip u mbështet në 45 teste njësi. Provoi 20 ndryshime të vogla në kod me një "kontroll të qëndrueshmërisë së mutacionit"; testet kapën vetëm 11 prej tyre. 9 ndërprerjet e mbetura kaluan në heshtje. Ekipi forcoi testet e dobëta; Një gabim aktual i llogaritjes u kap nga këto teste të përmirësuara në versionin tjetër.
Rasti 3 - Paprovueshmëria është një erë dizajni. AI nuk mund të shkruante teste për një funksion porositjeje, ajo vazhdimisht kishte nevojë për bazën e të dhënave reale. Shablloni i "rishikimit të testueshmërisë" tregoi se funksioni ka përfshirë aksesin në bazën e të dhënave. Kur u hoq injeksioni i varësisë, testet mund të shkruheshin dhe kodi u bë më i pastër.
Gabimet e zakonshme
- Nxjerrja e vlerës së pritur nga kodi. AI e pranon daljen e funksionit si "të saktë"; test që konfirmon kodin e gabuar.
- Test pa pohim ose me pohim të parëndësishëm. “Nuk hodhi gabim, kaloi” logjikën; Nuk konfirmon asgjë.
- Tallje ekstreme. Tallja me gjithçka dhe testimin e vetëm asaj që tallja kthen; logjika e vërtetë nuk testohet.
- Vetëm rruga e lumtur. Duke anashkaluar gjendjet kufitare, negative dhe të gabimit.
- Nuk testohet duke thyer kodin. Besimi i gjelbër pa kontrolluar për mutacion.
- Injorimi i paprovueshmërisë. Mosnjohja dhe rregullimi i dizajnit të keq në vend që të shtyhet testimi i vështirë.
Në përmbledhje
Testet e njësisë janë shtresa më e shpejtë dhe më e madhe e piramidës testuese; E kap gabimin në momentin më të lirë. AI është shumë i aftë të prodhojë teste për njësi, por kurthi i saj më i madh është shkrimi i testeve që supozojnë sjelljen e pasaktë si "të saktë" duke nxjerrë vlerën e pritur nga vetë kodi. Zgjidhja: jepni rregullat e pranimit, llogaritni manualisht vlerat e pritura, zbatoni parimet AAA dhe FIRST, tallni botën e jashtme dhe ekzekutoni logjikën aktuale dhe testoni çdo test me mutacion (thyer kodin). Kodi që është i vështirë për t'u testuar është një shenjë e projektimit që kërkon rregullim.
Detyra e aplikimit
Zgjidhni një funksion që përmban një rregull biznesi nga projekti juaj. Shkruani rregullat e pranimit dhe bëni që AI të shkruajë teste me shabllonin "testimi i njësisë së drejtuar nga rregullat"; Llogaritni vlerat e pritura me dorë. Më pas aplikoni "kontrollin e qëndrueshmërisë së mutacionit": bëni të paktën 5 thyerje të vogla në kod dhe matni sa teste bëhen të kuqe. Shto test të ri për korrupsionet e pakapura. Raporto sa ndërprerje u kapën (si p.sh. rezultati i mutacionit).
listë kontrolli
- [ ] I dhashë rregullat e pranimit dhe i kisha llogaritur manualisht vlerat e pritura.
- [ ] U sigurova që testet të mos nxirrnin vlerën e pritur nga kodi.
- [ ] Unë kam krijuar testim të pavarur duke ndjekur udhëzimet AAA dhe FIRST.
- [ ] Tallja varësitë e jashtme dhe drejtova logjikën aktuale.
- [ ] Kam mbuluar rastet kufi, negative dhe gabime.
- [ ] Duke thyer kodin (mutacionin) vërtetova se testet me të vërtetë mbrojnë.