Njësia 10 / 11

Risku i besimit të rremë, cilësia e testit dhe testimi i mutacionit: Testet e testimit

Fitimet:

  • Aftësia për të njohur tre fytyrat e pseudo-besimit (jo-pohues, vetë-pohues, pohues i parëndësishëm) dhe të aplikojë kundërhelm
  • Aftësia për të përdorur testimin e mutacioneve dhe rezultatin e mutacionit si një masë më e saktë e cilësisë sesa përqindja e mbulimit me mjet ose dorë
  • Aftësia për të pozicionuar inteligjencën artificiale si një ekip i kuq kundër testimit dhe kërkimit të zbrazëtirave të testimit pa rënë në grackën e lavdërimit

Në zemër të këtij moduli është një paralajmërim i përsëritur: një panel testimi me shkëlqim të gjelbër nuk është dëshmi e cilësisë. Nëse testet tuaja ju japin besim, duhet të dini nëse ai besim është i vërtetë apo i rremë. Në epokën e inteligjencës artificiale (AI), kjo pyetje është më kritike se kurrë, sepse AI është i aftë në prodhimin e testeve të lëngshme, të lëmuara, por të zbrazëta. Besimi i rremë — të besosh se softueri është i saktë sepse testet janë të gjelbra, kur në fakt testet nuk verifikojnë asgjë—është gjëja më e rrezikshme që mund t'i ndodhë një ekipi të sigurimit të cilësisë; sepse nuk fsheh që nuk ka gabime, por që nuk mund t'i shihni gabimet. Kjo njësi bashkon filozofinë e vlefshmërisë së të gjithë modulit në një disiplinë: testimin e testeve tuaja.

Standardi i artë për matjen e cilësisë së testimit: testimi i mutacioneve

Mënyra më e fuqishme për të kuptuar nëse një test mbron në të vërtetë apo jo është testimi i mutacioneve (testimi i mutacionit - një teknikë që prodhon shtrembërime/mutacione të vogla të qëllimshme në kodin burimor dhe mat nëse testet zbulojnë këto shtrembërime). Logjika është e thjeshtë: nëse e thyeni qëllimisht kodin (duke e bërë një + në -, një > në >=, një të vërtetë në false), një grup i mirë testimi duhet ta kapë atë korrupsion dhe të kthehet në të kuqe. Nëse jo, ai ndërprerje është një mutant i mbijetuar - kështu që testet tuaja nuk po e ruajnë atë sjellje.

Rezultati i mutacionit = mutacion i vrarë / mutacion total. Një paketë me mbulim të linjës 90% mund të ketë një rezultat mutacioni prej 40%; Kjo tregon që linjat janë duke punuar, por sjellja nuk është verifikuar. Rezultati i mutacionit është një masë shumë më e sinqertë e cilësisë sesa mbulimi i përqindjes.

Këshillë: Ka mjete automatike të mutacionit (PIT/Pitest për Java, Stryker për JavaScript/TypeScript, Stryker.NET për .NET, mutmut për Python). Këto automatikisht gjenerojnë dhe testojnë qindra mutacione. Nëse nuk keni një mjet, edhe metoda manuale e "provës së kodit të thyer" është e paçmueshme për funksionet kritike.

Tri fytyrat e pseudobesimit dhe antidoti i tij

Forma pseudo-besimi

simptomë

antidot

Test pa pohim

Kodi funksionon, asgjë nuk është vërtetuar

Pohimi i vërtetë në çdo provë; test me mutacion

test vetëkonfirmues

E pritshme = prodhimi i kodit

Llogaritni vlerën e pritur në mënyrë të pavarur

Pohimi i parëndësishëm

"jo null", "200 u kthyen"

Vërtetoni rregullin e biznesit/rezultatin aktual

Gabim me shtrirje të lartë

Linja 90%, mbrojtje e ulët

Shikoni rezultatin e mutacionit

Toleranca e brishtë e provës

"Mbërthyer përsëri, kaloni"

Shkaku kryesor + testimi përcaktues

Përdorimi i AI si një "skuadër e kuqe"

Inteligjenca artificiale mund të gjenerojë pseudo-besim dhe të jetë një aleat i fuqishëm në gjuetinë e tij. Përdorni AI si një ekip të kuq kundër testeve tuaja: pyesni "shkruani kodin që i kalon këto teste, por është i gabuar" ose "gjeni një përmbysje që do t'i mashtrojë këto teste". Nëse AI gjen zbrazëti në testet tuaja, ato zbrazëtira janë rreziqe reale.

Kujdes: Mos pyesni AI "A është cilësia e testit tim të mirë?" dhe merrni përgjigjen "po, shkëlqyeshëm" si siguri. AI priret të jetë i sjellshëm. Në vend të kësaj, sfidoni AI në një detyrë konkrete: "prodhoni një gabim që i kalon këto teste". Nëse mund ta prodhojë atë, testet tuaja janë të verbëra ndaj këtij gabimi.

Mutacionet ekuivalente dhe kufijtë e rezultatit

Testimi i mutacioneve është i fuqishëm, por ka një kapje: disa mutacione nuk e ndryshojnë aspak sjelljen e kodit. Këto quhen mutacione ekuivalente (mutant ekuivalent - kod i korruptuar, mutacion që prodhon saktësisht të njëjtin rezultat si origjinali). Për shembull, ndryshimi i vlerës fillestare të një variabli që nuk përdoret kurrë nuk ndikon në daljen; Asnjë test nuk mund dhe nuk duhet ta kapë këtë. Prandaj, një rezultat 100% i mutacionit është shpesh i paarritshëm në praktikë dhe nuk është qëllimi. Zhdukja e mutacioneve ekuivalente me dorë është punë intensive; Pra, mos e lexoni rezultatin e mutacionit si një rezultat absolut të provimit, por si një tregues të sinqertë të "a mbrojnë vërtet testet e mia?"

Qasja praktike është kjo: në vend që të ekzekutoni vazhdimisht testimin e mutacioneve në të gjithë bazën e kodit, ekzekutoni atë në modulet që përmbajnë rrezikun më të lartë dhe rregullat më komplekse të biznesit. Ekzaminoni mutacionet e mbijetuara në këto module një nga një; Nëse është një hendek i vërtetë, shtoni një test; nëse është një mutacion ekuivalent, shënojeni me arsyetim dhe kaloni. AI mund të kryejë shqyrtimin fillestar për të vlerësuar nëse një mutacion i mbijetuar është ekuivalent; por vendimin perfundimtar e merr ti qe e di cfare ben kodi.

Kujdes: Testimi i mutacionit është i kushtueshëm nga pikëpamja llogaritëse (të gjitha testet përkatëse përsëriten për çdo mutacion). Pra, një strategji e zakonshme dhe e arsyeshme është ta planifikoni atë si një kontroll të thellë javor ose para publikimit për modulet kritike, në vend të çdo bashkimi.

Prompt i dobët / Prompt i fortë

I dobët: "A janë testet e mia të mjaftueshme?"
Strong: "Veproni si një ekip i kuq për këtë funksion dhe grup testimi. (1) Gjeneroni 8 mutacione në kodin që mund të vritet (zëvendësimi i operatorit, zhvendosja e kufirit, përmbysja e gjendjes, zëvendësimi i vlerës së kthimit). (2) Për çdo mutacion, tregoni se cili nga testet ekzistuese do ta kap atë dhe cili NUK do ta arrijë. (3) Gjithashtu për çdo mutacion mund të shkruajë një test të ri nëse mund të mbijetojë. një shembull kodi që i kalon të gjitha këto teste, por shkel rregullin e kodit + testet e biznesit: [ngjit]"

Prompt i fuqishëm; Ai e pozicionon AI si një ekzaminues që thyen testet, jo një makinë lavdërimi.

Katër shabllone të kopjueshëm

1) Kontrolli manual i mutacioneve:

Gjeneroni 8 mutacione të rëndësishme (ndërprerje të vogla të qëllimshme) për këtë kod: zëvendësimi i operatorit aritmetik, kufiri i krahasimit (> vs >=), përmbysja logjike, kthimi/zëvendësimi i vazhdueshëm, kapërcimi i kushteve. Për çdo mutacion, parashikoni se cili nga testet e disponueshme do ta kap atë apo jo. Kodi+teste: [ngjit]

2) Vrasja e mutacionit të mbijetuar:

Raporti i mëposhtëm i testit të mutacionit përmban mutacione të mbijetuara (të pakapura): [lista/raporti]. Për secilën, shkruani një test minimal që do ta vrasë atë mutacion (kodi do të bëhet i kuq kur prishet në atë mënyrë). Komentoni se çfarë sjellje konfirmon testi.

3) Ekipi i kuq - testi i gjakut:

A mund të shkruani një kod që KALUAN TË GJITHA testet e mëposhtme, por shkel rregullin e mëposhtëm të biznesit: [rregulli i biznesit]. Nëse po, çfarë zbrazëtie në këto teste e lejon këtë? Shtoni testin që do ta mbyllë atë boshllëk. Testet: [ngjit]

4) Inspektimi i cilësisë së testit:

Kontrolloni këtë grup testimi për cilësinë. Shënoni për çdo test:- A ka një pohim të vërtetë apo është mbështetës?- A është vlera e pritshme e pavarur, që rrjedh nga kodi?- A verifikon rregullin e biznesit apo diçka të parëndësishme? Më në fund jepni një "rezultat të vërtetë të pohimit" të vlerësuar dhe 3 testet më të dobëta. Testet: [ngjit]

tre mini kuti

