Co je testování souběžnosti v testování softwaru?
⚡ Chytré shrnutí
Souběžné testování detekuje chyby, které se objevují pouze tehdy, když několik uživatelů pracuje na stejné aplikaci současně, a odhaluje tak zablokování, ztracené aktualizace a problémy se zamykáním, které sekvenční funkční kontroly nikdy neodhalí.
Co je testování souběžnosti?
Testování souběžnosti je testovací technika používaná k detekci chyb v aplikaci, když je přihlášeno více uživatelů. Jinými slovy, monitoruje efekt, když více uživatelů provádí stejnou akci současně.
Testování souběžnosti se také označuje jako víceuživatelské testováníTestování souběžného programu je náročnější než testování sekvenčního programu kvůli problémům s nedeterminismem a synchronizací: stejný test může v jednom spuštění projít a v dalším selhat, aniž by se změnil jediný řádek kódu.
Níže uvedený diagram ilustruje tuto myšlenku – několik uživatelů se ve stejném okamžiku dostane ke stejnému aplikačnímu zdroji a test sleduje, co aplikace s tímto překrytím dělá.
Proč testování souběžnosti
Dvě otázky ospravedlňují úsilí a obě jsou pro funkční běhy jednoho uživatele neviditelné.
- Identifikuje důsledky přístupu ke stejným databázovým záznamům, modulům nebo aplikačnímu kódu současně.
- Identifikuje a měří úroveň deadlockingu, zamykání, použití jednovláknového kódu a omezeného přístupu ke sdíleným zdrojům.
Funkce může být pro jednoho uživatele plně správná a pro druhého uživatele, který se objeví o milisekundu později, se data stále ztrácejí, a proto je tato technika součástí... testování výkonu spíše než uvnitř funkčního testování.
Jak provádět testování souběžnosti
Testování souběžnosti probíhá v opakovatelné sekvenci. Níže uvedené kroky přecházejí od testování sco.ping k rozlišení.
- Krok 1) Identifikujte toky náchylné k souběžnosti. Hledejte sdílený stav: simultánní přihlášení, rezervace místa nebo zásob, aktualizace zůstatku, dávkové úlohy zapisující stejnou tabulku a jakoukoli jednovláknovou komponentu v cestě.
- Krok 2) Stanovte cíl souběžnosti. Rozhodněte, kolik uživatelů musí jednat ve stejném okamžiku, a to na základě skutečných špiček využití, nikoli na základě zaokrouhleného čísla.
- Krok 3) Navrhněte testovací případy. Každý modelový případ páruje sdílený zdroj, konkurenční akce a očekávaný konečný stav – například dvě relace odebírající z jednoho účtu nesmí obě uspět.
- Krok 4) Napište skript a vyberte nástroj. Je vyžadován generátor zátěže, který vytváří konfigurovatelné virtuální uživatele; JMeter je běžnou volbou open-source a jeho nastavení skupin vláken se přímo mapují na scénáře souběžnosti.
- Krok 5) Ramp postupně. Zvyšujte počet souběžných uživatelů postupně, nikoli skokověping k cíli, takže je viditelná úroveň, na které začíná soupeření.
- Krok 6) Monitorování a analýza. Sledujte čekání na uzamčení, rozptyl doby odezvy, míru chyb a blokování databáze společně – chyba souběžnosti se často projeví jako anomálie načasování dříve, než se projeví jako chyba.
- Krok 7) Vyřešte problém a spusťte znovu. Opravte příčinu synchronizace, indexování nebo zamykání a poté opakujte stejný běh, abyste potvrdili, že se chování změnilo, nikoli přesunulo.
Běžné chyby souběžnosti
Vady souběžnosti spadají do malého počtu rozpoznatelných tříd a správné pojmenování třídy obvykle přímo ukazuje na opravu.
| Přeběhnout | Co se stane, | Typický příznak |
| Podmínka závodu | Výsledek závisí na tom, která relace skončila jako první | Správné součty u některých běhů, špatné u jiných |
| Zablokování | Dvě sezení drží zámek, který ostatní potřebují | Transakce se zaseknou místo vrácení chyby. |
| Ztracená aktualizace | Druhý zápis přepíše první bez přečtení. | Uložená změna tiše zmizí |
| Zkorumpování dat | Sdílená struktura je zapsána pouze částečně | Záznamy ve stavu, který nemohla vytvořit žádná platná transakce |
| Hladovění | Jedna relace nikdy nezíská zdroj, na který čeká. | Časový limit cesty jednoho uživatele vyprší, i když systém vypadá v pořádku. |
Protože se tyto chyby vyskytují občas, je nutné při každém spuštění zaznamenávat protokoly a časová razítka, jinak nelze závadu důvěryhodně nahlásit prostřednictvím proces správy vad.
Příklad testování souběžnosti
Představte si internetový obchod, který má skladem poslední kus produktu. Dva nakupující otevřou položku ve stejnou chvíli a oba stisknou tlačítko Koupit.
- Scénář: Dvě relace čtou stock = 1, obě projdou kontrolou dostupnosti a obě zapíší stock = 0.
- Očekávaný výsledek: Jedna objednávka je potvrzena, druhá obdrží zprávu o vyprodaném zboží a zásoby nikdy neklesnou do záporných hodnot.
- Indikátor závady: Obě objednávky potvrzují, nebo zásoby dosáhnou hodnoty -1, což ukazuje, že kontrola dostupnosti a snížení zásob nebyly provedeny jako jeden atomický krok.
- Varianty, které stojí za to vyzkoušet: Stejné dvě relace upravující jeden záznam profilu, dvě schválení stejného požadavku a dávková úloha aktualizující tabulku, zatímco uživatel ukládá.
Stejný vzorec se zobecňuje: najít jeden zdroj, dva autory a žádnou záruku objednávání. Spuštění scénáře během testování systému, před přidáním zátěže, udržuje diagnózu čistou.
Výhody testování souběžnosti
- Relativně snižuje množství úsilí potřebného k testování aplikace omezením rozsahu souběžných interakcí na několik široce používaných a dobře otestovaných komponent.
- Zapouzdření umožňuje analyzovat chování části programu bez nutnosti procházet celou kódovou základnu.
- Pomáhá zlepšit spolehlivost a robustnost souběžných programů.
- Včas odhaluje limity zamykání a blokování, takže rozhodnutí o kapacitě se opírají spíše o naměřené soupeření než o odhady.
Nevýhody testování souběžnosti
S níže uvedenými nevýhodami se testeři obvykle setkávají při provádění testování souběžnosti.
- Aplikaci je nutné otestovat na více platformách.
- Souběžné scénáře vyžadují intenzivnější testy než sekvenční.
- Funkce nevrací výsledek volajícímu okamžitě; výsledek může být doručen později prostřednictvím oznámení, bloků, callback funkcí nebo podobných mechanismů, což testování ztěžuje.
- Tok informací nebo programu se neodráží v zásobníku volání.
- Počet cest provádění v systému může být extrémně velký, protože procesy v souběžném systému během svého provádění vzájemně interagují.
- Souběžné programy mají vyšší míru selhání než sekvenční programy.
- Ladění souběžných programů je obtížné, protože připojení ladicího programu mění načasování, které způsobilo selhání.

