Mi az a párhuzamossági tesztelés a szoftvertesztelésben?

⚡ Okos összefoglaló

A párhuzamos tesztelés olyan hibákat észlel, amelyek csak akkor jelennek meg, ha több felhasználó egyszerre dolgozik ugyanazon az alkalmazáson, feltárva a patthelyzeteket, az elveszett frissítéseket és a zárolási problémákat, amelyeket a szekvenciális funkcionális ellenőrzések soha nem tárnak fel.

  • 👥 Más néven: Többfelhasználós tesztelés, mivel a kiváltó ok az egyidejű hozzáférés, nem pedig önmagában a nagy mennyiségű adat.
  • 🎯 Mit céloz meg: A megosztott adatbázisrekordok, megosztott modulok és megosztott alkalmazáskód egynél több munkamenet által elért.
  • 🔒 Mit mér: A holtpontok, zárolások, egyszálú kódok és a megosztott erőforrásokhoz való korlátozott hozzáférés szintjei.
  • 🧭 Hogyan működik: Azonosítsd a párhuzamosságra hajlamos folyamatokat, állíts be egy párhuzamossági célt, írj valós műveleteket szkriptbe, majd fokozatosan növeld a felhasználók számát.
  • 🐞 Hibaosztályok: Versenyfeltételek, holtpontok, elveszett frissítések, adatvesztés és száléhség.
  • ⚠️ Őszinte korlátok: A nemdeterminizmus, az aszinkron visszahívások és az informatív hívásverem megnehezíti a hibák reprodukálását.

Mi a párhuzamos tesztelés a szoftvertesztelésben több egyidejű felhasználó esetén?

Mi az a párhuzamossági tesztelés?

Párhuzamos tesztelés egy tesztelési technika, amelyet egy alkalmazás hibáinak észlelésére használnak, amikor több felhasználó van bejelentkezve. Más szóval, figyeli a hatást, miközben több felhasználó ugyanazt a műveletet hajtja végre egyszerre.

A párhuzamos tesztelést más néven is emlegetik többfelhasználós tesztelésEgy párhuzamos program tesztelése nagyobb kihívást jelent, mint egy szekvenciális programé, a nemdeterminizmus és a szinkronizációs problémák miatt: ugyanaz a teszt az egyik futtatáskor sikeres lehet, a következőn pedig megbukhat anélkül, hogy egyetlen sor kód is megváltozna.

Az alábbi ábra szemlélteti az ötletet – több felhasználó ugyanabban a pillanatban éri el ugyanazt az alkalmazáserőforrást, és a teszt megfigyeli, hogy az alkalmazás mit tesz az átfedéssel.

Párhuzamos tesztelési ábra, amelyen több felhasználó látható egyszerre ugyanahhoz az alkalmazáserőforráshoz való hozzáféréssel

Miért érdemes párhuzamos tesztelést végezni?

Két kérdés indokolja az erőfeszítést, és mindkettő láthatatlan az egyfelhasználós funkcionális futtatások számára.

  • Azonosítja az ugyanazon adatbázisrekordok, modulok vagy alkalmazáskódok egyidejű elérésének hatásait.
  • Azonosítja és méri a holtpontok, a zárolások, az egyszálú kód használatának és a megosztott erőforrásokhoz való korlátozott hozzáférés szintjét.

Egy funkció teljesen helyes lehet az egyik felhasználó számára, de a második felhasználó számára, aki egy milliszekundummal később érkezik, mégis adatvesztés történhet, ezért ez a technika a következővel párhuzamosan működik: Teljesítményfelmérés ahelyett, hogy belső funkcionális tesztelést végeznénk.

Hogyan végezzünk párhuzamos tesztelést

A párhuzamos tesztelés egy ismételhető sorozatot követ. Az alábbi lépések az sco-ból indulnak ki.ping a felbontáshoz.

  • 1. lépés) Azonosítsa a párhuzamosságra hajlamos folyamatokat. Keresse a megosztott állapotot: egyidejű bejelentkezések, hely- vagy készletfoglalás, egyenlegfrissítések, ugyanabba a táblába író kötegelt feladatok és az elérési úton található bármely egyszálú komponens.
  • 2. lépés) Állítson be egy párhuzamossági célt. Döntsd el, hogy hány felhasználónak kell egyszerre cselekednie, a valós használati csúcsok alapján, ne pedig kerek szám alapján.
  • 3. lépés) Tervezze meg a teszteseteket. Minden próbaper párosítja a megosztott erőforrást, a versengő műveleteket és a várható végállapotot – például két, egyazon fiókból történő kifizetési folyamat nem lehet sikeres.
  • 4. lépés) Írj szkriptet, és válaszd ki az eszközt. Szükséges egy konfigurálható virtuális felhasználókat létrehozó terhelésgenerátor; JMeter a leggyakoribb nyílt forráskódú választás, és a szálcsoport-beállításai közvetlenül a párhuzamos forgatókönyvekre vonatkoznak.
  • Step 5) Ramp fokozatosan. Növelje az egyidejű felhasználók számát szakaszosan, ne ugráljonping a célhoz, így látható a szint, amelyen a versengés elkezdődik.
  • 6. lépés) Monitorozás és elemzés. Figyelőzár várakozások, válaszidő-szórás, hibaarányok és adatbázis-blokkolás együttesen – a párhuzamos működési hibák gyakran időzítési anomáliákként jelennek meg, mielőtt hibaként jelennének meg.
  • 7. lépés) Oldja meg és futtassa újra. Javítsa ki a szinkronizálás, indexelés vagy zárolás okát, majd ismételje meg ugyanazt a futtatást annak megerősítéséhez, hogy a viselkedés megváltozott, nem pedig áthelyezett.

Gyakori párhuzamossági hibák

A párhuzamossági hibák néhány felismerhető osztályba sorolhatók, és az osztály helyes elnevezése általában egyenesen a javításra utal.

Disszidál Mi történik, Tipikus tünet
Versenyfeltételek Az eredmény attól függ, hogy melyik munkamenet ért véget előbb Néhány futamnál helyes, másnál helytelen összesítések
Holtpont Két munkamenet mindegyike zárat tartalmaz, a másiknak szüksége van rá A tranzakciók lefagynak a hiba visszaadása helyett
Elveszett frissítés Egy második írás felülírja az elsőt olvasás nélkül A mentett módosítás csendben eltűnik
Adatok sérülése Egy megosztott struktúra csak részben van megírva Olyan állapotban lévő rekordok, amelyeket érvényes tranzakció nem tudott létrehozni
éhezés Egyetlen munkamenet sem kapja meg a várt erőforrást Egyetlen felhasználói elérési út időtúllépést okoz, miközben a rendszer egészségesnek tűnik.

Mivel ezek a hibák időszakosan jelentkeznek, minden futtatásról naplókat és időbélyegeket kell rögzíteni; ellenkező esetben a hibát nem lehet hitelesen felvetni a hibakezelési folyamat.

Párhuzamos tesztelési példa

Vegyünk egy online áruházat, amely egy termék utolsó készleten lévő egységét tartja. Két vásárló egyszerre nyitja ki a terméket, és mindketten megnyomják a gombot. Vásárlás.

  • Forgatókönyv: Két munkamenet során a készlet értéke 1, mindkettő sikeresen átmegy az elérhetőségi ellenőrzésen, és mindkettő 0 értéket ír ki.
  • Várható eredmény: Az egyik rendelés visszaigazolásra kerül, a másik készlethiány üzenetet kap, és a készlet soha nem megy negatívba.
  • Hibajelző: Mindkét megrendelés visszaigazolódik, vagy a készlet -1-re landol, ami azt mutatja, hogy az elérhetőség ellenőrzése és a csökkentés nem egyetlen atomi lépésként kerül végrehajtásra.
  • Érdemes kipróbálni a következő variációkat: Ugyanaz a két munkamenet egy profilrekord szerkesztésével, ugyanazon kérés két jóváhagyása, és egy kötegelt feladat a tábla frissítése, miközben a felhasználó ment.

Ugyanez a minta általánosítható: egy erőforrás, két író és nincs rendelési garancia. A forgatókönyv futtatása a következőképpen történik: rendszertesztelés, mielőtt a terhelést hozzáadnánk, tisztán tartja a diagnózist.

A párhuzamos tesztelés előnyei

  • Viszonylagosan csökkenti az alkalmazás teszteléséhez szükséges erőfeszítést azáltal, hogy a párhuzamos interakciók körét néhány széles körben használt, jól tesztelt komponensre korlátozza.
  • Az enkapszuláció lehetővé teszi a program egy részének viselkedésének elemzését a teljes kódbázis áttekintése nélkül.
  • Segít javítani a párhuzamos programok megbízhatóságát és robusztusságát.
  • Korán feltárja a zárolási és blokkolási korlátokat, így a kapacitással kapcsolatos döntések a mért versengésen, nem pedig becsléseken alapulnak.

A párhuzamos tesztelés hátrányai

Az alábbi hátrányokkal jellemzően a tesztelők találkoznak párhuzamos tesztelés során.

  • Az alkalmazást több platformon kell tesztelni.
  • A párhuzamos tesztek intenzívebb teszteket igényelnek, mint a szekvenciálisak.
  • A függvények nem adják vissza azonnal az eredményüket a hívónak; ehelyett az eredmény később is kézbesíthető értesítések, blokkok, visszahívó függvények vagy hasonló mechanizmusok révén, ami megnehezíti a tesztelést.
  • Az információ vagy a programfolyamat nem jelenik meg a hívási veremben.
  • A rendszerben a végrehajtási útvonalak száma rendkívül nagy lehet, mivel egy párhuzamos rendszerben a folyamatok végrehajtás közben kölcsönhatásba lépnek egymással.
  • A párhuzamos programoknak magasabb a kudarcaránya, mint a szekvenciálisaknak.
  • A párhuzamos programok hibakeresése nehéz, mivel egy hibakereső csatlakoztatása megváltoztatja a hibát okozó időzítést.

GYIK

Nem. Terhelési tesztelés az elvárt mennyiség melletti viselkedést méri az idő múlásával. A párhuzamos tesztelés ugyanarra a pillanatra irányul, így egy hiba csak két felhasználó esetén is megjelenhet, ha mindketten egy megosztott rekordot érintenek meg.

A többszálú fele száltesztelés átfedésben van vele. A száltesztelés azt kérdezi, hogy egy üzleti útvonal túléli-e az integrációt; a párhuzamos tesztelés pedig azt kérdezi, hogy mit tesz az egyidejű hozzáférés, ha az útvonal már működik.

A számot a megfigyelt csúcshasználatból származtassa, ne kerek számból. Kezdjen két munkamenettel, hogy bebizonyítsa a logika atomi jellegét, majd fokozatosan növelje a teljesítményt a mért csúcs és egy bizonyos határérték felett.

A gépi tanulási modellek a korábbi hibaelőzmények és a megosztott állapotok komplexitása alapján rangsorolják a modulokat, a tesztelőket azokra a folyamatokra irányítva, amelyek a legnagyobb valószínűséggel hibásodnak meg átfedés esetén. Az ismételt futtatásokon végzett naplócsoportosítás ezután elkülöníti az egyes hibákat megelőző összefonódást.

GitHub másodpilóta gyorsan készít virtuális felhasználói szkripteket, korlátokat és állítási segítőket. A tesztelő továbbra is meghatározza, hogy melyik erőforrást osztják meg, és mi a helyes végállapot, mivel a generált tesztek ritkán kényszerítenek ki valódi átfedést.

Az izolációs szint, a zárolási időkorlát, a kapcsolatkészlet mérete és az indexelés mind befolyásolja a versengés megjelenését. Minden futtatáskor rögzítsd ezeket, mert az egyik izolációs szinten kapott eredmény semmit sem mond a másikról.

Ismételd meg ugyanazt a forgatókönyvet sokszor tiszta adatállapotból, tarts időbélyeggel ellátott naplókat, és szűkítsd le az ablakot a két versengő művelet között. Egy hibakereső csatlakoztatása gyakran elrejti a hibát az időzítés megváltoztatásával.

Igen, kötetfüggő versengés esetén. A kis táblák lehetővé teszik, hogy az adatbázis mindent a memóriában tartson, és rövid időre zároljon, így az éles környezetben megjelenő blokkolás láthatatlan marad. A sorok számát és az indexméreteket a lehető legpontosabban egyeztesse a környezettel.

Foglald össze ezt a bejegyzést a következőképpen: