Vienība 9 / 11

Regresijas testēšana, testu uzturēšana un trauslu testu apkarošana

Ieguvumi:

  • Izprast regresijas testēšanas mērķi un prast atlasīt testus un izveidot regresijas gadījumus atbilstoši mākslīgā intelekta izmaiņām
  • Spēja diagnosticēt trauslu testu pamatcēloņus (laiks, pasūtījuma atkarība, kopīgs stāvoklis, ārējā atkarība) un piemērot pastāvīgus risinājumus, nenomācot simptomu
  • Spēja ievērot disciplīnu par pilnas pakotnes pirmsizlaides palaišanu, vienlaikus saglabājot regresijas komplektu ātru, neatkarīgu un uzticamu, novēršot dublikātu testēšanu

Programmatūra pastāvīgi mainās; Katra jauna funkcija, katrs labojums var sabojāt kaut ko, kas darbojās iepriekš. Sekojošo iepriekš darbojošos funkciju traucējumus sauc par regresiju. Regresijas testēšana ir esošās funkcionalitātes atkārtota pārbaude ar katru izmaiņu, lai uztvertu šīs degradācijas. Laika gaitā šie testu komplekti kļūst arvien lielāki — tūkstošiem testu — un rodas divas lielas problēmas: komplekts palēninās, un nestabilie testi — neuzticami testi, kas dažkārt iztur un dažreiz neizdodas vienā un tajā pašā kodā, iznīcina komandas pārliecību par testa rezultātiem. Mākslīgais intelekts (AI) ir spēcīgs palīglīdzeklis, lai regresijas komplekts būtu labi uzturēts, ātrs un uzticams. Taču galvenais brīdinājums paliek: lai gan AI var piedāvāt "izturēt" trauslu testu, tas bieži vien var radīt ielāpu, kas aizsedz īstu kļūdu. Jūsu uzdevums ir atrast nestabilitātes galveno cēloni, nevis apspiest simptomu.

Trauslo testu galvenie cēloņi

Trauslā testēšana ir vismānīgākā testēšanas problēma: tā ir neuzticama, vai tā iztur vai neizdodas, iespiežot komandu pie ieraduma "tā laikam atkal ir iestrēgusi, palaidiet to vēlreiz" — un šis ieradums kādu dienu ignorēs īstu kļūdu kā "pārslveida". Galvenie cēloņi:

  • Laiks/sacīkšu stāvoklis: testā tiek pārbaudīts rezultāts, negaidot, kamēr darbība beigsies. Visizplatītākais iemesls.
  • Pasūtījuma atkarība: testi ir atkarīgi no viena otra atstātajiem datiem; Tas sabojājas, kad mainās kārtība.
  • Koplietots gadījums: vairākos testos tiek izmantoti tie paši testa dati/lietotājs, konfliktējoši.
  • Ārējā atkarība: reāls tīkls, trešās puses pakalpojums, sistēmas laiks, nejauša vērtība.
  • Vides atšķirība: pārslēdzas uz vietējo, paliek CI (nepārtrauktas integrācijas vidē).
Uzmanību! Trausla testa nokārtošana, "mēģinot vēlreiz dažas reizes", bieži vien maskēs reālu vienlaicības kļūdu. Atkārtots mēģinājums ir diagnostikas rīks, nevis ārstēšana. Vispirms atrodiet galveno cēloni; Izmantojiet atkārtotu mēģinājumu tikai kā pēdējo līdzekli dokumentētas, patiesi ārējas nestabilitātes novēršanai.

Testa apkope: saglabājiet iepakojumu veselīgu

Regresijas komplekts ir kā dārzs; Ja nerūpēsies, nezāles pārņems. AI palīdz veikt trīs apkopes uzdevumus:

1. Dublēta/nevajadzīga pārbaudes tīrīšana. Laika gaitā liels skaits gadījumu uzkrājas, pārbaudot vienu un to pašu. AI iesaka grupēt un apvienot līdzīgus testus.

2. Trauslā testa diagnoze. Jūs piešķirat AI testa kodu un nestabilitātes modeli; ierosina iespējamos pamatcēloņus un pastāvīgu risinājumu.

3. Testa atlase/prioritāšu noteikšana. Ir dārgi palaist visu paketi ar katru izmaiņu. Izmantojot testa ietekmes analīzi (atlasot tikai atbilstošos testus, pamatojoties uz mainītu kodu), mākslīgais intelekts iesaka, kurus testus vajadzētu palaist vispirms. Tomēr pilna pirmsizlaides pakotne ir obligāta.

Karantīna: trauslas testēšanas pareiza pārvaldība

Jūs esat atklājis, ka pārbaude ir trausla, taču jums nav laika nekavējoties novērst galveno cēloni. Ko darīt? Ir divi nepareizi veidi: pilnībā dzēst testu (šāda uzvedība vairs netiek saglabāta) vai apklusināt to, mēģinot vēlreiz (slēpjot īsto kļūdu). Pareizais veids ir karantīna (trauslā testa īslaicīga atdalīšana no galvenās pakotnes un izsekošana atsevišķā sarakstā). Karantīnas testēšana nenovērš versiju sapludināšanu, bet paliek redzams parāds un tiek regulāri risināts. Kritiskais punkts ir šāds: karantīna ir uzgaidāmā telpa, nevis miskaste. Ja karantīnas saraksts palielinās, tas ir trauksmes signāls, ka komandas pārbaudes veselība pasliktinās. AI var periodiski pārskatīt jūsu karantīnas sarakstu un grupēt to pēc pamatcēloņa modeļiem; Tas nodrošina kolektīvus risinājumus, atklājot kopīgus cēloņus, piemēram, "visi 6 testi ir savienoti ar vienu un to pašu koplietoto testa lietotāju".

Padoms. Katram karantīnas ierakstam pievienojiet "īpašnieku" un "pēdējās pārskatīšanas datumu". Pamestā karantīna kļūst par pastāvīgu izgāztuvi; Trauslie testi dzīvo tur mūžīgi, jo nevienam tas nerūp.

Regresijas stratēģijas tabula

Statuss

stratēģija

AI loma

neliels labojums

Skartā zona + dūmu tests

Izvēlieties atbilstošos testus

jauna funkcija

Saistīts modulis + integrācija

Piedāvājiet jaunu regresijas gadījumu

liels faktors

Pilna regresijas pakete

Pārklājuma atstarpes analīze

pirmsizlaide

Pilna pakete + izpēte

Prioritātes un ilguma novērtējums

Steidzami labot tiešraidē

Fokusēts + kritiskais ceļš

Minimālais drošā testa komplekts

Vāja uzvedne / spēcīga uzvedne

Vāji: "Šis tests dažreiz neizdodas, izlabojiet to."
Spēcīgs: "Šis tests neizdodas 3 no 10 izpildīšanas reizēm, kods nav mainīts. Diagnosticējiet nestabilitātes pamatcēloņu: tas varētu būt laiks/rase, secības atkarība, kopīgs stāvoklis, ārēja atkarība vai vides atšķirības. Parādiet, kura testa rindiņa norāda uz katru iespējamo cēloni. Iesakiet pastāvīgu risinājumu; NEIESAKIET simptomu nomācošu risinājumu, piemēram, [pārbaudāms' — pārbaudāms' — skaidri 'add.]. Kļūdas pēda: [žurnāls]."

Spēcīga uzvedne; novirza diagnozi uz galveno cēloni un skaidri aizliedz simptomu nomākšanu.

Četras kopējamas veidnes

1) Trauslā testa diagnoze:

Šis pārbaudes kods dažreiz izdodas un dažreiz neizdodas bez izmaiņām. Uzskaitiet galveno cēloņu kandidātus (rase, secības atkarība, kopīgs stāvoklis, ārējā atkarība, pulkstenis/gadījuma raksturs, vides atšķirības) un katram parādiet pierādījumu līniju testā. Ieteikt pastāvīgu risinājumu; atzīmējiet nomācošu risinājumu, piemēram, atkārtotu mēģinājumu kā pēdējo līdzekli un ar pamatojumu. Pārbaude: [kods] / Nestabilitātes modelis: [cik reižu cik daudzos braucienos]

2) Regresijas gadījuma ierosināšana:

Tika veiktas šādas izmaiņas: [izmaiņu/PR kopsavilkums]. Uzskaitiet PAŠREIZĒJĀS darbības, kuras izjauktu šīs izmaiņas, un katram piedāvājiet regresijas pārbaudes gadījumu. Īpaši izceliet blakusparādību un kopīgo atkarību jomas.

3) Dublikāta testa tīrīšana:

Apskatiet zemāk esošo testa komplektu. Grupējiet dublētus vai pārklājošus gadījumus, kuros tiek pārbaudīta viena un tā pati darbība; Iesakiet, kuras man vajadzētu paturēt un kuras apvienot katrai grupai. Brīdiniet, ja pastāv seguma zaudēšanas risks. Pārbaudes: [saraksts/kods]

4) Testa efekta izvēle:

Ir mainīti šādi faili/funkcijas: [saraksts]. Esošajā testu komplektā atlasiet un pamatojiet testus, kas man vispirms jāpalaiž (tos, kas ir tieši/netieši saistīti ar mainīto kodu). Piezīme: atgādiniet man, ka es joprojām izmantošu visu pirmsizlaides komplektu.

trīs mini futrāļi

