Vienība 6 / 12

Testu automatizācija un kvalitātes nodrošināšana

Ieguvumi:

  • Spēja izveidot vienību, integrācijas un malu gadījumu testus ar jēgpilnu apgalvojumu ar AI
  • Spēja sistemātiski iegūt testa pārklājumu, robežvērtības un negatīvus scenārijus ar AI atbalstu
  • Spēja pārbaudīt, vai AI izveidotie testi patiešām pārbauda uzvedību, nevis tikai atkārto esošo kodu

Testēšana ir mehānisms, kas pierāda, ka programmatūra patiešām darbojas, kā solīts. Labs testa komplekts dažu sekunžu laikā parāda, vai izmaiņas kaut ko sabojā, un dod inženierim brīvību rīkoties ar pārliecību. AI paātrina visnogurdinošāko un visvairāk izlaisto testa rakstīšanas posmu: ģenerē daudzus scenārijus, pārtraukuma punktus un negatīvus gadījumus. Bet šeit ir viltīgs slazds: AI var rakstīt testus, kas pārbauda koda pašreizējo (iespējams, kļūdaino) uzvedību, nevis tā domājamo uzvedību; vai arī tas var radīt tukšus testus, kas vienmēr iziet, faktiski neko nepārbaudot. Pārbaudes vērtība nav tajā, vai tas ir izturēts, bet gan tajā, vai tas pārbauda pareizo lietu un kļūst sarkans, ja tas ir nepareizi.

Šajā nodaļā jūs uzzināsit, kā izveidot vienību, integrācijas un malas gadījumu testus ar jēgpilniem apgalvojumiem; kā sistemātiski iegūt testa pārklājumu, pārtraukuma punktus un negatīvos scenārijus; un mēs redzēsim, kā jūs varat pārbaudīt, vai AI veiktie testi patiešām apstiprina uzvedību.

Jēdzieni: vienību testēšana: pārbauda vienu funkciju/klasi atsevišķi. Integrācijas pārbaude: pārbauda, ​​vai vairākas daļas pareizi darbojas kopā. Assert: paziņojums, kas pārbauda, ​​vai rezultāts ir vienāds ar gaidīto; Šī ir testa būtība. Pārklājums: cik lielu daļu koda izpilda testi; Augsts pārklājums negarantē kvalitāti.

Nozīmīgu testu sagatavošana

Labs tests skaidri dara trīs lietas: nosaka stāvokli, veic darbību, apstiprina rezultātu. Drukājot AI testus, norādiet, kādu uzvedību vēlaties pārbaudīt un kādi scenāriji tai būtu jāaptver; Pretējā gadījumā tas rada virspusējus testus, kas vienmēr iztur.

  1. Definējiet pārbaudāmo uzvedību. "Kas tiek uzskatīts par pareizu?" Skaidri atbildiet uz jautājumu.
  2. Jautājiet par scenāriju veidiem. Normāls, limits, negatīvs, kļūdas stāvoklis.
  3. Importēt jēgpilnu apgalvojumu. Tas ne tikai "izmeta kļūdu", bet arī "atgrieza pareizo vērtību".
  4. Pārbaudiet testa precizitāti. Vai tests kļūst sarkans, kad apzināti pārkāpjat kodu?

Visaptveroša testa ģenerēšanas uzvedne: "Rakstiet vienības testus šādai funkcijai "piemērot atlaidi(summa, kupons)". Jābūt VISMAZ vienam scenārijam šādās kategorijās: (1) normāls derīgs kupons, (2) pārtraukuma punkti (0 summa, 100% atlaide), (3) negatīvs (nederīgs kupons, negatīva summa), (4) neatbilst katras paredzamās kļūdas pārbaudes gadījumam. tikko "strādāja").

Robežvērtības iegūšanas uzvedne: "Veiciet šīs funkcijas ievades robežvērtību analīzi. Katram parametram izņemiet vērtības "tieši pie robežas", "tieši zem robežas", "tieši virs robežas" kā tabulu. Pēc tam norādiet testa scenārijus, kas aptver šīs robežas. Vēl nerakstiet kodu, tikai analīzi un [scenāriju sarakstu]."

Uzmanību! Augsts testa pārklājums (piemēram, 90%) nepierāda, ka kods ir pareizs. Pārklājums mēra, cik rindu tika izpildītas; ne tas, ka šīs līnijas rada pareizo rezultātu. Pārbaude bez jēgpilna apgalvojuma palielina pārklājumu, bet neko negarantē. Apgalvojuma saturs nosaka kvalitāti, nevis apgalvojumu skaitu.

Paša testa pārbaude: mutācijas loģika

Vispraktiskākais veids, kā saprast, vai mākslīgā intelekta ģenerētais tests patiešām darbojas, ir apzināti lauzt kodu (mutāciju pārbaudes loģika). Apgrieziet nosacījumu, izveidojiet + zīmi -; Ja neviens tests nekļūst sarkans, jūsu testi faktiski neuztur šo uzvedību.

Testa ievainojamības meklēšanas uzvedne: "Pastāstiet man, kuras iespējamās kļūdas šajā kodā NEDRĪKST uztvert tālāk norādītos testus. Iesakiet 5 mazas mutācijas, ko varētu veikt kodā (piemēram, >= vietā >, -, nevis +) un norādiet katram, vai esošie testi varētu to uztvert. Tiem, kas nav notverti, iesakiet veikt testēšanu, kas būtu jāpievieno. Kods: [kods] Testi: [tests]"

Vāja uzvedne / spēcīga uzvedne

