Š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.

Š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.
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.

