Fitimet:
- Aftësia për të prodhuar testimin e njësive, rastet e skajeve dhe analizën e hendekut të mbulimit me AI
- Aftësia për të printuar pritjet e testit bazuar në specifikimet, jo sjelljen aktuale të kodit
- Aftësia për të testuar nëse një test në të vërtetë mbron duke injektuar gabime
Shkrimi i testeve është një nga detyrat më me vlerë që shumica e zhvilluesve e shtyjnë. Një grup i mirë testimi është provë se kodi funksionon siç pritej dhe një shpëtim për ndryshimet e ardhshme. Problemi është se shkrimi i testeve është i përsëritur dhe kërkon shumë kohë - pikërisht lloji i punës ku AI shkëlqen. Por ka një kapje: AI shpesh teston sjelljen ekzistuese të kodit, jo sjelljen që duhet të jetë. Menaxhimi i këtij ndryshimi është thelbi i kësaj njësie.
Në këtë njësi, do të mësoni testimin e njësisë (testimin që teston vetëm një funksion, në izolim), testet e rasteve anësore dhe gjenerimin e të dhënave të testit me AI; mbyllja e boshllëqeve në mbulimin e testit; dhe pse besimi verbërisht i testeve të AI është i rrezikshëm.
Dy anët e testimit: Rregullimi i sjelljes kundrejt verifikimit
Një test mund të shërbejë për dy qëllime të ndryshme. E para është verifikimi: teston nëse kodi është i saktë, nëse përputhet me specifikimet. E dyta është mbrojtja nga regresioni: ngrin sjelljen e kodit sot, kështu që nëse dikush e ndryshon aksidentalisht nesër, testi do të prishet dhe do të njoftojë.
AI është shumë i mirë në këtë të fundit; Ai shikon kodin dhe gjeneron raste që testojnë "çfarë po bën tani". Por nëse kodi është i gabuar që në fillim, AI mund ta vendosë atë sjellje të gabuar si "të saktë". Pra, duhet të rishikoni pohimin e çdo testi që prodhon AI: "Kodi kthen 42 dhe testi pret 42" nuk do të thotë se 42 është përgjigjja e saktë.
Kujdes: Nëse AI e kalon testin, kjo nuk do të thotë se kodi "punon"; thjesht do të thotë "sillet ashtu siç e pret AI". Ju vendosni nëse pritshmëria është e saktë apo jo duke parë specifikimet.
Hap pas hapi: Shkrimi i testeve të forta me AI
- Jepni specifikimet, jo vetëm kodin. Nëse shtoni informacionin "Ky funksion duhet ta bëjë këtë", AI mund të shkruajë pritjen e saktë; Do të testojë sjelljen aktuale nëse thjesht jepni kodin.
- Pyetni për rastet e skajeve. Bosh, null, zero, negativ, shumë i madh, format i keq, konkurencë - pretendoni në mënyrë eksplicite nga rruga e lumtur.
- Specifikoni kornizën dhe stilin e testimit. "përdor pytest", "Arrange-Act-Assert model", "le çdo test të testojë një gjë" etj.
- Kontrollo pritshmëritë (pohimi). Krahasoni me specifikimin që çdo pohim kontrollon për vlerën e saktë.
- Mbyllni boshllëqet në fushëveprim. Jepni testet ekzistuese dhe pyesni "cilat degë dhe raste nuk janë testuar?" të bëj të pyesësh; pastaj verifikoni testet shtesë të prodhuara.
Tre Mini Rastet
Rasti 1 — Mbulimi nga 52% në 85%. Mbulimi testues i një moduli shërbimi ishte 52%. Ekipi ushqeu testet ekzistuese në AI, kërkoi që ajo të listonte degët e patestuara dhe të krijonte teste për to. Me rishikimin njerëzor, mbulimi u rrit në 85%; Gjatë procesit, AI zbuloi një gabim aktual (një shteg që kthente kodin e gabuar të gabimit) në një degë të gabimeve që nuk ishte testuar kurrë më parë.
Rasti 2 - Kurthi i fiksimit të pritjeve të rreme. Një funksion i rrumbullakosjes së parave ishte në fakt i gabuar; Në vend të rrumbullakosjes nga 2,675 në 2,67, ai ishte rrumbullakosur 2,67 në vend të 2,68. AI shikoi kodin dhe shkroi assert round_money(2.675) == 2.67 - duke e ngrirë gabimin si "të vërtetë". Kur zhvilluesi lexoi specifikimet, ai korrigjoi pritshmërinë dhe kapi gabimin e vërtetë. Testimi i rregullit, jo i kodit, bëri ndryshimin.
Rasti 3 - Shpërthimi i gjendjes së skajit. Kur kërkoni nga AI vetëm "rastet e skajshme" për një funksion të diapazonit të datave; Ai prodhoi 8 raste si fillim=mbarim, interval i kundërt, viti i brishtë 29 shkurt, zona të ndryshme kohore dhe interval null. Dy prej tyre (ndarja e kundërt dhe viti i brishtë) në fakt po shkaktonin gabimin. Shqyrtimi i këtyre rasteve me dorë shpesh anashkalohet; Inteligjenca artificiale u bë një partner i “brainstorming-ut të rastit” këtu.
Katër modele të kopjueshme
Gjenerimi i testit të bazuar në specifikime:
Roli: Një zhvillues që shkruan teste. Korniza: {{pytest/JUnit/Jest...}}. Çfarë duhet të bëjë funksioni (specifikim): {{rule}}Shkruani teste për funksionin e mëposhtëm. Shkruani pritjet sipas specifikimeve, JO sipas daljes aktuale të kodit. Rruga e lumtur + shtoni të paktën 4 kuti anësore. Lëreni çdo test të testojë një gjë, përdorni emër përshkrues. {{funksion}}
Stuhi mendimesh me rastin e skajit:
Listoni rastet e skajeve/dështimeve që duhet të provohen gjatë testimit për këtë funksion (nul, null, pikat e ndërprerjes, formati i keq, konkurenca, gabimi i jashtëm). Për çdo rast: hyrje, sjellje e pritshme. MOS shkruaj kod ende, thjesht listo.{{funksion}}
Analiza e boshllëkut të mbulimit:
Më poshtë janë funksionet dhe testet e disponueshme. Cilat degë, kushte dhe raste nuk janë testuar? Rendisni mangësitë dhe shkruani teste të reja vetëm për mangësitë. Mos i përsëritni ato ekzistuese. Funksioni:{{funksion}}Testet:{{existing_tests}}
Të dhënat e testimit / gjenerimi i objekteve tallëse:
Gjeneroni të dhëna realiste testimi për testet e {{funksionit/shërbimit}}: mostra të vlefshme, kampione kufiri dhe mostra të pavlefshme veçmas. Sugjeroni një sjellje të thjeshtë tallëse për varësinë e jashtme {{X}}. Përdorimi i të dhënave të vërteta konfidenciale/PII; Gjeneroni të dhëna të rreme.
Prompt i dobët / Prompt i fortë
E dobët: "Shkruani një test për këtë funksion."
E fortë: "me pytest. Funksioni application_discount(total, përqindje) — rregulli: zbritja duhet të jetë 0%–30%, jashtë kufijve duhet të hedhë ValueError, rezultati duhet të rrumbullakoset në 2 dhjetore. Shkruajini pritshmëritë me këtë RREGULL (jo me kod). Happy path + këto raste të skajeve: 0%, 30%, 31% gjithsej (derror.
Ai jep rregullin e lirimit të fortë dhe thotë “shkruaje pritshmërinë sipas rregullit, jo kodit”; Kjo fjali e vetme mbyll kurthin e AI që rregullon sjelljen e keqe.
Lloji i testit
Kontributi i AI
kontrolli njerëzor
Gëzuar testimin e njësisë rrugore
skelet i shpejtë
A është e saktë pritshmëria?
Rastet e skajeve
Stuhi mendimesh e gjerë
Eliminoni të parëndësishmen
Mbushja e boshllëkut të fushëveprimit
Gjen degët e anashkaluara
Konfirmoni rëndësinë
Të dhënat e testimit / tallja
Prodhon mostër realiste
Jo PII, kontroll realizmi
Testet menaxhojnë cilësinë, nuk e garantojnë atë
Mbulimi i lartë i testit jep besim, por mund të jetë edhe mashtrues: mbulimi 100 për qind do të thotë "çdo rresht u ekzekutua", jo "çdo rresht është i saktë". Është e lehtë të rritet mbulimi me AI; Vlera e vërtetë është në shkrimin e pritshmërive kuptimplote. Vlera e një testi është aftësia e tij për të thyer dhe paralajmëruar kur kodi është i prishur. Kjo është arsyeja pse testet e krijuara nga AI bazohen në pyetjen "a prishet vërtet kodi kur ndryshon?" Provoje me pyetjen; Thyerja e qëllimshme e një linje dhe shikimi i ndërprerjes së testit (ideja e mutacionit) është provë se testi funksionoi.
Këshillë: Për të parë nëse një test që shkruan AI funksionon, krijoni një gabim të vogël në kod (p.sh. ndryshoni një + në një -) dhe shikoni nëse testi prishet. Nëse nuk prishet, ai test nuk ju mbron.
Gabimet e zakonshme
- Kërkoni një test pa dhënë rregullin. Modeli ngrin sjelljen aktuale; e rregullon gabimin si "të vërtetë".
- Pranimi i pritshmërive pa i lexuar ato. Testimi është mashtrues nëse nuk kontrolloni që pohimet po kontrollojnë për vlerën e saktë.
- Vetëm duke testuar rrugën e lumtur. Gabimet reale jetojnë në margjina; Kërkoni në mënyrë eksplicite për rastet e skajeve.
- Gabimi i fushëveprimit për qëllimin. Një përqindje e lartë nuk është garanci për sjellje korrekte.
- Krijimi i të dhënave reale/të fshehura si të dhëna testimi. Të dhënat ose sekretet e klientit nuk duhet të hyjnë në testim dhe ruajtje; Gjeneroni të dhëna sintetike.
Në përmbledhje
AI heq shumë nga barra e përsëritur e testeve të shkrimit: ajo prodhon skelete të shpejta, lista të mëdha të rasteve të skajeve dhe analiza të boshllëqeve të mbulimit. Por pika më kritike janë pritjet: AI tenton të testojë sjelljen aktuale të kodit, ndërsa testimi duhet të shkruhet sipas specifikimeve. Jepni rregullin, kontrolloni pritshmëritë, zbatoni rastet e skajshme dhe provoni nëse testet në të vërtetë mbrojnë duke injektuar një defekt. Mbulimi i testit është një mjet, jo një qëllim.
Detyra e aplikimit
Zgjidhni një funksion dhe fillimisht printoni një test në AI duke dhënë thjesht kodin e tij; Vini re pritshmëritë. Pastaj printoni përsëri testin, duke dhënë specifikimin (sjelljen e kërkuar) për të njëjtin funksion. Krahasoni pritshmëritë e dy grupeve të testimit: a ka ndonjë të ndryshme, cila zbulon një gabim të vërtetë? Më në fund, verifikoni që një nga testet e krijuara funksionoi duke shtuar një gabim të qëllimshëm në kod dhe duke parë pushimin e provës.
listë kontrolli
- [ ] Unë dalloj nëse testi është për të rregulluar apo verifikuar sjelljen.
- [ ] Kur kërkoj një provë, unë jap rregullin (specifikimin) që duhet të jetë në vend, jo kodin.
- [ ] Unë krahasoj çdo pohim të krijuar me specifikimin.
- [ ] Kërkoj në mënyrë eksplicite raste të skajeve dhe dështimeve.
- [ ] Unë e shoh mbulimin e përqindjes si një mjet, jo një qëllim.
- [ ] Unë testoj nëse një test mbron vërtet duke injektuar gabime.