Dobici:
- Razumjeti svrhu regresijskog testiranja i biti sposoban odabrati testove i proizvesti slučajeve regresije prema promjenama s umjetnom inteligencijom
- Sposobnost dijagnosticiranja temeljnih uzroka krhkih testova (vremenski, ovisnost o redoslijedu, zajedničko stanje, vanjska ovisnost) i primjene trajnih rješenja bez potiskivanja simptoma
- Sposobnost da se održi disciplina pokretanja kompletnog paketa pre izdanja, uz održavanje regresijskog paketa brzim, nezavisnim i pouzdanim eliminacijom duplih testiranja
Softver se stalno mijenja; Svaka nova funkcija, svaki popravak može pokvariti nešto što je prije funkcioniralo. Naknadni prekid funkcije koja je prethodno radila naziva se regresija. Regresijsko testiranje je ponovno testiranje postojeće funkcionalnosti sa svakom promjenom kako bi se uhvatila ova degradacija. Vremenom, ovi paketi testova postaju sve veći — hiljade testova — i javljaju se dva velika problema: paket usporava, a neuspešni testovi — nepouzdani testovi koji ponekad prolaze, a ponekad ne uspevaju u istom kodu — uništavaju poverenje tima u rezultate testa. Umjetna inteligencija (AI) je moćna pomoć u održavanju regresijskog paketa dobro održavanim, brzim i pouzdanim. Ali centralno upozorenje ostaje: iako AI može ponuditi da "prođe" krhki test, često može proizvesti zakrpu koja prikriva pravu grešku. Vaš posao je pronaći korijenski uzrok nestabilnosti, a ne potisnuti simptom.
Osnovni uzroci krhkih testova
Krhko testiranje je najpodmukliji problem testiranja: nepouzdano je da li prođe ili ne uspije, gurajući tim u naviku "mora da se opet zaglavio, pokrenite ga ponovo" - i ova navika će jednog dana zanemariti pravi bug kao "ljubav". Glavni uzroci:
- Uvjeti mjerenja vremena/trke: Test provjerava rezultat bez čekanja da se operacija završi. Najčešći razlog.
- Ovisnost o redoslijedu: Testovi zavise od podataka koji su ostali jedan od drugog; Prekida se kada se redosled promeni.
- Zajednički slučaj: Više testova koristi iste testne podatke/korisnika, konfliktno.
- Eksterna zavisnost: prava mreža, usluga treće strane, sistemsko vreme, nasumična vrednost.
- Razlika u okruženju: Prebacuje se na lokalno, ostaje u CI (kontinuirano integracijsko okruženje).
Oprez: Prolazak krhkog testa "ponovnim pokušajem nekoliko puta" često će prikriti stvarnu grešku istovremenosti. Ponovni pokušaj je dijagnostički alat, a ne liječenje. Prvo pronađite osnovni uzrok; Koristite samo ponovni pokušaj kao posljednje sredstvo za dokumentiranu, istinski vanjsku nestabilnost.
Probno održavanje: održavanje pakovanja zdravim
Regresijski apartman je poput vrta; Ako se ne zbrine, korov će preuzeti. AI pomaže u tri zadatka održavanja:
1. Duplicirano/nepotrebno probno čišćenje. Vremenom se nakuplja veliki broj slučajeva koji testiraju istu stvar. AI predlaže grupisanje i spajanje sličnih testova.
2. Dijagnoza krhkog testa. Dajete AI testni kod i obrazac nestabilnosti; predlaže moguće uzroke i trajno rješenje.
3. Odabir/prioritet testa. Skupo je pokrenuti cijeli paket sa svakom promjenom. Uz analizu uticaja testa (odabir samo relevantnih testova na osnovu promijenjenog koda), AI preporučuje koje testove treba pokrenuti prvi. Međutim, kompletan paket prije izdanja je obavezan.
Karantena: ispravno upravljanje krhkim testiranjem
Otkrili ste da je test krhak, ali nemate vremena da odmah otklonite osnovni uzrok. sta da radim? Postoje dva pogrešna načina: potpuno izbrisati test (to ponašanje se više uopće ne čuva) ili ga utišati ponovnim pokušajem (prikrivanje prave greške). Ispravan način je stavljanje u karantin (privremeno odvajanje lomljivog testa od glavnog paketa i praćenje na posebnoj listi). Testiranje u karantinu ne sprječava spajanje verzija, ali ostaje vidljiv dug i redovno se rješava. Kritična tačka je sledeća: karantena je čekaonica, a ne kanta za smeće. Ako karantenska lista raste, ovo je alarm da se zdravlje tima na testu pogoršava. AI može povremeno pregledati vašu karantensku listu i grupirati je prema obrascima uzroka; Omogućava kolektivna rješenja otkrivanjem zajedničkih uzroka, kao što je "svih 6 testova je povezano s istim zajedničkim korisnikom testiranja".
Savjet: dodajte "vlasnika" i "datum posljednjeg pregleda" svakom zapisu u karantinu. Zapuštena karantena postaje trajna deponija; Krhki testovi tamo žive vječno jer nikoga nije briga.
Tabela strategije regresije
Status
Strategija
Uloga AI
manja ispravka
Zahvaćeno područje + test dima
Odaberite relevantne testove
nova funkcija
Povezani modul + integracija
Predložite novi slučaj regresije
veliki refaktor
Kompletan regresijski paket
Analiza jaza u pokrivenosti
pre puštanja na slobodu
Kompletan paket + istraživanje
Procjena prioriteta i trajanja
Hitna popravka uživo
Fokusirani + kritični put
Minimalni siguran test set
Slaba prompt / Jaka prompt
Slabo: "Ovaj test ponekad ne uspije, popravi ga."
Snažan: "Ovaj test ne uspijeva u 3 od 10 pokretanja, kod je nepromijenjen. Dijagnosticirajte osnovni uzrok nestabilnosti: može biti vrijeme/trka, ovisnost o redoslijedu, zajedničko stanje, vanjska ovisnost ili razlika u okruženju. Pokažite koji red u testu ukazuje na svaki mogući uzrok. Predložite trajno rješenje; NEMOJTE predlagati rješenje za suzbijanje simptoma, kao što je 'ako je moguće upisati razlog': upišite ponovo pokušaj. Trag greške: [log]."
Snažan prompt; usmjerava dijagnozu na osnovni uzrok i eksplicitno zabranjuje potiskivanje simptoma.
Četiri šablona za kopiranje
1) Dijagnoza krhkog testa:
Ovaj testni kod ponekad prolazi, a ponekad ne uspijeva bez promjene. Navedite kandidate za osnovni uzrok (rasa, ovisnost o redoslijedu, zajedničko stanje, vanjska ovisnost, sat/slučajno, razlika u okruženju) i pokažite liniju dokaza u testu za svaki. Predložite trajno rješenje; označiti supresivno rješenje kao što je ponovni pokušaj kao posljednje sredstvo i sa opravdanjem. Test: [kod] / Obrazac nestabilnosti: [koliko puta u koliko pokretanja]
2) Predlaganje slučaja regresije:
Napravljena je sljedeća promjena: [sažetak promjene/PR]. Navedite TRENUTNA ponašanja koja bi ova promjena prekinula i predložite slučaj regresije za svako. Posebno istaknite područja nuspojava i zajedničkih ovisnosti.
3) Duplicirano čišćenje testa:
U nastavku pogledajte komplet testova. Grupirajte duple ili preklapajuće slučajeve koji testiraju isto ponašanje; Predložite koje da zadržim, a koje da kombiniram za svaku grupu. Upozorite ako postoji rizik od gubitka pokrivenosti. Testovi: [lista/šifra]
4) Izbor efekta testa:
Promijenjene su sljedeće datoteke/funkcije: [list]. Iz postojećeg testnog paketa odaberite i opravdajte testove koje moram prvo pokrenuti (one koji su direktno/indirektno povezani sa promijenjenim kodom). Napomena: podsjeti me da ću i dalje pokretati cijeli paket prije izdanja.
tri mini kofera
Slučaj 1 — Prava greška prikrivena ponovnim pokušajem. Jedan tim je dodao 3 pokušaja povremenom preostalom testu isplate; Test je sada uvijek "prolazio". Primjenom "dijagnostike lomljivog testa" utvrđeno je da je nestabilnost nastala zbog stvarnog stanja trke: pri velikom opterećenju, potvrda plaćanja je ponekad bila dvostruko obrađena. Mjesecima je Retry prikrivao grešku koja je mogla dovesti do stvarnog gubitka novca uživo. Osnovni uzrok otklonjen, pokušaj ponovnog uklanjanja.
Slučaj 2 — Paket se smanjio, brzina povećana. Regresijski paket od 1.400 testova trajao je 55 minuta. Sa "čišćenjem dupliciranog testa" ispostavilo se da je 380 testova duplo ili pokriveno; spojeno. Paket je smanjen na 900 testova, vrijeme je smanjeno na 34 minute, pokrivenost nije mjerljivo smanjena. Brže povratne informacije ohrabrile su tim da češće testira.
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 je test ovisio o korisniku koji je kreirao drugi test, u CI se pokvario jer su se testovi odvijali paralelno/različitim redoslijedom. Svaki test je napravljen da bi se ustanovili vlastiti podaci; Neodlučnost je gotova.
Uobičajene greške
- Utišavanje lomljivog testa ponovnim pokušajem. Pokušaj ponovo bez traženja osnovnog uzroka; prikrivanje prave greške.
- Kultura "opet zaglavljen". Rutinski ignoriranje crvenih rezultata; Jednog dana, preskakanje prave greške.
- Uopšte se ne obrezuje paket. Omogućavanje duplih testova da se gomilaju i usporavaju paket.
- Zavisnost između testova. Testovi su zasnovani na uobičajenom stanju/sekvenciji; izvor neizvjesnosti.
- Testiranje samo promijenjenog dijela i preskakanje cijelog paketa. Prečica prije objavljivanja; Izbjegavanje skrivenih nuspojava.
- Oslanjanje na spoljnu zavisnost. Testovi zasnovani na stvarnoj mreži/satu/slučajnoj vrijednosti; prirodno nestabilan.
Ukratko
Regresijsko testiranje hvata promjene koje narušavaju funkcije koje su prethodno radile; Ali kako paketi rastu, sporost i krhko testiranje narušavaju povjerenje. Osnovni uzroci lomljivog testiranja obično su vremenski raspored, ovisnost o narudžbi, zajedničko stanje i vanjske ovisnosti. AI je moćna pomoć u dijagnostici, čišćenju i odabiru testova; Ali potiskivanje neodlučnosti ponovnim pokušajem prikriva prave greške. Pronađite osnovni uzrok, učinite testove nezavisnim i determinističkim, redovno smanjite paket, pokrenite cijeli paket prije objavljivanja.
Zadatak aplikacije
Odaberite test iz vlastitog projekta za koji znate da je krhak (ili se čini nestabilnim). Izdvojite kandidate za osnovni uzrok i provjerite linije dokaza u testu pomoću šablona „dijagnoza krhkog testa“. Identificirajte osnovni 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 dupliciranog testa". Prijavite koliko ste nestabilnosti testa riješili iz njihovog osnovnog uzroka i koliko nepotrebnih slučajeva ste uklonili iz paketa.
kontrolna lista
- [ ] Dijagnostikovao sam osnovni uzrok krhkog testa; Nisam potisnuo simptom.
- [ ] Ponovni pokušaj sam smatrao opravdanim posljednjim sredstvom, a ne lijekom.
- [ ] Testove sam učinio nezavisnim i determinističkim (izolovanim od eksternih zavisnosti).
- [ ] Uklonio sam duple/nepotrebne testove iz paketa regresije.
- [ ] Odabrao sam testiranje na osnovu promjene, ali sam pokrenuo kompletan paket prije izdanja.
- [ ] Svako crveno sam shvatio ozbiljno, protiv kulture "opet zaglavi, dodaj".