Eining 6 / 11

Einingaprófun og prófunarhæfni: Öflugar prófanir með gervigreind

Hagnaður:

  • Geta til að koma í veg fyrir að gervigreind samþykki ranga hegðun sem „rétt“ með því að reikna út væntanlegt gildi í einingarprófum óháð samþykktarreglunni
  • Geta til að prenta hröð, óháð og endurtekin próf með því að beita AAA og FIRST meginreglum og hæðast að ytri ósjálfstæði
  • Geta til að prófa próf með stökkbreytingum (kóðabrot) og þekkja kóða sem erfitt er að prófa sem hönnunarlykt

Stærsta og fljótlegasta lagið í prófunarpýramídanum er einingaprófun - prófun sem sannreynir aðgerð eða lítinn kóða í einangrun frá öllu öðru. Þúsundir einingaprófa keyra á nokkrum sekúndum og ná villu á meðan kóðinn er enn á skjá þróunaraðilans. Gervigreind (AI) er ef til vill færust í að framleiða einingapróf: þú gefur henni aðgerð, gervigreind framleiðir heilmikið af prófum. En einmitt þessi þægindi gefa tilefni til stærstu gildrunnar: gervigreind framleiðir auðveldlega próf sem „glóa grænt en sannreyna ekki neitt“ eða samþykkja núverandi (kannski gallaða) hegðun kóðans sem „rétt“. Í þessari einingu muntu læra hvernig á að skrifa sannkölluð verndareiningapróf með gervigreind og tengslin milli prófanlegs kóða og gervigreind.

Eiginleikar góðs einingaprófs: FYRST

Góð einingapróf fylgja FYRSTU meginreglunum: Hratt, Óháð (próf ættu ekki að vera háð hvert öðru), Endurtekið (endurtekið — sama niðurstaða í hvaða umhverfi sem er), Sjálfstætt staðfesting (skýrt staðist/fall), Tímabært (á réttum tíma). Minntu þig á þessar meginreglur þegar gervigreind framleiðir próf; biðja sérstaklega um að prófið sé ekki háð umheiminum (raunverulegur gagnagrunnur, netkerfi, klukka) til að vera "óháð" og "endurtaka".

AAA mynstur og svipmikill fullyrðing

Fast einingapróf fylgir AAA uppbyggingu: Raða (undirbúa - setja upp inntak og ósjálfstæði), framkvæma (framkvæma - kalla á fallið sem er prófað), fullyrða (staðfesta - bera saman niðurstöðuna við væntanlegt gildi). Sá gagnrýni er fullyrðing. Algengustu mistökin sem gervigreind gera eru að draga fullyrðinguna út frá úttak kóðans sem verið er að prófa - „hvað sem kóðinn skilar er satt“ rökfræðin. Þetta gerir prófið tilgangslaust. Rétta leiðin er að ákvarða vænt gildi sjálfstætt (út frá samþykkisviðmiðunum, reiknaðu það handvirkt).

Athugið: Ef þú segir gervigreindinni „skrifaðu próf fyrir þessa aðgerð“ gæti gervigreindin keyrt aðgerðina og skrifað úttak hennar sem „vænt“. Þetta próf stenst jafnvel þótt aðgerðin sé röng. Í staðinn, segðu "þú reiknar út væntanlegar niðurstöður samkvæmt þessum reglum, ekki vísa til núverandi úttaks fallsins."

Spor, stubbar og ósjálfstæði

Einingaprófun krefst einangrunar. Ef aðgerðin þín er háð gagnagrunni eða API, er þeim skipt út fyrir spotta hluti (spotta/stubbur - stjórnað, dummy staðgengill fyrir raunverulega ósjálfstæði) í prófun. Þetta gerir prófið hraðvirkt, óháð og endurgeranlegt. AI getur framleitt sýndaruppsetningu; En varist óhóflega háði: ef þú spottar allt mun prófið aðeins sannreyna „hverju spottinn skilar“, ekki raunverulegri rökfræði. Jafnvægi: líkja eftir umheiminum, framkvæma raunverulega rökfræði sem verið er að prófa.

Prófunarhæfni og gervigreind

Það eru áhugaverð viðbrögð: kóði sem er erfitt að prófa er oft illa hannaður kóði. Ef gervigreind á í vandræðum með að skrifa próf á aðgerð (of mörg ósjálfstæði, falið hnattrænt ástand, aukaverkanir), þá er það hönnunarlykt. Að spyrja gervigreindina „hvernig myndirðu endurskoða þennan kóða til að gera hann prófanlegan“ leiðir til bæði betri prófunar og betri kóða.

Parametrisized próf og gagnafjölbreytileiki

Að skrifa sérstakt próf í hvert sinn til að sannreyna sömu reglu með mismunandi inntak er bæði leiðinlegt og erfitt að viðhalda. Parameterized prófun - uppbygging sem keyrir ítrekað sömu prófunarrökfræðina á lista yfir inntak og væntanlegar niðurstöður - útilokar þessa endurtekningu: einn prófunarhluti er fóðraður með tugum inntakspara. Gervigreind er mjög dugleg að framleiða þessar inntaksvæntar niðurstöðutöflur þegar þú gefur henni samþykkisreglur þínar; Sérstaklega eru kerfisbundin töflur sett fram viðmiðunarmörk og jafngildisflokka.

En það er gildra hér líka: gervigreindin hefur tilhneigingu til að draga þær niðurstöður sem búist er við í mynduðu töflunni úr kóðanum sem verið er að prófa. Þessi villa er enn hættulegri í prófun með færibreytum, vegna þess að ein röng rökfræði ógildir tugi lína. Láttu því alltaf reikna út væntanleg niðurstöðu dálkinn sjálfstætt samkvæmt samþykkisreglunni og staðfesta handvirkt að minnsta kosti nokkrar línur. Biddu einnig um lýsingardálk "hvað táknar hver röð"; þannig að þegar röð brotnar sérðu samstundis hvaða ástand er bilað.

Ábending: Bættu viljandi „gildrulínu“ við prófunartöfluna með breytu - það er að segja rangt skrifað niðurstöðuna. Ef þessi lína verður ekki rauð þegar þú keyrir prófið er prófið þitt ekki að sannreyna það ástand. Þetta er skyndilegt athugun.

Veik kvaðning / Sterk kvaðning

Veikt: "Skrifaðu einingapróf fyrir þessa aðgerð."
Sterkt: Skrifaðu [tungumál/ramma] einingarpróf fyrir "taxCalculate(amount, rate) fallið. Samþykkisregla: útkoma = upphæð * hlutfall, námundað að 2 aukastöfum; neikvæð upphæð eða hlutfall gefur villu; skilar 0 ef hlutfall er 0. Notaðu AAA uppbyggingu. Reiknaðu væntanleg gildi handvirkt í samræmi við ÞESSAR núverandi reglur, ekki vísað til mjög neikvæðra falla, 0, neikvæða fallið, ekki tilvísun til mjög neikvæðra falla. umferð að aukastöfum). Láttu nafn hvers prófs lýsa reglunni sem það staðfestir "Nei."

Öflug hvetja; Það gefur samþykkisregluna, óháða væntingargildi, uppbyggingu og jaðartilvik. Þannig verður prófið verndari reglunnar, ekki spegill kóðans.

Einingaprófunargæðatafla

einkenni

Slæmt próf (falstraust)

gott próf

fullyrða

Ekkert eða "ekki núll"

Væntanlegt steypuverðmæti

Væntanlegur gildisuppspretta

Úttak aðgerðarinnar

Samþykkisregla / handvirkur útreikningur

fíkn

Raunveruleg DB/net/klst

Einangrað með spotti/stubbi

brún tilfelli

Aðeins hamingjusamur vegur

takmörk, neikvæð, villa

Þegar þú brýtur kóðann

helst grænt

verður rauður

Nafn

próf1, prófaðferð

lýsir reglunni sem það staðfestir

Fjögur afritanleg sniðmát

1) Regludrifin einingaprófun:

Hlutverk þitt: yfirmaður hugbúnaðarprófunarverkfræðings. Skrifaðu einingapróf á eftirfarandi falli með [tungumáli/ramma]: [undirskrift]. Samþykkisreglur: [reglur].- Notaðu AAA uppbyggingu.- Reiknaðu væntanleg gildi handvirkt samkvæmt ÞESSUM reglum; EKKI vísa til núverandi úttaks aðgerðarinnar. - Náðu yfir mörk, neikvæð, villu og hamingjusöm leið með aðskildum prófum. - Láttu hvert prófheiti lýsa reglunni sem það staðfestir. - Spottaðu á ytri ósjálfstæði; Láttu raunverulega rökfræði virka.

2) Stökkbreytingarviðnámsstýring:

Skoðaðu þessar einingaprófanir. Nefndu 5 minniháttar breytingar sem ég gæti gert á kóðanum sem er í prófun (a - í staðinn fyrir +, a >= í stað >, mörkabreytingu) og segðu mér fyrir hverja og einn HVAÐ af þessum prófum verður rautt? Ef engum er skilað er prófið ófullnægjandi. Kóði + próf: [líma]

3) Prófunarrýni:

Hvers vegna er erfitt að skrifa einingapróf fyrir þessa aðgerð? Falin fíkn, alþjóðleg staða, aukaverkanir, eru skyldurnar margar? Leggðu til lágmarks endurstillingu til að gera það prófanlegt; ekki breyta hegðun. Kóði: [líma]

4) Ófullnægjandi atburðarás:

Eftirfarandi aðgerð og tiltæk próf eru gefin upp. Listaðu hvaða hegðun/kanttilfelli hefur ALDREI verið prófað (scope gap) og bættu við prófi fyrir hvert. Virkni+próf: [líma]

þrjú smámál

Tilvik 1 — Próf sem speglar kóðann. Hönnuður lét gervigreindina skrifa próf fyrir námundunaraðgerðina; 10 próf voru græn. Reyndar var aðgerðin námunduð í ranga átt, en gervigreindin hafði tekið væntanleg gildi úr úttak aðgerðarinnar, þannig að prófin töldu villuna „sanna“. Þegar væntanleg gildi voru reiknuð út handvirkt með „regludrifnu“ sniðmátinu urðu 4 próf rauð og raunveruleg villa kom í ljós.

Tilfelli 2 — Gildi stökkbreytingarstjórnunar. Eitt lið treysti á 45 einingapróf. Prófaði 20 minniháttar breytingar á kóðanum með "stökkbreytingarstyrkleikaathugun"; próf náðu aðeins 11 þeirra. Hinar 9 truflanir liðu í hljóði. Liðið styrkti veik próf; Raunveruleg útreikningsvilla var gripin af þessum auknu prófunum í næstu útgáfu.

Tilfelli 3 - Óprófanleiki er hönnunarlykt. Gervigreindin gat ekki skrifað próf fyrir pöntunaraðgerð, það þurfti stöðugt raunverulegan gagnagrunn. Sniðmátið „prófunarhæfni“ sýndi að aðgerðin var innbyggður gagnagrunnsaðgangur. Þegar ávanasprautan var fjarlægð var hægt að skrifa próf og kóðinn varð hreinni.

Algeng mistök

  • Að draga væntanlegt gildi úr kóða. AI ​​samþykkir aðgerðarúttakið sem "rétt"; próf sem staðfestir gallaðan kóða.
  • Próf án fullyrðingar eða með léttvægum fullyrðingum. "Hann kastaði ekki villu, hann fór framhjá" rökfræði; Það staðfestir ekki neitt.
  • Mikill spotti. Að hæðast að öllu og prófa aðeins það sem spottan skilar; raunveruleg rökfræði er ekki prófuð.
  • Bara gleðilega veginn. Framhjá mörkum, neikvæðum og villustöðu.
  • Ekki prófa með því að brjóta kóðann. Að treysta grænu án þess að athuga hvort stökkbreytingar séu.
  • Hunsa óprófanleika. Að þekkja ekki og laga slæma hönnun í stað þess að ýta undir erfiðar prófanir.

Í stuttu máli

Einingapróf eru hraðasta og stærsta lagið í prófunarpýramídanum; Það grípur mistökin á ódýrustu augnabliki. AI er mjög fær um að framleiða einingapróf, en stærsti gildra þess er að skrifa próf sem gera ráð fyrir að ranga hegðun sé „rétt“ með því að draga væntanlegt gildi úr kóðanum sjálfum. Lausn: gefðu samþykkisreglurnar, láttu reikna út væntanleg gildi handvirkt, framfylgja AAA og FIRST meginreglunum, spotta umheiminn og keyra raunverulega rökfræði og prófa hvert próf með stökkbreytingum (brjóta kóðann). Kóði sem erfitt er að prófa er hönnunarmerki sem þarf að laga.

Umsóknarverkefni

Veldu aðgerð sem inniheldur viðskiptareglu úr þínu eigin verkefni. Skrifaðu samþykkisreglur og láttu gervigreindina skrifa próf með „regludrifnu einingaprófun“ sniðmátinu; Láttu reikna út væntanleg gildi handvirkt. Notaðu síðan „stökkbreytingarstyrkleikaathugun“: gerðu að minnsta kosti 5 lítil brot á kóðanum og mældu hversu mörg próf verða rauð. Bættu við nýju prófi fyrir óupptekna spillingu. Tilkynntu hversu margar truflanir fundust (svo sem stökkbreytingarstig).

gátlisti

  • [ ] Ég gaf upp samþykkisreglurnar og lét reikna út væntanleg gildi handvirkt.
  • [ ] Ég vissi að prófin leiddu ekki væntanlegt gildi úr kóðanum.
  • [ ] Ég hef komið á fót óháðum prófunum í samræmi við AAA og FIRST leiðbeiningar.
  • [ ] Ég gerði gys að ytri ósjálfstæði og rak raunverulega rökfræði.
  • [ ] Ég fjallaði um mörk, neikvæð og villutilvik.
  • [ ] Með því að brjóta kóðann (stökkbreytingu) sannaði ég að prófin vernda örugglega.