Dobici:
- Razumjeti svrhu regresijskog testiranja i moći odabrati testove i proizvesti regresijske slučajeve u skladu s promjenama s umjetnom inteligencijom
- Sposobnost dijagnosticiranja temeljnih uzroka osjetljivih testova (vrijeme, ovisnost o narudžbi, zajedničko stanje, vanjska ovisnost) i primjena trajnih rješenja bez potiskivanja simptoma
- Sposobnost održavanja discipline pokretanja cjelovitog paketa prije izdanja, a istovremeno održavanje regresijskog paketa brzim, neovisnim i pouzdanim eliminacijom dvostrukog testiranja
Softver se stalno mijenja; Svaka nova značajka, svaki popravak može pokvariti nešto što je prije radilo. Naknadni poremećaj funkcije koja je prethodno radila naziva se regresija. Regresijsko testiranje je ponovno testiranje postojeće funkcionalnosti sa svakom promjenom kako bi se uhvatile ove degradacije. Tijekom vremena, ovi paketi testova postaju sve veći - tisuće testova - i javljaju se dva velika problema: paket usporava, a nestabilni testovi - nepouzdani testovi koji ponekad prolaze, a ponekad padaju u istom kodu - uništavaju povjerenje tima u rezultate testa. Umjetna inteligencija (AI) snažna je pomoć u održavanju regresijskog paketa dobro održavanim, brzim i pouzdanim. Ali središnje upozorenje ostaje: iako AI može ponuditi da "prođe" krhki test, često može proizvesti zakrpu koja prikriva pravi bug. Vaš je posao pronaći temeljni uzrok nestabilnosti, a ne potisnuti simptom.
Glavni uzroci krhkih testova
Krhko testiranje je najpodmukliji problem testiranja: nepouzdano je bilo da prolazi ili ne, tjerajući tim u naviku "mora da je opet zapelo, pokrenite ga ponovno" — a ta će navika jednog dana ignorirati pravi bug kao "neispravan". Glavni uzroci:
- Uvjeti mjerenja vremena/utrke: Test provjerava rezultat bez čekanja da operacija završi. Najčešći razlog.
- Ovisnost o redoslijedu: Testovi ovise o podacima koje ostavljaju jedni drugima; Lomi se kad se redoslijed promijeni.
- Zajednički slučaj: više testova koristi iste testne podatke/korisnika, u sukobu.
- Vanjska ovisnost: stvarna mreža, usluga treće strane, sistemsko vrijeme, slučajna vrijednost.
- Razlika u okruženju: Prebacuje se na lokalno, ostaje u CI (okruženje kontinuirane integracije).
Oprez: prolazak osjetljivog testa "ponovnim pokušajem nekoliko puta" često će maskirati stvarnu pogrešku paralelnosti. Ponovni pokušaj je dijagnostički alat, a ne liječenje. Najprije pronađite glavni uzrok; Koristite ponovni pokušaj samo kao posljednje sredstvo za dokumentiranu, istinski vanjsku nestabilnost.
Održavanje testa: održavanje paketa zdravim
Regresijska soba je poput vrta; Ako se ne brine, korov će preuzeti vlast. AI pomaže u tri zadatka održavanja:
1. Dvostruko/nepotrebno probno čišćenje. Tijekom vremena nakuplja se velik broj slučajeva koji testiraju istu stvar. AI predlaže grupiranje i spajanje sličnih testova.
2. Krhka testna dijagnoza. AI-u dajete testni kod i uzorak nestabilnosti; predlaže moguće temeljne uzroke i trajno rješenje.
3. Odabir testa/određivanje prioriteta. Skupo je pokrenuti cijeli paket sa svakom promjenom. S analizom utjecaja testa (odabirom samo relevantnih testova na temelju promijenjenog koda), AI preporučuje koje bi testove trebalo prvo pokrenuti. Međutim, potpuni paket prije izdavanja je obavezan.
Karantena: ispravno upravljanje osjetljivim testiranjem
Utvrdili ste da je test krhak, ali nemate vremena odmah riješiti glavni uzrok. Što učiniti? Postoje dva pogrešna načina: potpuno izbrisati test (to ponašanje više uopće nije sačuvano) ili ga utišati ponovnim pokušajem (prikrivajući pravi bug). Ispravan način je karantena (privremeno odvajanje lomljivog testa od glavnog paketa i njegovo praćenje na zasebnoj listi). Testiranje u karanteni ne sprječava spajanje verzija, ali ostaje vidljiv dug i redovito se rješava. Kritična točka je sljedeća: karantena je čekaonica, a ne kanta za smeće. Ako karantenski popis raste, to je alarm da se zdravstveno stanje tima pogoršava. AI može povremeno pregledati vaš karantenski popis i grupirati ga prema uzorcima uzroka; Omogućuje kolektivna rješenja otkrivajući zajedničke uzroke, kao što je "svih 6 testova povezano je s istim zajedničkim korisnikom testa".
Savjet: dodajte "vlasnika" i "datum zadnjeg pregleda" svakom zapisu karantene. Zapuštena karantena postaje trajno odlagalište; Krhki testovi tamo žive zauvijek jer nikoga nije briga.
Tablica strategije regresije
Status
strategija
Uloga umjetne inteligencije
manja korekcija
Zahvaćeno područje + ispitivanje dimom
Odaberite relevantne testove
nova značajka
Povezani modul + integracija
Predložite novi slučaj regresije
veliki refaktor
Potpuni regresijski paket
Analiza jaza u pokrivenosti
prije puštanja u promet
Cijeli paket + istraživanje
Procjena prioriteta i trajanja
Hitan popravak uživo
Fokusirani + kritični put
Minimalni sigurni set testova
Slab upit / Jak upit
Slab: "Ovaj test ponekad ne uspije, popravite ga."
Jako: "Ovaj test ne uspijeva 3 od 10 pokretanja, kod nepromijenjen. Dijagnosticirajte glavni uzrok nestabilnosti: može biti vrijeme/utrka, ovisnost o redoslijedu, dijeljeno stanje, vanjska ovisnost ili razlika u okruženju. Pokažite koji redak u testu ukazuje na svaki mogući uzrok. Predložite trajno rješenje; NEMOJTE predložiti rješenje za suzbijanje simptoma kao što je 'dodaj ponovni pokušaj' — ako je neizbježno, jasno napišite razlog. Test: [kod]. Trag pogreške: [log]."
Snažan brz; usmjerava dijagnozu na temeljni uzrok i izričito zabranjuje suzbijanje simptoma.
Četiri predloška za kopiranje
1) Krhka testna dijagnoza:
Ovaj testni kod ponekad prolazi, a ponekad ne uspijeva bez promjene. Navedite kandidate za glavni uzrok (rasa, ovisnost o poretku, zajedničko stanje, vanjska ovisnost, sat/nasumično, razlika u okruženju) i pokažite liniju dokaza u testu za svaki. Predloži trajno rješenje; označite supresivno rješenje kao što je ponovni pokušaj kao posljednje sredstvo i uz obrazloženje. Test: [kod] / uzorak nestabilnosti: [koliko puta u koliko pokreta]
2) Predlaganje regresijskog slučaja:
Napravljena je sljedeća promjena: [izmjena/PR sažetak]. Navedite TRENUTNA ponašanja koja bi ova promjena pokvarila i predložite regresijski testni slučaj za svako. Posebno naglasite područja nuspojava i zajedničkih ovisnosti.
3) Čišćenje dupliciranog testa:
U nastavku pogledajte paket testova. Grupirajte duplikate ili preklapajuće slučajeve koji testiraju isto ponašanje; Predložite koje bih trebao zadržati, a koje bih trebao kombinirati za svaku skupinu. Upozorite ako postoji opasnost od gubitka pokrivenosti. Testovi: [popis/kod]
4) Odabir učinka testa:
Sljedeće datoteke/funkcije su promijenjene: [popis]. Iz postojećeg skupa testova odaberite i obrazložite testove koje prvo moram pokrenuti (one koji su izravno/neizravno povezani s promijenjenim kodom). Napomena: podsjeti me da ću i dalje pokretati cijeli paket prije izdanja.
tri mini kućišta
Slučaj 1 — stvarna pogreška zataškana pokušajem ponovno. Jedan tim je dodao 3 ponovna pokušaja povremenom preostalom testu isplate; Test je sada uvijek "polagao". Primjenom "krhke testne dijagnostike" utvrđeno je da nestabilnost dolazi iz stvarnog stanja utrke: pri velikom opterećenju, potvrda plaćanja ponekad se dvostruko obrađivala. Mjesecima je Retry prikrivao grešku koja je mogla rezultirati stvarnim gubitkom novca uživo. Osnovni uzrok riješen, ponovni pokušaj uklonjen.
Slučaj 2 — Paket se smanjio, brzina povećana. Regresijski paket od 1400 testova trajao je 55 minuta. Uz "čišćenje dupliciranih testova", pokazalo se da su 380 testova duplikati ili pokriveni; spojeno. Paket je smanjen na 900 testova, vrijeme je smanjeno na 34 minute, pokrivenost nije mjerljivo smanjena. Brže povratne informacije potaknule su tim na češće testiranje.
Slučaj 3 — Ovisnost o narudžbi. Test bi uvijek prošao lokalno, ali bi nasumično pao u CI. AI dijagnostika je pokazala da test ovisi o korisniku koji je kreirao drugi test, u CI-ju se pokvario jer su se testovi izvodili paralelno/različitim redoslijedom. Svaki je test napravljen kako bi se utvrdili vlastiti podaci; Neodlučnosti je kraj.
Uobičajene greške
- Utišavanje osjetljivog testa ponovnim pokušajem. Ponovni pokušaj bez traženja temeljnog uzroka; prikrivajući pravu grešku.
- Kultura "opet zapela". Rutinsko ignoriranje crvenih rezultata; Jednog dana, preskakanje prave greške.
- Uopće ne podrezujući paket. Dopuštanje duplih testova da se gomilaju i usporavaju paket.
- Ovisnost između testova. Testovi se temelje na uobičajenom stanju/slijedu; izvor neizvjesnosti.
- Testiranje samo promijenjenog dijela i preskakanje cijelog paketa. Prečac prije izdanja; Skrivene nuspojave pobjeći.
- Oslanjanje na vanjsku ovisnost. Testovi temeljeni na stvarnoj mreži/sat/slučajnoj vrijednosti; prirodno nestabilan.
Ukratko
Regresijsko testiranje hvata promjene koje kvare funkcije koje su prethodno radile; Ali kako paketi rastu, sporost i krhko testiranje narušavaju povjerenje. Temeljni uzroci osjetljivog testiranja obično su vrijeme, ovisnost o redoslijedu, zajedničko stanje i vanjske ovisnosti. AI je snažna pomoć u dijagnostici, čišćenju i odabiru testa; Ali potiskivanje neodlučnosti ponovnim pokušajem prikriva stvarne pogreške. Pronađite glavni uzrok, napravite testove neovisne i determinističke, redovito skraćujte paket, pokrenite puni paket prije izdavanja.
Zadatak aplikacije
Odaberite test iz vlastitog projekta za koji znate da je krhak (ili se čini nestabilnim). Izdvojite kandidate temeljnog uzroka i provjerite linije dokaza u testu s predloškom "krhke testne dijagnoze". Identificirajte glavni uzrok i implementirajte trajno rješenje bez ponovnog pokušaja. Zatim odaberite 10 testova iz svog paketa i pronađite one koji se mogu kombinirati s "čišćenjem dupliciranih testova". Izvijestite o tome koliko ste testnih nestabilnosti riješili zbog njihovog temeljnog uzroka i koliko ste nepotrebnih slučajeva uklonili iz paketa.
popis za provjeru
- [ ] Dijagnosticirao sam glavni uzrok lomljivog testa; Nisam potisnuo simptom.
- [ ] Pokušaj ponovo sam smatrao opravdanim posljednjim sredstvom, a ne lijekom.
- [ ] Napravio sam testove neovisne i determinističke (izolirane od vanjskih ovisnosti).
- [ ] Izbacio sam duple/nepotrebne testove iz regresijskog skupa.
- [ ] Odlučio sam testirati na temelju promjene, ali pokrenuo sam puni paket prije izdanja.
- [ ] Ozbiljno sam shvaćao svako crveno, protiv kulture "opet zapeo, prošao".