Vienetas 9 / 11

Regresinis testavimas, testų priežiūra ir kova su trapiais testais

Pelnas:

  • Suprasti regresijos testavimo tikslą ir mokėti atrinkti testus bei sudaryti regresijos atvejus pagal dirbtinio intelekto pokyčius
  • Gebėjimas diagnozuoti pagrindines trapių testų priežastis (laikas, priklausomybė nuo užsakymų, bendra būsena, išorinė priklausomybė) ir taikyti nuolatinius sprendimus, neslopindami simptomo.
  • Galimybė išlaikyti viso paketo išankstinio leidimo discipliną, išlaikant regresijos rinkinį greitą, nepriklausomą ir patikimą, pašalinant pasikartojančius bandymus

Programinė įranga nuolat keičiasi; Kiekviena nauja funkcija, kiekvienas pataisymas gali sugadinti tai, kas veikė anksčiau. Vėlesnis anksčiau veikusios funkcijos sutrikimas vadinamas regresija. Regresinis testavimas iš naujo išbando esamas funkcijas su kiekvienu pakeitimu, kad būtų užfiksuoti šie pablogėjimai. Laikui bėgant, šie testų rinkiniai auga – tūkstančiai testų – ir iškyla dvi didelės problemos: rinkinys sulėtėja, o nenuoseklūs testai – nepatikimi testai, kurie kartais išlaiko, o kartais nepavyksta pagal tą patį kodą – griauna komandos pasitikėjimą testų rezultatais. Dirbtinis intelektas (AI) yra galinga pagalba norint išlaikyti regresijos rinkinį gerai prižiūrimą, greitą ir patikimą. Tačiau pagrindinis įspėjimas išlieka: nors dirbtinis intelektas gali pasiūlyti „išlaikyti“ trapų testą, jis dažnai gali sukurti pataisą, uždengiančią tikrą klaidą. Jūsų darbas yra rasti pagrindinę nestabilumo priežastį, o ne slopinti simptomą.

Pagrindinės trapių testų priežastys

Trapus testavimas yra pati klastingiausia testavimo problema: nepatikima, ar jis praeina, ar nepavyksta, o tai priverčia komandą įprotį „turbūt vėl įstrigo, paleiskite dar kartą“ – ir šis įprotis vieną dieną nepaisys tikros klaidos kaip „dribsnių“. Pagrindinės priežastys:

  • Laikas / lenktynių būklė: Testas patikrina rezultatą nelaukdamas, kol operacija baigsis. Dažniausia priežastis.
  • Užsakymo priklausomybė: Testai priklauso nuo vienas kito paliktų duomenų; Jis nutrūksta pasikeitus tvarkai.
  • Bendrinamas atvejis: atliekant kelis bandymus naudojami tie patys bandymo duomenys / naudotojas, prieštaraujantys.
  • Išorinė priklausomybė: tikras tinklas, trečiosios šalies paslauga, sistemos laikas, atsitiktinė reikšmė.
  • Aplinkos skirtumas: persijungia į vietinį, lieka CI (nuolatinės integracijos aplinka).
Atsargiai: išlaikius trapų testą „pabandžius kelis kartus“, dažnai užmaskuojama tikra lygiagretumo klaida. Pakartotinis bandymas yra diagnostikos priemonė, o ne gydymas. Pirmiausia suraskite pagrindinę priežastį; Naudokite pakartotinį bandymą tik kaip paskutinę priemonę dokumentais patvirtintam, tikrai išoriniam nestabilumui.

Bandomoji priežiūra: pakuotės sveikata

Regresijos rinkinys yra kaip sodas; Jei nesirūpinsite, piktžolės ims viršų. AI padeda atlikti tris priežiūros užduotis:

1. Pasikartojantis/nereikalingas bandomasis valymas. Laikui bėgant susikaupia daugybė atvejų, kai tikrinamas tas pats dalykas. AI siūlo sugrupuoti ir sujungti panašius testus.

2. Trapios testo diagnozė. Jūs suteikiate AI testo kodą ir nestabilumo modelį; siūlo galimas pagrindines priežastis ir nuolatinį sprendimą.

3. Testo pasirinkimas/prioritetų nustatymas. Brangu paleisti visą paketą su kiekvienu pakeitimu. Atlikus bandymo poveikio analizę (pasirenkant tik atitinkamus testus pagal pakeistą kodą), AI rekomenduoja, kuriuos bandymus atlikti pirmiausia. Tačiau visas išankstinio išleidimo paketas yra būtinas.

Karantinas: pažeidžiamų testų valdymas