Rasti 1 - Mbulimi 92%, rezultati i mutacionit 38%. Një ekip u mbështet në mbulim të lartë. Kur testimi i mutacionit u krye me Stryker, rezultati ishte 38%: shumica e mutacioneve të prodhuara mbijetuan. Kjo ishte prova se testet nuk po kryenin linjat dhe nuk po verifikonin sjelljen. Ekipi investoi tre javë në testimin e cilësisë; Rezultati i mutacionit u rrit në 81%, dhe dy gabime reale në llogaritje u kapën nga këto teste të përforcuara në versionin e ardhshëm.

Rasti 2 - AI mashtroi testin. Me një shabllon "ekip i kuq", një ekspert i kërkoi AI kodin që kaloi testet ekzistuese, por shkelte rregullin e zbritjes. AI shkroi kodin që gjithmonë kthente një zbritje prej zero - dhe të gjitha testet mbetën të gjelbra sepse asnjë test nuk po verifikonte vlerën aktuale të zbritjes. Shihet boshllëk, pohime reale janë shtuar.

Rasti 3 - Kurthi i lavdërimit. Një testues i ri e pyeti AI: "A janë testet e mia të mira?" dhe u qetësua kur dëgjoi përgjigjen, "Shumë gjithëpërfshirëse". Kolegu i tij i lartë kishte të njëjtat teste të audituara duke përdorur shabllonin "auditimi i cilësisë së testit"; Doli që 12 nga 20 teste ishin dekor (pa pohim apo hedhurina). Pyetja e duhur solli përgjigjen e duhur.

Gabimet e zakonshme

  • Gabimi për cilësinë. Duke u mbështetur në mbulimin e lartë të rreshtave dhe duke mos parë fare rezultatin e mutacionit.
  • Duke i besuar lavdërimet e AI. Duke pyetur "A janë testet tuaja të mira?" dhe duke e konsideruar përgjigjen pozitive si siguri.
  • Nxjerrja e vlerës së pritur nga kodi. Testet vetë-verifikuese që konfirmojnë kodin e gabuar.
  • Jini të kënaqur me pohime të parëndësishme. Çeqe që nuk vërtetojnë rregullin aktual, të tilla si "jo null", "200 të kthyera".
  • Injorimi i mutacioneve të mbijetuara. Injorimi i asaj që nuk u kap në raportin e mutacionit.
  • As duke u përpjekur për të ndryshuar manualisht kodin kritik. Kapërcimi i hapit "thyeni kodin dhe testoni" nëse mjeti nuk është i disponueshëm.

Në përmbledhje

Pseudo-besimi është të besosh se softueri është i saktë sepse testet janë të gjelbra; ndërsa testet mund të mos konfirmojnë asgjë. Standardi i artë për matjen e kësaj është testimi i mutacionit: thyerja e qëllimshme e kodit dhe matja nëse testet e kapin atë. Rezultati i mutacionit është një masë shumë më e sinqertë e cilësisë sesa mbulimi i përqindjes. Inteligjenca artificiale prodhon pseudo-besim dhe bëhet një ekip i fuqishëm i kuq në gjuetinë e tij - pyetni "prodhoni një gabim që i kalon këto teste". Testoni testet tuaja: pohim i vërtetë, vlera e pritshme e pavarur, vërtetimi i rregullave të biznesit dhe mutacionet e vrarë.

Detyra e aplikimit

Importoni një funksion që përmban një rregull biznesi dhe testet e tij nga projekti juaj. Nëse është e mundur, ekzekutoni një mjet mutacioni (Stryker/Pitest/mutmut) dhe matni rezultatin e mutacionit; Nëse nuk ka asnjë mjet, gjeneroni të paktën 8 mutacione me shabllonin "manual mutation control" dhe provoni ato manualisht. Për çdo mutacion të mbijetuar, shkruani një test të ri me shabllonin "vrasni mutacionin e mbijetuar". Më në fund, me modelin "ekip i kuq", shikoni nëse AI mund të prodhojë kod që mashtron testet tuaja. Raportoni rezultatin tuaj të fillimit dhe përfundimit të mutacionit (ose shkallës së mutacionit të kapur/gjithsej).

listë kontrolli

  • [ ] Unë vlerësova cilësinë e testit sipas rezultatit të mutacionit, jo mbulimit.
  • [ ] Kam kryer testimin e mutacioneve (ose me mjet ose manualisht) për kodin kritik.
  • [ ] Kam shkruar teste të reja për çdo mutacion të mbijetuar.
  • [ ] Unë përdora AI si ekipin e kuq dhe kërkova boshllëqe në testet e mia.
  • [ ] Nuk e mora lavdërimin e AI "testet e tua janë të mira" si siguri.
  • [ ] Kontrollova që çdo test verifikon pohimin aktual, vlerën e pritshme të pavarur dhe rregullin e biznesit.