Mitä on samanaikaisuustestaus ohjelmistotestauksessa?

⚡ Älykäs yhteenveto

Rinnakkaisuustestaus havaitsee vikoja, jotka ilmenevät vain, kun useat käyttäjät työskentelevät samassa sovelluksessa samaan aikaan, paljastaen lukkiutumia, kadonneita päivityksiä ja lukitusongelmia, joita peräkkäiset toiminnalliset tarkistukset eivät koskaan paljasta.

  • 👥 Kutsutaan myös: Usean käyttäjän testaus, koska laukaisevana tekijänä on samanaikainen käyttö eikä pelkästään suuri tietomäärä.
  • 🎯 Mihin se kohdistuu: Jaetut tietokantatietueet, jaetut moduulit ja jaettu sovelluskoodi saavutettu useamman kuin yhden istunnon aikana.
  • 🔒 Mitä se mittaa: Lukituksen, lukkiutumisen, yksisäikeisen koodin ja jaettujen resurssien rajoitetun käytön tasot.
  • 🧭 Näin se toimii: Tunnista samanaikaisuudelle alttiit virrat, aseta samanaikaisuustavoite, skriptaa todelliset toiminnot ja lisää sitten käyttäjien määrää asteittain.
  • 🐞 Vikaluokat: Kilpailuolosuhteet, umpikujat, kadonneet päivitykset, tietojen vioittuminen ja säikeiden nälkä.
  • ⚠️ Rehelliset rajat: Epädeterminismi, asynkroniset takaisinkutsut ja epäinformatiivinen kutsupino tekevät virheiden toistamisesta vaikeaa.

Mitä on samanaikaisuustestaus ohjelmistotestauksessa, jossa on useita samanaikaisia ​​käyttäjiä

Mitä on samanaikaisuustestaus?

Samanaikaisuustestaus on testaustekniikka, jota käytetään sovelluksen virheiden havaitsemiseen, kun useita käyttäjiä on kirjautuneena sisään. Toisin sanoen se valvoo vaikutusta, kun useat käyttäjät suorittavat saman toiminnon samanaikaisesti.

Rinnakkaisuustestausta kutsutaan myös ns. usean käyttäjän testausRinnakkaisen ohjelman testaaminen on haastavampaa kuin peräkkäisen ohjelman testaaminen epädeterminismin ja synkronointiongelmien vuoksi: sama testi voi läpäistä yhdellä ajolla ja epäonnistua seuraavalla ilman, että yhtäkään koodiriviä muutetaan.

Alla oleva kaavio havainnollistaa ideaa — useat käyttäjät käyttävät samaa sovellusresurssia samaan aikaan, ja testi tarkkailee, mitä sovellus tekee päällekkäisyydellä.

Samanaikaisuustestauskaavio, joka näyttää useiden käyttäjien käyttävän samaa sovellusresurssia samanaikaisesti

Miksi rinnakkaistestaus

Kaksi kysymystä oikeuttaa vaivannäön, ja molemmat ovat näkymättömiä yhden käyttäjän toiminnallisille suorituksille.

  • Se tunnistaa samojen tietokantatietueiden, moduulien tai sovelluskoodin samanaikaisen käytön vaikutukset.
  • Se tunnistaa ja mittaa lukkiutumisen, yksisäikeisen koodin käytön ja jaettujen resurssien rajoitetun käytön tason.

Ominaisuus voi olla täysin oikein yhdelle käyttäjälle ja silti menettää tietoja toiselle käyttäjälle, joka saapuu millisekunnin myöhemmin, minkä vuoksi tätä tekniikkaa käytetään rinnakkain suorituskyvyn testaus sen sijaan, että se testattaisiin toiminnallisesti sisällä.

Kuinka suorittaa samanaikaisuustestaus

Rinnakkaisuustestaus noudattaa toistettavissa olevaa järjestystä. Alla olevat vaiheet siirtyvät sco:staping resoluutioon.

  • Vaihe 1) Tunnista samanaikaisuudelle alttiit virrat. Etsi jaettua tilaa: samanaikaiset kirjautumiset, paikkojen tai varastojen varaukset, saldopäivitykset, samaan taulukkoon kirjoittavat erätyöt ja kaikki polun yksisäikeiset komponentit.
  • Vaihe 2) Aseta samanaikaisuustavoite. Päätä, kuinka monen käyttäjän on toimittava samaan aikaan, todellisten käyttöpiikkilukujen perusteella pyöreän luvun sijaan.
  • Vaihe 3) Suunnittele testitapaukset. kukin testitapaus yhdistää jaetun resurssin, kilpailevat toiminnot ja odotetun lopputilan – esimerkiksi kaksi samalta tililtä nostettavaa istuntoa eivät saa molemmat onnistua.
  • Vaihe 4) Kirjoita skripti ja valitse työkalu. Tarvitaan kuormitusgeneraattori, joka luo konfiguroitavia virtuaalikäyttäjiä; JMeter on yleinen avoimen lähdekoodin valinta, ja sen säikeiden ryhmäasetukset liittyvät suoraan samanaikaisuusskenaarioihin.
  • Vaihe 5) Ramp vähitellen. Lisää samanaikaisten käyttäjien määrää vaiheittain hyppimisen sijaanping kohteeseen, joten taso, jolla kilpailu alkaa, on näkyvissä.
  • Vaihe 6) Seuraa ja analysoi. Lukitusodotukset, vasteajan hajonta, virheprosentit ja tietokannan esto yhdessä – samanaikaisuusvika näkyy usein ajoituspoikkeamana ennen kuin se ilmenee virheenä.
  • Vaihe 7) Ratkaise ja suorita uudelleen. Korjaa synkronoinnin, indeksoinnin tai lukituksen syy ja toista sitten sama suoritus varmistaaksesi, että toiminta on muuttunut siirron sijaan.

Yleisiä samanaikaisuusvirheitä

Samanaikaisuusviat jakautuvat pieneen määrään tunnistettavia luokkia, ja luokan oikea nimeäminen viittaa yleensä suoraan korjaukseen.

Vika Mitä tapahtuu Tyypillinen oire
Kilpailuolosuhteet Tulos riippuu siitä, kumpi istunto päättyi ensin Oikeita kokonaismääriä joillakin juoksuilla, vääriä toisilla
umpikuja Kaksi istuntoa pitää kumpikin kiinni toiselle tarvittavasta lukituksesta. Tapahtumat jumiutuvat virheen palauttamisen sijaan
Kadonnut päivitys Toinen kirjoitus ylikirjoittaa ensimmäisen lukematta sitä Tallennettu muutos katoaa automaattisesti
Tietojen korruptio Jaettu rakenne kirjoitetaan vain osittain Tietueet tilassa, jota mikään kelvollinen tapahtuma ei voinut luoda
nälkiintyminen Yksi istunto ei koskaan saa odottamaansa resurssia Yhden käyttäjän polku aikakatkaistaan, vaikka järjestelmä näyttää toimivalta

Koska nämä viat ovat ajoittaisia, jokainen ajo on kirjattava lokeihin ja aikaleimoihin; muuten vikaa ei voida nostaa uskottavasti esiin vianhallinnan prosessi.

Samanaikaisuustestauksen esimerkki

Ajatellaanpa verkkokauppaa, jolla on varastossa viimeinen kappale tuotetta. Kaksi ostajaa avaa tuotteen samaan aikaan ja molemmat painavat Osta.

  • Skenaario: Kaksi istuntoa lukee varastossa olevan arvon 1, molemmat läpäisevät saatavuustarkistuksen ja molemmat kirjoittavat varastossa olevan arvon 0.
  • Odotettu tulos: Toinen tilaus vahvistetaan, toinen saa viestin, että tuote on loppunut varastosta, eikä varastosaldo koskaan mene negatiiviseksi.
  • Vikaindikaattori: Molemmat tilaukset vahvistuvat tai varasto laskeutuu arvoon -1, mikä osoittaa, että saatavuuden tarkistusta ja vähennystä ei suoriteta yhtenä atomivaiheena.
  • Kokeilemisen arvoisia muunnelmia: Samat kaksi istuntoa, joissa muokataan yhtä profiilitietuetta, kaksi saman pyynnön hyväksyntää ja eräajo, jossa päivitetään taulukkoa käyttäjän tallennettaessa.

Sama kaava yleistyy: löydetään yksi resurssi, kaksi kirjoittajaa eikä tilaustakuuta ole. Skenaarion suorittaminen aikana järjestelmän testausennen kuorman lisäämistä pitää diagnoosin puhtaana.