Pastebėjote, kad testas yra trapus, bet neturite laiko iš karto pašalinti pagrindinės priežasties. Ką daryti? Yra du neteisingi būdai: visiškai ištrinti testą (toks elgesys nebėra išsaugomas) arba nutildyti jį bandant dar kartą (nuslėpti tikrąją klaidą). Teisingas būdas yra karantinuoti (laikinai atskirti trapų testą nuo pagrindinės pakuotės ir sekti jį atskirame sąraše). Karantininis testavimas neapsaugo nuo versijų sujungimo, tačiau lieka matoma skola ir yra reguliariai sprendžiama. Kritinis taškas yra toks: karantinas yra laukimo kambarys, o ne šiukšliadėžė. Jei karantino sąrašas didėja, tai yra pavojaus signalas, kad komandos bandymo būklė blogėja. AI gali periodiškai peržiūrėti jūsų karantino sąrašą ir sugrupuoti jį pagal pagrindines priežastis; Tai leidžia spręsti kolektyvinius sprendimus, atskleidžiant bendras priežastis, pvz., „visi 6 testai yra prijungti prie to paties bendrinamo bandomojo vartotojo“.

Patarimas: prie kiekvieno karantino įrašo pridėkite „savininką“ ir „paskutinės peržiūros datą“. Apleistas karantinas tampa nuolatiniu sąvartynu; Trapūs testai ten gyvena amžinai, nes niekam nerūpi.

Regresijos strategijos lentelė

Būsena

strategija

AI vaidmuo

smulkus pataisymas

Paveikta vieta + dūmų testas

Pasirinkite atitinkamus testus

nauja funkcija

Susijęs modulis + integracija

Pasiūlykite naują regresijos atvejį

didelis reaktorius

Visas regresijos paketas

Aprėpties spragų analizė

išankstinis leidimas

Visas paketas + tyrinėjimas

Prioriteto ir trukmės įvertinimas

Skubus tiesioginis pataisymas

Sutelktas + kritinis kelias

Minimalus saugus bandymo rinkinys

Silpnas raginimas / Stiprus raginimas

Silpnas: „Šis testas kartais nepavyksta, pataisyk“.
Stiprus: "Šis testas nepavyko 3 kartus iš 10, kodas nepakeistas. Diagnozuokite pagrindinę nestabilumo priežastį: gali būti laikas / rasė, priklausomybė už eilę, bendra būsena, išorinė priklausomybė arba aplinkos skirtumas. Parodykite, kuri bandymo eilutė nurodo kiekvieną galimą priežastį. Siūlykite nuolatinį sprendimą; NESIŪLYKITE simptomus slopinančio sprendimo, pvz., [Tikrinamas kodas: retkarčiais rašyti '-add.] Klaidos seka: [logas]."

Galingas raginimas; nukreipia diagnozę į pagrindinę priežastį ir aiškiai uždraudžia simptomų slopinimą.

Keturi kopijuojami šablonai

1) Trapi testo diagnozė:

Šis bandymo kodas kartais praeina, o kartais nepavyksta be pakeitimų. Išvardykite pagrindines priežastis (rasė, priklausomybė nuo tvarkos, bendra būsena, išorinė priklausomybė, laikrodis / atsitiktinumas, aplinkos skirtumas) ir parodykite kiekvieno testo įrodymų liniją. Pasiūlyti nuolatinį sprendimą; pažymėkite slopinamąjį sprendimą, pvz., bandykite dar kartą kaip paskutinę priemonę ir pateisinkite. Testas: [kodas] / Nestabilumo modelis: [kiek kartų per kiek kartų]

2) Regresijos atvejo pasiūlymas:

Buvo atliktas šis pakeitimas: [pakeitimų / PR santrauka]. Išvardykite DABARTINIUS veiksmus, kuriuos šis pakeitimas sugadintų, ir kiekvienam pasiūlykite regresijos testą. Ypač paryškinkite šalutinio poveikio ir bendros priklausomybės sritis.

3) Pasikartojantis bandymo valymas:

Peržiūrėkite žemiau pateiktą bandymų rinkinį. Grupuoti pasikartojančius arba persidengiančius atvejus, kurie tikrina tą patį elgesį; Pasiūlykite, kuriuos turėčiau pasilikti, o kuriuos derinti kiekvienai grupei. Įspėkite, jei kyla pavojus prarasti draudimą. Testai: [sąrašas/kodas]

4) Bandymo efekto pasirinkimas:

Pasikeitė šie failai / funkcijos: [sąrašas]. Iš esamo testavimo rinkinio pasirinkite ir pagrįskite testus, kuriuos turiu paleisti pirmiausia (tuos, kurie yra tiesiogiai/netiesiogiai susieti su pakeistu kodu). Pastaba: priminkite, kad vis tiek paleisiu visą išankstinio leidimo rinkinį.

trys mini dėklai

