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

