Što je testiranje paralelnosti u testiranju softvera?

⚡ Pametni sažetak

Testiranje istodobnosti otkriva nedostatke koji se pojavljuju samo kada nekoliko korisnika istovremeno djeluje na istoj aplikaciji, otkrivajući zastoje, izgubljena ažuriranja i probleme sa zaključavanjem koje sekvencijalne funkcionalne provjere nikada ne otkrivaju.

  • 👥 Također se naziva: Višekorisničko testiranje, jer je okidač istovremeni pristup, a ne samo velika količina podataka.
  • 🎯 Na što cilja: Dijeljeni zapisi baze podataka, dijeljeni moduli i dijeljeni aplikacijski kod dosegnuti putem više od jedne sesije.
  • 🔒 Što mjeri: Razine zastoja, zaključavanja, jednonitnog koda i ograničenog pristupa dijeljenim resursima.
  • 🧭 Kako se izvodi: Identificirajte tokove sklone konkurentnosti, postavite cilj konkurentnosti, skriptirajte stvarne radnje, a zatim postupno povećavajte broj korisnika.
  • 🐞 Klase nedostataka: Uvjeti utrke, zastoji, izgubljena ažuriranja, oštećenje podataka i nedostatak niti.
  • ⚠️ Iskrene granice: Nedeterminizam, asinhroni povratni pozivi i neinformativni stog poziva otežavaju reprodukciju kvarova.

Što je testiranje konkurentnosti u testiranju softvera s više istovremenih korisnika

Što je testiranje paralelnosti?

Testiranje istodobnosti je tehnika testiranja koja se koristi za otkrivanje nedostataka u aplikaciji kada je prijavljeno više korisnika. Drugim riječima, prati učinak dok više korisnika istovremeno izvodi istu radnju.

Testiranje konkurentnosti se također naziva testiranje s više korisnikaTestiranje konkurentnog programa je izazovnije od testiranja sekvencijalnog programa zbog nedeterminizma i problema sinkronizacije: isti test može proći u jednom pokretanju, a ne proći u sljedećem bez promjene ijedne linije koda.

Donji dijagram ilustrira ideju - nekoliko korisnika dođe do istog resursa aplikacije u istom trenutku, a test promatra što aplikacija radi s preklapanjem.

Dijagram testiranja konkurentnosti koji prikazuje više korisnika koji istovremeno pristupaju istom resursu aplikacije

Zašto testiranje konkurentnosti

Dva pitanja opravdavaju trud, a oba su nevidljiva za funkcionalne izvedbe od strane jednog korisnika.

  • Identificira učinke istovremenog pristupanja istim zapisima baze podataka, modulima ili kodu aplikacije.
  • Identificira i mjeri razinu zastoja, zaključavanja, korištenja jednonitnog koda i ograničenog pristupa dijeljenim resursima.

Značajka može biti potpuno ispravna za jednog korisnika, a ipak izgubiti podatke za drugog korisnika koji stigne milisekundu kasnije, zbog čega se ova tehnika nalazi uz ispitivanje performansi a ne unutar funkcionalnog testiranja.

Kako izvršiti testiranje konkurentnosti

Testiranje konkurentnosti slijedi ponovljivi slijed. Koraci u nastavku kreću se od scoping do rezolucije.

  • Korak 1) Identificirajte tokove sklone konkurentnosti. Potražite dijeljeno stanje: istovremene prijave, rezervacije mjesta ili dionica, ažuriranja stanja, batch poslovi koji pišu istu tablicu i bilo koju jednonitnu komponentu u putanji.
  • Korak 2) Postavite cilj istodobnosti. Odlučite koliko korisnika mora djelovati u istom trenutku, na temelju stvarnih vršnih vrijednosti korištenja, a ne okruglog broja.
  • Korak 3) Dizajnirajte testne slučajeve. Svaki testni slučaj uparuje dijeljeni resurs, konkurentske radnje i očekivano završno stanje - na primjer, dvije sesije koje se povlače s jednog računa ne smiju obje uspjeti.
  • Korak 4) Napišite skriptu i odaberite alat. Potreban je generator opterećenja koji stvara konfigurirane virtualne korisnike; JMeter je uobičajeni izbor otvorenog koda, a njegove postavke grupe niti izravno se preslikavaju na scenarije konkurentnosti.
  • Korak 5) Ramp postupno. Povećajte broj istovremenih korisnika u fazama umjesto skokovitoping do cilja, tako da je vidljiva razina na kojoj počinje sukob.
  • Korak 6) Praćenje i analiza. Pratite čekanja zaključavanja, raspon vremena odgovora, stope pogrešaka i blokiranje baze podataka zajedno - defekt istodobnosti često se pokazuje kao vremenska anomalija prije nego što se pokaže kao pogreška.
  • Korak 7) Riješite problem i ponovno pokrenite. Ispravite uzrok sinkronizacije, indeksiranja ili zaključavanja, a zatim ponovite isti postupak kako biste potvrdili da se ponašanje promijenilo, a ne premjestilo.

Uobičajeni nedostaci istodobnosti

Nedostaci konkurentnosti spadaju u mali broj prepoznatljivih klasa, a ispravno imenovanje klase obično upućuje izravno na rješenje.

Mana Što se događa Tipičan simptom
Stanje utrke Rezultat ovisi o tome koja je sesija prva završila Točni ukupni rezultati na nekim runovima, netočni na drugima
Zastoj Dvije sesije drže bravu koju druga treba Transakcije se zamrzavaju umjesto da vraćaju grešku
Izgubljeno ažuriranje Drugo pisanje prepisuje prvo bez čitanja Spremljena promjena tiho nestaje
Korupcija podataka Zajednička struktura je napisana samo djelomično Zapisi u stanju koje nijedna valjana transakcija nije mogla stvoriti
Gladovanje Jedna sesija nikada ne dobije resurs koji čeka Put jednog korisnika istekne vrijeme dok sustav izgleda ispravno

Budući da su ovi kvarovi povremeni, svako pokretanje zahtijeva snimanje zapisnika i vremenskih oznaka; inače se kvar ne može vjerodostojno prijaviti putem proces upravljanja nedostacima.

Primjer testiranja konkurentnosti

Zamislite online trgovinu koja ima posljednju jedinicu proizvoda na zalihi. Dva kupca otvaraju artikl u istoj sekundi i oboje pritisnu Kupiti.

  • Scenarij: Dvije sesije čitaju zalihu = 1, obje prolaze provjeru dostupnosti i obje zapisuju zalihu = 0.
  • Očekivani rezultat: Jedna narudžba je potvrđena, druga prima poruku da nema na zalihi, a zalihe nikada ne padnu na negativnu razinu.
  • Pokazatelj kvara: Obje narudžbe potvrđuju se ili zaliha završava na -1, što pokazuje da provjera dostupnosti i smanjenje nisu izvršeni kao jedan atomski korak.
  • Varijacije koje vrijedi pokrenuti: Iste dvije sesije uređivanja jednog zapisa profila, dva odobrenja istog zahtjeva i skupni zadatak ažuriranja tablice dok korisnik sprema.

Isti obrazac se generalizira: pronađite jedan resurs, dva pisca i nema jamstva naručivanja. Pokretanje scenarija tijekom testiranje sustava, prije dodavanja opterećenja, održava dijagnozu čistom.

Prednosti testiranja konkurentnosti

  • Relativno smanjuje količinu napora potrebnog za testiranje aplikacije ograničavanjem opsega istovremenih interakcija na nekoliko široko korištenih, dobro testiranih komponenti.
  • Enkapsulacija omogućuje analizu ponašanja dijela programa bez pregleda cijele kodne baze.
  • Pomaže u poboljšanju pouzdanosti i robusnosti istodobnih programa.
  • Rano otkriva ograničenja zaključavanja i blokiranja, tako da odluke o kapacitetu počivaju na izmjerenom natjecanju, a ne na procjenama.

Nedostaci testiranja konkurentnosti

Sljedeći nedostaci se obično javljaju kod testera prilikom testiranja konkurentnosti.

  • Aplikaciju je potrebno testirati na više platformi.
  • Scenariji istodobnosti zahtijevaju intenzivnije testove od sekvencijalnih.
  • Funkcije ne vraćaju rezultat pozivatelju odmah; umjesto toga rezultat se može dostaviti kasnije putem obavijesti, blokova, funkcija povratnog poziva ili sličnih mehanizama, što otežava testiranje.
  • Tijek informacija ili programa ne odražava se u stogu poziva.
  • Broj putova izvršenja u sustavu može biti izuzetno velik, budući da procesi u konkurentnom sustavu međusobno komuniciraju dok se izvršavaju.
  • Konkurentni programi imaju veći postotak neuspjeha od sekvencijalnih.
  • Otklanjanje grešaka u istodobnim programima je teško jer dodavanje programa za otklanjanje grešaka mijenja vrijeme koje je uzrokovalo kvar.

Pitanja i odgovori

Ne. Ispitivanje opterećenja mjeri ponašanje pod očekivanim volumenom tijekom vremena. Testiranje konkurentnosti cilja isti trenutak, tako da se greška može pojaviti samo s dva korisnika ako oboje dodiruju jedan dijeljeni zapis.

Višenitna polovica testiranje niti preklapa se s njim. Testiranje niti pita hoće li jedan poslovni put preživjeti integraciju; testiranje konkurentnosti pita što simultani pristup radi nakon što taj put već funkcionira.

Izvedite broj iz opažene vršne upotrebe, a ne iz okrugle brojke. Započnite s dvije sesije kako biste dokazali da je logika atomska, a zatim se povećavajte prema izmjerenom vrhuncu i margini iznad njega.

Modeli strojnog učenja rangiraju module prema povijesti prošlih nedostataka i složenosti dijeljenog stanja, usmjeravajući testere na tokove koji će najvjerojatnije prekinuti rad pri preklapanju. Grupiranje zapisnika u ponovljenim izvođenjima zatim izolira ispreplitanje koje je prethodilo svakom kvaru.

GitHub kopilot Brzo izrađuje skripte, barijere i pomoćne alate za utvrđivanje tvrdnji virtualnih korisnika. Tester i dalje definira koji se resurs dijeli i koje je ispravno konačno stanje, budući da generirani testovi rijetko prisiljavaju na stvarno preklapanje.

Razina izolacije, istek vremena zaključavanja, veličina skupa veza i indeksiranje mijenjaju način prikaza natjecanja. Zabilježite ih pri svakom pokretanju, jer rezultat dobiven pod jednom razinom izolacije ne govori ništa o drugoj.

Ponovite identičan scenarij mnogo puta iz čistog stanja podataka, sačuvajte zapisnike s vremenskim oznakama i suzite prozor između dvije konkurentske radnje. Prilaganje programa za ispravljanje pogrešaka često skriva grešku promjenom vremena.

Da za sukob osjetljiv na volumen. Male tablice omogućuju bazi podataka da sve pohrani u memoriju i nakratko se zaključa, tako da blokiranje koje se pojavljuje u produkciji ostaje nevidljivo. Uskladite broj redaka i veličine indeksa što je moguće bliže mogućem okruženju.

Sažmite ovu objavu uz: