Preskušanje kakovosti

Vrste testiranja programske opreme

Vrste testiranja programske opreme
Strategija testiranja vsakega programskega izdelka je drugačna. Pred razvijanjem strategije preizkušanja programske opreme moramo upoštevati poslovne cilje in / ali namen programske opreme. Na primer, programska oprema, ki deluje na letalu in nadzoruje varnost motorja in letenja, ima drugačen poslovni kontekst kot virusna platforma za izmenjavo videov na internetu za otroke. Za letalsko programsko opremo je zelo pomembno, da je popolnoma vse definirano in preverjeno. Hiter razvoj in spreminjanje novih funkcij ni prednostna naloga. Za virusno video platformo podjetje potrebuje inovacije, hitrost in hitre izboljšave, ki so veliko pomembnejše od zajamčene validacije sistema. Vsak kontekst je drugačen in obstaja veliko različnih praks za testiranje programske opreme. Izdelava preskusne strategije bo sestavljena iz mešanice ustreznih vrst preskušanja s seznama možnih vrst preskušanja, ki so razvrščeni spodaj. V tem članku bomo našteli različne vrste testiranja programske opreme.

Enotno preskušanje

Enotno testiranje je testiranje posamezne funkcije, razreda ali modula neodvisno od testiranja popolnoma delujoče programske opreme. Z uporabo ogrodja za enotno testiranje lahko programer ustvari testne primere z vhodnimi in pričakovanimi rezultati. Če imate na stotine, tisoče ali deset tisoč primerov enot za velik projekt programske opreme, zagotovite, da bodo vse posamezne enote delovale po pričakovanjih, ko boste še naprej spreminjali kodo. Pri menjavi enote, ki ima testne primere, je treba preučiti testne primere za ta modul in ugotoviti, ali so potrebni novi testni primeri, ali se je spremenil izhod ali pa je mogoče trenutne testne primere odstraniti kot nepomembne. Ustvarjanje velikega števila enotnih testov je najlažji način za doseganje velike pokritosti testnih primerov za osnovo programske kode, vendar ne bo zagotovilo, da končni izdelek deluje kot sistem, kot je bilo pričakovano.

Funkcionalno preskušanje

Funkcionalno testiranje je najpogostejša oblika testiranja. Ko se ljudje sklicujejo na testiranje programske opreme brez veliko podrobnosti, pogosto mislijo na funkcionalno testiranje. Preizkus delovanja bo preveril primarne funkcije programske opreme, kot je bilo pričakovano. Za opis vseh funkcionalnih testnih primerov, ki bodo testirani, bi lahko napisali preskusni načrt, ki ustreza glavnim značilnostim in zmožnostim programske opreme. Primarno testiranje funkcionalnosti bo »srečna pot " testiranje, ki programske opreme ne poskuša zlomiti ali uporabiti v zahtevnih scenarijih. To mora biti absolutni minimum testiranja za kateri koli projekt programske opreme.

Integracijsko preskušanje

Po enostavnem in funkcionalnem preizkusu je lahko več modulov ali celoten sistem, ki še ni bil preizkušen kot celota. Lahko pa obstajajo sestavni deli, ki so večinoma neodvisni, vendar se občasno uporabljajo skupaj. Vsak čas, ko se komponente ali moduli preskušajo neodvisno, vendar ne kot celoten sistem, je treba opraviti integracijsko testiranje, da se potrdi delovanje komponent kot delovni sistem v skladu z zahtevami in pričakovanji uporabnika.

Testiranje izjemnih situacij

Razmislite o testiranju izjemnih situacij, kot da preizkušate vesoljski shuttle ali letalo. Kaj pomeni postaviti svojo programsko opremo ali sistem pod “STRESS”? Stres ni nič drugega kot intenzivna obremenitev določene vrste, ki bo najverjetneje zlomila vaš sistem. To bi lahko bilo podobno kot "preskušanje obremenitve" v smislu, da bi vaš sistem postavil visoko sočasno s številnimi uporabniki, ki dostopajo do sistema. Toda poudarjanje sistema bi se lahko zgodilo tudi na drugih vektorjih. Na primer zagon vdelane programske opreme na komponenti strojne opreme, ko se je strojna oprema fizično poslabšala in deluje v poslabšanem načinu. Stres je edinstven za vse vrste programske opreme, pri sistemih in oblikovanju stresnih testov pa je treba upoštevati, kateri naravni ali nenaravni vzroki najverjetneje poudarijo vašo programsko opremo ali sistem.