1. gadījums — reāla kļūda, ko slēpa vēlreiz. Viena komanda pievienoja 3 atkārtojumus neregulāram atlikušo izmaksu testam; Tagad pārbaudījums vienmēr bija "izturīgs". Izmantojot "trauslā testa diagnostiku", tika konstatēts, ka nestabilitāte radusies reālu sacensību apstākļu dēļ: pie lielas slodzes maksājuma apstiprinājums dažkārt tika apstrādāts divreiz. Mēnešiem ilgi Retry slēpa kļūdu, kuras rezultātā tiešraidē varētu būt faktiski zaudēti līdzekļi. Izlabots galvenais iemesls, noņemts vēlreiz.

2. gadījums — iepakojums saruka, ātrums palielināts. Regresijas komplekts ar 1400 testiem aizņēma 55 minūtes. Ar "dublikātu testa tīrīšanu" 380 testi izrādījās dublikāti vai pārklāti; apvienoti. Pakete tika samazināta līdz 900 testiem, laiks tika samazināts līdz 34 minūtēm, pārklājums netika izmērāmi samazināts. Ātrāka atgriezeniskā saite mudināja komandu veikt testēšanu biežāk.

3. gadījums — pasūtījuma atkarība. Pārbaude vienmēr izietu lokāli, bet nejauši neizdosies CI. AI diagnostika parādīja, ka tests ir atkarīgs no lietotāja, ko izveidoja cits tests, CI tas sabojājās, jo testi darbojās paralēli/atšķirīgā secībā. Katrs tests tika veikts, lai noteiktu savus datus; Neizlēmība ir beigusies.

Biežas kļūdas

  • Trauslā testa apklusināšana ar atkārtotu mēģinājumu. Mēģiniet vēlreiz, nemeklējot galveno cēloni; slēpjot patieso kļūdu.
  • "Atkal iestrēdzis" kultūra. Regulāra sarkano rezultātu ignorēšana; Kādu dienu, izlaižot īsto kļūdu.
  • Paciņas neapcirpšana vispār. Ļaujot dublētiem testiem uzkrāties un palēnināt iepakojuma darbību.
  • Atkarība starp testiem. Pārbaudes ir balstītas uz kopīgu nosacījumu/secību; nenoteiktības avots.
  • Testējot tikai izmainīto daļu un izlaižot pilnu paketi. Pirmsizlaides saīsne; Slēptās blakusparādības aizbēg.
  • Paļaušanās uz ārēju atkarību. Pārbaudes, kuru pamatā ir faktiskā tīkla/pulksteņa/gadījuma vērtības; dabiski nestabils.

Rezumējot

Regresijas testēšana fiksē izmaiņas, kas pārkāpj iepriekš darbojušās funkcijas; Taču, paketēm augot, lēnums un trauslā pārbaude mazina uzticību. Trauslas testēšanas pamatcēloņi parasti ir laiks, pasūtījumu atkarība, kopīgs stāvoklis un ārējās atkarības. AI ir spēcīgs palīgs diagnostikā, tīrīšanā un testu atlasē; Bet neizlēmības apspiešana ar atkārtotu mēģinājumu piesedz reālas kļūdas. Atrodiet galveno cēloni, padariet testus neatkarīgus un deterministiskus, regulāri apgrieziet paketi, palaidiet visu pakotni pirms izlaišanas.

Lietojumprogrammas uzdevums

Izvēlieties testu no sava projekta, kas, jūsuprāt, ir trausls (vai šķiet nestabils). Izņemiet pamatcēloņa kandidātus un pārbaudiet pierādījumu līnijas testā, izmantojot “trauslā testa diagnozes” veidni. Nosakiet galveno cēloni un ieviesiet pastāvīgu risinājumu bez atkārtotas mēģināšanas. Pēc tam atlasiet 10 testus no savas pakotnes un atrodiet tos, kurus var apvienot ar “dublikātu testa tīrīšanu”. Norādiet, cik daudz testa nestabilitātes jūs atrisinājāt to pamatcēloņa dēļ un cik nevajadzīgu gadījumu noņēmāt no komplekta.

kontrolsaraksts

  • [ ] Esmu diagnosticējis trauslā testa galveno cēloni; Es neapspiedu simptomu.
  • [ ] Atkārtot mēģinājumu es uzskatīju par attaisnotu pēdējo līdzekli, nevis ārstēšanu.
  • [ ] Es padarīju testus neatkarīgus un deterministiskus (izolētus no ārējām atkarībām).
  • [ ] Es izgriezu dublētos/nevajadzīgos testus no regresijas komplekta.
  • [ ] Es izvēlējos testēt, pamatojoties uz izmaiņām, taču izmantoju visu pakotnes pirmsizlaidi.
  • [ ] Es katru sarkano uztvēru nopietni, pret "atkal iestrēdzis, piespēli" kultūru.