1 atvejis – Tikra klaida, užslėpta bandant iš naujo. Viena komanda pridėjo 3 kartojimus prie retkarčiais likusio išmokėjimo testo; Dabar testas visada buvo „išlaikytas“. Pritaikius „trapių testų diagnostiką“ nustatyta, kad nestabilumas atsirado dėl tikros lenktynių situacijos: esant didelei apkrovai, mokėjimo patvirtinimas kartais buvo apdorojamas du kartus. Mėnesius „Retry“ slėpė klaidą, dėl kurios galėjo būti prarasti pinigai. Ištaisyta pagrindinė priežastis, pašalinta bandoma dar kartą.

2 atvejis – pakuotė susitraukė, greitis padidėjo. 1400 testų regresijos rinkinys užtruko 55 minutes. Naudojant „dublikato bandymo valymą“, 380 testų pasirodė dublikatai arba padengti; susiliejo. Paketas sumažėjo iki 900 testų, laikas sutrumpėjo iki 34 minučių, aprėptis nebuvo išmatuojamai sumažinta. Greitesni atsiliepimai paskatino komandą dažniau atlikti bandymus.

3 atvejis. Užsakymo priklausomybė. Bandymas visada būtų sėkmingas vietoje, bet atsitiktinai nepavyktų CI. AI diagnostika parodė, kad testas priklausė nuo vartotojo sukurto kitu testu, CI sugedo, nes testai vyko lygiagrečiai/skirtinga tvarka. Kiekvienas bandymas buvo atliktas siekiant nustatyti savo duomenis; Neryžtingumas baigėsi.

Dažnos klaidos

  • Nutildykite trapų testą bandydami dar kartą. Bandymas dar kartą, neieškodamas pagrindinės priežasties; nuslėpdamas tikrąją klaidą.
  • „Vėl įstrigo“ kultūra. Reguliarus raudonų rezultatų ignoravimas; Vieną dieną praleidžiant tikrąją klaidą.
  • Pakuotės visai nekarpyti. Leidžiama pasikartojantiems bandymams kauptis ir sulėtinti paketą.
  • Priklausomybė tarp testų. Testai yra pagrįsti bendra sąlyga / seka; netikrumo šaltinis.
  • Testuojama tik pakeista dalis ir praleidžiama visa pakuotė. Išankstinio leidimo spartusis klavišas; Paslėptas šalutinis poveikis pabėga.
  • Pasikliauti išorine priklausomybe. Testai, pagrįsti faktine tinklo / laikrodžio / atsitiktine verte; natūraliai nestabilus.

Apibendrinant

Regresinis testavimas užfiksuoja pokyčius, pažeidžiančius anksčiau veikusias funkcijas; Tačiau paketams augant, lėtumas ir trapūs bandymai griauna pasitikėjimą. Pagrindinės pažeidžiamų testų priežastys dažniausiai yra laikas, priklausomybė nuo užsakymo, bendra būsena ir išorinės priklausomybės. AI yra galinga diagnostikos, valymo ir testų pasirinkimo priemonė; Tačiau neryžtingumo slopinimas bandant pakartotinai užmaskuoja tikras klaidas. Raskite pagrindinę priežastį, padarykite testus nepriklausomus ir deterministinius, reguliariai apkarpykite paketą, paleiskite visą paketą prieš išleidžiant.

Taikymo užduotis

Pasirinkite testą iš savo projekto, kuris, jūsų žinioje, yra trapus (arba atrodo nestabilus). Išskleiskite pagrindines priežastis ir patikrinkite testo įrodymų eilutes naudodami „trapios testo diagnozės“ šabloną. Nustatykite pagrindinę priežastį ir nebandydami iš naujo įgyvendinkite nuolatinį sprendimą. Tada pasirinkite 10 testų iš savo paketo ir raskite tuos, kuriuos galima derinti su „pasikartojančių bandymų valymu“. Praneškite, kiek bandymo nestabilumo išsprendėte dėl pagrindinės jų priežasties ir kiek nereikalingų atvejų pašalinote iš rinkinio.

kontrolinis sąrašas

  • [ ] Aš diagnozavau pagrindinę trapios testo priežastį; Simptomo neslopinau.
  • [ ] Bandymą pakartoti laikiau pateisinama paskutine išeitimi, o ne kaip išgydyti.
  • [ ] Testus padariau nepriklausomus ir deterministinius (izoliuotus nuo išorinių priklausomybių).
  • [ ] Iš regresijos rinkinio iškirpau pasikartojančius / nereikalingus testus.
  • [ ] Aš pasirinkau testą, remdamasis pakeitimu, bet paleidau visą paketą išankstinio leidimo.
  • [ ] Į kiekvieną raudonį žiūrėjau rimtai, prieš „užstrigo vėl, praei“ kultūrą.