Preskušanje obremenitve

Preskušanje obremenitve je posebna vrsta stresnega testiranja, kot je razloženo zgoraj, pri katerem je veliko število sočasnih uporabniških povezav in dostopov avtomatizirano, da se ustvari simulacija učinka velikega števila avtentičnih uporabnikov, ki hkrati dostopajo do vašega programskega sistema. Cilj je ugotoviti, koliko uporabnikov lahko hkrati dostopa do vašega sistema, ne da bi se vaš programski sistem zlomil. Če vaš sistem zlahka obvlada običajni promet 10.000 uporabnikov, kaj se bo zgodilo, če bo vaše spletno mesto ali programska oprema virusna in bo pridobila milijon uporabnikov? Bo to nepričakovano “LOAD” razbiti vaše spletno mesto ali sistem? Testiranje obremenitve bo to simuliralo, tako da boste zadovoljni s prihodnjim povečanjem števila uporabnikov, ker veste, da lahko vaš sistem prenese večjo obremenitev.

Testiranje učinkovitosti

Ljudje lahko postanejo popolnoma razočarani in obupani, če programska oprema ne izpolnjuje njihovih zahtev glede zmogljivosti. Uspešnost na splošno pomeni, kako hitro je mogoče dokončati pomembne funkcije. Bolj ko so funkcije na voljo v sistemu, bolj zapletene in dinamične so, bolj pomembne in ne očitne postane preizkušanje njegove zmogljivosti, vzemimo osnovni primer, operacijski sistem Windows ali Linux. Operacijski sistem je zelo kompleksen programski izdelek in izvajanje preizkusov delovanja sistema lahko vključuje hitrost in časovno razporeditev funkcij, kot je zagon, namestitev aplikacije, iskanje datoteke, izvajanje izračunov na grafičnem procesorju in / ali katero koli drugo milijone ukrepov, ki jih je mogoče izvesti. Pri izbiri primerov preizkusa učinkovitosti je treba paziti, da se zagotovijo pomembne in verjetne okvare preizkušenih funkcijskih lastnosti.

Testiranje razširljivosti

Testiranje na prenosnem računalniku je dobro, vendar premalo dobro, ko gradite socialno omrežje, e-poštni sistem ali superračunalniško programsko opremo. Kadar naj bi bila vaša programska oprema nameščena na 1000 strežnikih, ki delujejo enotno, potem testiranje, ki ga opravite lokalno v enem sistemu, ne bo odkrilo napak, ki se pojavijo, ko je programska oprema razporejena "v merilu" na stotisoče primerkov. V resnici vaše testiranje verjetno ne bo moglo nikoli teči v polnem obsegu pred sprostitvijo v proizvodnjo, ker bi bilo predrago in nepraktično zgraditi testni sistem s 1000 strežniki, ki stanejo milijone dolarjev. Zato se testiranje razširljivosti izvaja na več strežnikih, običajno pa ne celotnega števila delovnih strežnikov, da bi poskušali odkriti nekatere napake, ki bi jih lahko našli, ko se vaši sistemi uporabljajo na večji infrastrukturi.

Preskušanje statične analize

Statična analiza je testiranje, ki se opravi s pregledom programske kode, ne da bi jo dejansko zagnali. Za statično analizo bi na splošno uporabili orodje, obstaja veliko, eno znano orodje je Coverity. Statično analizo je enostavno zagnati pred izdajo programske opreme in lahko v kodi najde številne težave s kakovostjo, ki jih je mogoče odpraviti pred izdajo. Najdete lahko pomnilniške napake, napake pri obdelavi podatkov, ničelne usmeritve kazalca, neinicializirane spremenljivke in še veliko več napak. Jeziki, kot sta C in C ++, imajo veliko koristi od statične analize, ker jeziki programerjem nudijo veliko svobodo v zameno za veliko moč, vendar lahko to ustvari tudi velike napake in napake, ki jih lahko najdemo s testiranjem statične analize.

Preskušanje vbrizga napak

Nekatere pogoje napak je zelo težko simulirati ali sprožiti, zato je programska oprema lahko zasnovana tako, da umetno vbrizga težavo ali napako v sistem, ne da bi prišlo do napake, ki bi se naravno pojavila. Namen testiranja vbrizgavanja napak je videti, kako programska oprema obvladuje te nepričakovane napake. Ali se elegantno odzove na situacijo, ali se ponesreči ali povzroči nepričakovane in nepredvidljive problematične rezultate? Recimo, da imamo na primer bančni sistem in obstaja modul za notranji prenos sredstev z RAČUNA A na RAČUN B. Vendar se ta operacija prenosa pokliče šele, ko sistem že preveri, ali ti računi obstajajo, preden pokliče operacijo prenosa. Čeprav domnevamo, da oba računa obstajata, ima operacija prenosa primer okvare, pri katerem en ciljni ali izvorni račun ne obstaja in lahko povzroči napako. Ker v običajnih okoliščinah zaradi napačnega preizkusa vhodov te napake nikoli ne dobimo, zato za preverjanje vedenja sistema, ko prenos ne uspe zaradi neobstoječega računa, v sistem vbrizgamo ponarejeno napako, ki vrne neobstoječi račun za prenos in preizkusite, kako se v tem primeru odziva preostali del sistema. Zelo pomembno je, da je koda za vbrizgavanje napak na voljo samo v preskusnih scenarijih in ni objavljena v proizvodnji, kjer bi lahko povzročila opustošenje.

Testiranje prekoračitve spomina

Pri uporabi jezikov, kot sta C ali C ++, je programer zelo odgovoren za neposredno naslavljanje pomnilnika, kar lahko povzroči napake v programski opremi, če pride do napak. Na primer, če je kazalec ničen in se z njim ne vodi referenca, se bo programska oprema zrušila. Če je predmet dodeljen pomnilniku in je nato niz kopiran v pomnilniški prostor predmeta, lahko sklicevanje na objekt povzroči zrušitev ali celo nedoločeno napačno vedenje. Zato je ključnega pomena uporaba orodja za odkrivanje napak pri dostopu do pomnilnika v programski opremi, ki uporablja jezike, kot sta C ali C ++, ki bi lahko imeli te potencialne težave. Orodja, ki lahko izvajajo to vrsto testiranja, vključujejo odprtokodno Valgrind ali lastniška orodja, kot je PurifyPlus. Ta orodja lahko prihranijo dan, ko ni jasno, zakaj se programska oprema zruši ali ne deluje pravilno, in neposredno kažejo na lokacijo v kodi, v kateri je napaka. Super, kajne?

Preizkušanje mejnih primerov

Ko ste na meji, je enostavno narediti napake pri kodiranju. Na primer, bančni avtomati pravijo, da lahko dvignete največ 300 USD. Torej, predstavljajte si, da je kodir pri izdelavi te zahteve naravno napisal naslednjo kodo:

Če (amt < 300)
startWithdrawl ()

sicer
napaka (»Lahko umaknete% s«, amt);

Ali lahko opazite napako? Uporabnik, ki poskuša dvigniti 300 USD, bo prejel napako, ker ni manjša od 300 USD. To je napaka. Zato se mejno testiranje izvaja naravno. Meje zahtev nato zagotovijo, da programska oprema na obeh straneh meje in meje deluje pravilno.

Fuzz testiranje

Hitra generacija vhodnih podatkov v programsko opremo lahko ustvari čim več možnih vhodnih kombinacij, tudi če so te vhodne kombinacije popolna neumnost in jih pravi uporabnik ne bi nikoli ponudil. Tovrstno testiranje nejasnosti lahko odkrije napake in varnostne ranljivosti, ki jih ni mogoče najti z drugimi sredstvi zaradi velikega števila vhodnih podatkov in scenarijev, ki so bili hitro preizkušeni brez ročne generacije testnih primerov.

Raziskovalno preskušanje

Zaprite oči in si predstavljajte, kaj pomeni beseda "Raziskovanje". Opazujete in preiskujete sistem, da ugotovite, kako resnično deluje. Predstavljajte si, da po pošti prejmete nov pisalni stol z 28 deli v ločenih plastičnih vrečkah brez navodil. Morate raziskati svoj novi prihod, da ugotovite, kako deluje in kako je sestavljen. S tem duhom lahko postanete raziskovalni preizkuševalec. Ne boste imeli natančno določenega načrta preizkusov primerov. Raziskali in preizkusili boste svojo programsko opremo, da bi našli stvari, zaradi katerih izgovorite čudovito besedo: »ZANIMIVO!". Ko se naučite, poizkusite še naprej in poiščete načine, kako razbiti programsko opremo, na katero oblikovalci nikoli niso pomislili, in nato pošljete poročilo, ki podrobno opisuje številne slabe predpostavke, napake in tveganja v programski opremi. Več o tem izveste v knjigi z naslovom Explore It.

Testiranje penetracije

V svetu varnosti programske opreme je testiranje penetracije eno glavnih načinov testiranja. Vsi sistemi, bodisi biološki, fizični ali programski, imajo meje in meje. Te meje naj bi omogočile vstop v sistem samo določenim sporočilom, ljudem ali komponentam. Konkretno, razmislimo o sistemu spletnega bančništva, ki za vstop na spletno mesto uporablja avtentikacijo uporabnika. Če je mogoče spletno mesto vdreti in vstopiti v zaledje brez ustrezne avtentikacije, bi to lahko prodrlo, kar je treba zaščititi pred. Cilj preizkusa penetracije je uporaba znanih in eksperimentalnih tehnik, da se zaobide običajna varnostna meja programskega sistema ali spletnega mesta. Testiranje penetracije pogosto vključuje preverjanje vseh vrat, ki poslušajo, in poskus vstopa v sistem prek odprtih vrat. Druge pogoste tehnike vključujejo vbrizgavanje SQL ali razbijanje gesel.

Preskušanje regresije

Ko imate na terenu delujočo programsko opremo, je nujno preprečiti uvajanje napak v funkcionalnost, ki je že delovala. Namen razvoja programske opreme je povečati zmogljivost vašega izdelka, uvesti napake ali povzročiti, da stara funkcionalnost preneha delovati, kar se imenuje REGRESIJA. Regresija je napaka ali napaka, ki je bila uvedena, ko je prej zmogljivost delovala po pričakovanjih. Nič ne more uničiti ugleda vaše programske opreme ali blagovne znamke hitreje kot uvajanje regresijskih napak v vašo programsko opremo in če bodo pravi uporabniki našli te napake po izdaji.

Primeri regresijskega testiranja in preskusni načrti morajo biti zgrajeni okoli osnovne funkcije, ki mora še naprej delovati, da bodo uporabniki imeli dobre izkušnje z vašo aplikacijo. Vse temeljne funkcije vaše programske opreme, za katere uporabniki pričakujejo, da bodo delovale na določen način, bi morale imeti test regresije, ki ga je mogoče izvesti, da se prepreči prekinitev funkcionalnosti nove izdaje. To je lahko od 50 do 50.000 testnih primerov, ki pokrivajo osnovno funkcionalnost vaše programske opreme ali aplikacije.

Preskušanje bisekcij izvorne kode

V programsko opremo je bila uvedena napaka, ni pa očitno, katera različica izdaje je uvedla novo napako. Predstavljajte si, da je bilo od zadnjega znanega časa, ko je programska oprema delovala brez napak, 50 prevzemov programske opreme, do zdaj, ko ..

Preskušanje lokalizacije

Predstavljajte si vremensko aplikacijo, ki prikazuje trenutno in predvideno vreme na vaši lokaciji ter opis vremenskih razmer. Prvi del testiranja lokalizacije je zagotoviti pravilno prikazovanje pravilnega jezika, abecede in znakov, odvisno od geolokacije uporabnika. Aplikacija v Združenem kraljestvu naj bo prikazana v angleščini z latinico; ista aplikacija na Kitajskem mora biti prikazana s kitajskimi črkami v kitajskem jeziku. Z natančnejšim testiranjem lokalizacije se bo širši krog ljudi z različnih lokacij povezal z aplikacijo.

Testiranje dostopnosti

Nekateri državljani naše skupnosti so invalidi, zato imajo lahko težave z uporabo programske opreme, ki jo ustvarjajo, zato se testiranje dostopnosti izvaja, da se invalidnim prebivalstvom še vedno omogoči dostop do funkcionalnosti sistema. Na primer, če predpostavimo, da je 1% populacije barvno slep, naš programski vmesnik pa predvideva, da lahko uporabniki ločijo med rdečo in zeleno, vendar ti barvno slepi posamezniki NE MOREJO razlikovati. Zato bo vmesnik z dobro programsko opremo imel dodatne znake poleg barve, ki označujejo pomen. V preskušanje dostopnosti programske opreme bi bili vključeni tudi drugi scenariji poleg testiranja barvne slepote, kot so popolna vidna slepota, gluhost in številni drugi scenariji. Dober programski izdelek mora biti dostopen največjemu odstotku potencialnih uporabnikov.

Testiranje nadgradnje

Preproste aplikacije na telefonu, operacijske sisteme, kot so Ubuntu, Windows ali Linux Mint, in programsko opremo, ki poganja jedrske podmornice, je treba pogosto nadgraditi. Sam postopek nadgradnje bi lahko povzročil napake in napake, ki jih pri novi namestitvi ne bi bilo, ker je bilo stanje okolja drugačno, postopek uvajanja nove programske opreme na staro pa bi lahko povzročil napake. Vzemimo preprost primer, imamo prenosnik z Ubuntu 18.04 in želimo nadgraditi na Ubuntu 20.04. To je drugačen postopek namestitve operacijskega sistema kot neposredno čiščenje trdega diska in namestitev Ubuntu 20.04. Zato po namestitvi programske opreme ali katere koli njene izpeljane funkcije morda ne bo delovala stoodstotno, kot je bilo pričakovano, ali enako kot takrat, ko je bila programska oprema sveže nameščena. Torej, najprej bi morali razmisliti o preizkusu same nadgradnje v številnih različnih primerih in scenarijih, da zagotovimo, da nadgradnja deluje do konca. Nato moramo razmisliti tudi o preizkusu dejanskega sistema po nadgradnji, da zagotovimo, da je bila programska oprema postavljena in deluje po pričakovanjih. Ne bi ponavljali vseh testnih primerov sveže nameščenega sistema, kar bi bilo izguba časa, vendar bomo s svojim znanjem sistema dobro premislili, kaj LAHKO prekinemo med nadgradnjo in strateško dodali testne primere za te funkcije.

Testiranje črne škatle in bele škatle

Črna in bela škatla sta manj specifični testni metodologiji in več kategorizacijskih vrst preskušanja. V bistvu testiranje črne škatle, ki predpostavlja, da preizkuševalec ne ve ničesar o notranjem delovanju programske opreme in oblikuje preskusni načrt in primere, ki sistem samo pogledajo od zunaj, da preverijo njegovo delovanje. Testiranje bele škatle izvajajo arhitekti programske opreme, ki razumejo notranje delovanje programskega sistema in primere oblikujejo z vedenjem, kaj bi lahko, bi, kaj bi in kaj bi verjetno zlomilo. Tako pri črno-belem testiranju bodo verjetno našli različne vrste napak.

Blogi in članki o testiranju programske opreme

Testiranje programske opreme je dinamično področje in veliko zanimivih publikacij in člankov, ki skupnost posodabljajo o najsodobnejšem razmišljanju o testiranju programske opreme. To znanje lahko koristimo vsi. Tu je vzorec zanimivih člankov iz različnih spletnih virov, ki bi jim morda želeli slediti:

Izdelki za testiranje programske opreme

Večino dragocenih preizkusnih nalog je mogoče avtomatizirati, zato ne bi smelo biti presenečenje, da je uporaba orodij in izdelkov za izvajanje neštetih nalog zagotavljanja kakovosti programske opreme dobra ideja. Spodaj bomo našteli nekaj pomembnih in zelo dragocenih programskih orodij za testiranje programske opreme, ki jih lahko raziščete in preverite, ali vam lahko pomagajo.

JUnit

Za testiranje programske opreme, ki temelji na Javi, JUnit ponuja obsežen testni paket za enotno in funkcionalno testiranje kode, ki je prijazna okolju Java.

Selen

Za testiranje spletnih aplikacij Selenium ponuja možnost avtomatizacije interakcij s spletnimi brskalniki, vključno s preskušanjem združljivosti med brskalniki. To je vrhunska testna infrastruktura za avtomatizacijo spletnega testiranja.

Kumara

Vedenjsko usmerjen preskusni okvir omogoča poslovnim uporabnikom, upraviteljem izdelkov in razvijalcem, da pojasnijo pričakovano funkcionalnost v naravnem jeziku in nato to vedenje opredelijo v testnih primerih. To omogoča bolj berljive testne primere in jasno preslikavo pričakovane uporabniške funkcionalnosti.

Prečisti

Poiščite puščanje pomnilnika in poškodbe pomnilnika med izvajanjem tako, da zaženete svojo programsko opremo z vgrajenimi instrumenti Purify Plus, ki spremljajo porabo pomnilnika in opozarjajo na napake v kodi, ki jih brez instrumentacije ni enostavno najti.

Valgrind

Odprtokodna orodja, ki bodo izvajala vašo programsko opremo in vam omogočala interakcijo z njo, hkrati pa opozorila na napako kodiranja, kot so puščanje pomnilnika in poškodbe. Ni vam treba prevajati ali dodajati instrumentacije v postopek kompilacije, saj ima Valgrind inteligenco, da dinamično razume vašo strojno kodo in brez težav vbrizga instrumentacijo, da najde kodirne napake in vam pomaga izboljšati kodo.

Pokritost

Orodje za statično analizo, ki bo našlo napake kodiranja v vaši programski opremi, še preden sploh prevedete in zaženete kodo. Coverity lahko najde varnostne ranljivosti, kršitve konvencij o kodiranju, pa tudi napake in napake, ki jih prevajalnik ne bo našel. Najdemo mrtvo kodo, neinicializirane spremenljivke in na tisoče drugih vrst napak. Bistveno je, da kodo očistite s statično analizo, preden jo sprostite v produkcijo.

JMeter

Odprtokodni okvir za preizkušanje zmogljivosti, usmerjen v razvijalce na Javi, od tod tudi J v imenu. Testiranje spletnih strani je poleg preskušanja zmogljivosti baz podatkov, poštnih sistemov in številnih drugih strežniških aplikacij eden glavnih primerov uporabe JMeter.

Metasploit

Za preskušanje varnosti in penetracije je Metasploit generični okvir s tisočimi funkcijami in zmožnostmi. Uporabite interaktivno konzolo za dostop do predhodno kodiranih podvigov in poskusite preveriti varnost svoje aplikacije.

Akademske raziskave o preizkušanju programske opreme

Zaključek

Vloga programske opreme v družbi še naprej narašča, hkrati pa programska oprema na svetu postaja bolj zapletena. Da bi svet deloval, moramo imeti metode in strategije za preizkušanje in preverjanje veljavnosti programske opreme, ki jo ustvarjamo z izvajanjem funkcij, ki naj bi jih opravljal. Za vsak zapleten sistem programske opreme morata obstajati strategija preskušanja in načrt preskušanja, da se še naprej potrjuje funkcionalnost programske opreme, saj se še naprej izboljšuje in zagotavlja njeno funkcijo.

Uporabna orodja za igralce Linux
Če radi igrate igre na Linuxu, obstaja verjetnost, da ste za izboljšanje igralne izkušnje uporabljali aplikacije in pripomočke, kot so Wine, Lutris in...
HD Remastered Games za Linux, ki prej še niso izdale Linuxa
Mnogi razvijalci iger in založniki pripravijo HD remaster starih iger, da podaljšajo življenjsko dobo franšize, zato oboževalci zahtevajo združljivost...
Kako uporabljati AutoKey za avtomatizacijo iger Linux
AutoKey je namizni pripomoček za avtomatizacijo za Linux in X11, programiran v Python 3, GTK in Qt. Z njegovo funkcijo skriptiranja in MACRO lahko avt...