VĀJS: "Uzrakstiet šīs funkcijas testu." (Rezultāts: parasti viens laimīgs scenārijs, vājš apgalvojums; izlaiž kļūdas.) STRONG: "Uzrakstiet šīs funkcijas "passwordStrong" testu. Noteikums: vismaz 8 rakstzīmes, 1 lielais burts, 1 cipars. Aptveriet šādus scenārijus kā Atsevišķus testus: tieši 8 rakstzīmes (ierobežojums), 7 rakstzīmes (bez augšējiem burtiem, tikai bez burtiem, atstarpes, pārāk garš (1000 rakstzīmes) katrā pārbaudē skaidri norādiet paredzamo patieso/nepatieso vērtību un nosauciet testu atbilstoši tam, ko tas pārbauda."

Spēcīga uzvedne sniedz noteikumus un pilnīgus robežu scenārijus. Robežu pāri, piemēram, "tieši 8/7 rakstzīmes", ir visizplatītākās kļūdas (jaucot > ar >=). Vāja uzvedne apiet šīs robežas un pārnes kļūdu uz ražošanu.

Testu veidi un kur izmantot

Pārbaudes veids

Ko tas apstiprina?

AI ieguldījums

Uzmanību

vienība

Viena funkcija/klase

Ātri ģenerē vairākus scenārijus

Nepieciešams jēgpilns apgalvojums

integrācija

Daļas, kas darbojas kopā

Scenārijs un izspēles datu melnraksts

Patiesa atkarību izraisoša uzvedība

beigt/pieņemt

Visa lietotāju plūsma

Soļu saraksts un cerības

nosliece uz trauslumu

regresija

Vecā kļūda neatgriežas

Kļūdu specifiska pārbaude

Jāpievieno katram labojumam

Mini futrāļi

1. gadījums — pārbaude, kas vienmēr iztur. AI ieraksta funkcijai 12 testus, un tie visi iztur. Inženieris kļūst aizdomīgs un apzināti izkropļo funkcijas atgriešanās vērtību; Tikai 3 no testiem kļūst sarkani. Pārējie 9 testi nesatur nozīmīgus apgalvojumus. Testēšanu pastiprina mutāciju medības; reāla aizsardzība tiek iegūta 9 scenārijos.

2. gadījums — robežkļūda. Vecuma verifikācijas funkcijā ir jābūt uzrakstam "18 un vairāk ir derīgs", bet ir rakstīts >18, kas nozīmē, ka vecums 18 tiek noraidīts. Kļūda nekavējoties parādās testēšanas laikā, jo AI ģenerē “tieši 18” scenāriju, izmantojot pārtraukuma punktu analīzi. Viena limita pārbaude novērš reālas lietotāju sūdzības.

3. gadījums — pašreizējās uzvedības labošana. Kad AI tiek likts "uzrakstīt testu, pamatojoties uz šo kodu", tas rada testu, kas pieņem kā "pareizu" noapaļošanas kļūdu, kas jau pastāv kodā. Kad inženieris izdrukā testu atbilstoši prasībai (paredzamā pareizā vērtība), nevis kodu, tests kļūst sarkans un rodas īstā kļūda. Pārbaudes ir jāatvasina no gaidām, nevis no koda.

Biežas kļūdas

  • Bezjēdzīgs apgalvojums. Ar "neizmetu kļūdu" nepietiek; Ir jāpārbauda pareizā vērtība.
  • Jauc darbības jomu ar kvalitāti. Augsts pārklājums negarantē precīzu rezultātu.
  • Testa drukāšana pēc koda. Izlabo pašreizējo kļūdu uz "true"; Pārbaudēm ir jābalstās uz cerībām.
  • Robežvērtību izlaišana. Sajaukšana > ar >= ir visizplatītākā kļūda; robežpāri ir jāpārbauda.
  • Nepārbauda pašu testu. Pārbaude, kas, pārkāpjot kodu, nekļūst sarkana, nenodrošina aizsardzību.

Rezumējot

Labs testēšanas komplekts ir atslēga, lai ar pārliecību veiktu izmaiņas. AI ātri ģenerē daudzus scenārijus, robežas un negatīvas situācijas; Bet, ja tas testus iegūst no koda, nevis prasībām, tas var novērst esošās kļūdas vai uzrakstīt bezjēdzīgus testus, kas vienmēr iztur. Katrā testā norādiet konkrētu paredzamo vērtību, iekļaujiet saistītos pārus un pārbaudiet, vai jūsu testi patiešām aizsargā, apzināti pārkāpjot kodu. Kvalitāti nosaka apgalvojuma saturs, nevis tvērumu skaits.

Lietojumprogrammas uzdevums

Atlasiet funkciju un ļaujiet tai ģenerēt četras kategorijas (normāla, ierobežojoša, negatīva, kļūda) testus ar visaptverošu testa ģenerēšanas uzvedni; Katrā pārbaudē apstipriniet konkrētu paredzamo vērtību. Pēc tam palaidiet testa ievainojamības meklēšanas uzvedni, iesakiet 5 nelielas mutācijas kodā un palaidiet testus, lai pārbaudītu, kuras no tām tiek uztvertas. Pievienojiet jaunu testu vismaz vienai mutācijai, kas netika noķerta, un parādiet, ka tā tagad ir mīnusā.

kontrolsaraksts

  • [ ] Es izdrukāju testus, pamatojoties uz paredzamo/pareizo uzvedību, nevis kodu.
  • [ ] Es apskatīju parasto, limita, negatīvo un kļūdu scenārijus.
  • [ ] Katrā testā es apstiprināju konkrētu paredzamo vērtību.
  • [ ] Es pārbaudīju apmales pārus (tieši virs-zem / tieši virs-zem).
  • [ ] Apzināti uzlaužot kodu, es apstiprināju, ka testi kļuva sarkani.
  • [ ] Es pievienoju jaunu testu neatklātām mutācijām.