Samanaikaisuustestauksen edut

  • Se vähentää suhteellisesti sovelluksen testaamiseen tarvittavaa vaivaa rajoittamalla samanaikaisten vuorovaikutusten laajuuden muutamaan laajalti käytettyyn, hyvin testattuun komponenttiin.
  • Kapselointi mahdollistaa ohjelman osan käyttäytymisen analysoinnin ilman koko koodikannan tarkastelua.
  • Se auttaa parantamaan rinnakkaisten ohjelmien luotettavuutta ja kestävyyttä.
  • Se paljastaa lukitus- ja estorajat varhaisessa vaiheessa, joten kapasiteettipäätökset perustuvat mitattuun kilpailuun eikä arvioihin.

Rinnakkaisuustestauksen haitat

Alla olevat haitat ovat tyypillisesti testaajien kohtaamia rinnakkaistestausta suorittaessa.

  • Sovellusta on testattava useilla alustoilla.
  • Samanaikaisuusskenaariot vaativat intensiivisempiä testejä kuin peräkkäiset skenaariot.
  • Funktiot eivät palauta tulostaan ​​kutsujalle välittömästi; sen sijaan tulos voidaan toimittaa myöhemmin ilmoitusten, lohkojen, takaisinkutsufunktioiden tai vastaavien mekanismien kautta, mikä vaikeuttaa testausta.
  • Tieto- tai ohjelmakulku ei näy puhelupinossa.
  • Järjestelmän suorituspolkujen määrä voi olla erittäin suuri, koska rinnakkaisen järjestelmän prosessit ovat vuorovaikutuksessa keskenään suorituksen aikana.
  • Samanaikaisilla ohjelmilla on suurempi epäonnistumisprosentti kuin peräkkäisillä.
  • Samanaikaisten ohjelmien virheenkorjaus on vaikeaa, koska virheenkorjaajan liittäminen muuttaa virheen aiheuttanutta ajoitusta.

UKK

Ei. Kuormitustestaus mittaa käyttäytymistä odotetun volyymin rajoissa ajan kuluessa. Samanaikaisuustestaus kohdistuu samaan hetkeen, joten vika voi ilmetä vain kahdella käyttäjällä, jos molemmat koskevat samaan jaettuun tietueeseen.

Monisäikeinen puolikas säikeiden testaus päällekkäin sen kanssa. Säietestaus kysyy, selviääkö yksi liiketoimintapolku integraatiosta; samanaikaisuustestaus kysyy, mitä samanaikainen käyttö tekee, kun kyseinen polku jo toimii.

Johda luku havaitusta huippukäytöstä, älä pyöreästä luvusta. Aloita kahdella istunnolla todistaaksesi logiikan atomaarisen luonteen, ja kiihdy sitten kohti mitattua huippua ja sen yläpuolelle.

Koneoppimismallit luokittelevat moduulit aiemman vikahistorian ja jaetun tilan monimutkaisuuden perusteella, osoittaen testaajille päällekkäisyyden todennäköisimmin rikkoutuvat virrat. Lokien klusterointi toistuvien ajojen välillä eristää sitten kutakin vikaa edeltäneen lomituksen.

GitHub Copilot luonnostelee virtuaalikäyttäjien skriptit, esteet ja vahvistushaput nopeasti. Testaaja määrittää edelleen, mitä resurssia jaetaan ja mikä on oikea lopputila, koska luodut testit harvoin pakottavat aitoon päällekkäisyyteen.

Eristystaso, lukituksen aikakatkaisu, yhteyspoolin koko ja indeksointi muuttavat kaikki kilpailun ulkoasua. Kirjaa ne jokaisella ajolla, koska yhden eristystason alaisuudessa saatu tulos ei kerro mitään toisesta.

Toista sama skenaario useita kertoja puhtaasta datasta, säilytä aikaleimatut lokit ja kavenna kahden kilpailevan toiminnon välistä aikaikkunaa. Virheenkorjaajan liittäminen usein piilottaa vian muuttamalla ajoitusta.

Kyllä, jos tiedostojen määrä on riippuvainen. Pienet taulukot antavat tietokannan pitää kaiken muistissa ja lukita ne lyhyeksi aikaa, joten tuotannossa esiintyvä esto pysyy näkymättömänä. Yhdistä rivimäärät ja indeksikoot niin tarkasti kuin ympäristö sallii.

Tiivistä tämä viesti seuraavasti: