Kvalitetstest

Typer af softwaretest

Typer af softwaretest
Strategien til test af hvert softwareprodukt er forskellig. Vi er nødt til at overveje forretningsmålene og / eller formålet med softwaren, inden vi udvikler softwareteststrategien. For eksempel har software, der kører i et fly, der styrer motoren og flysikkerheden, en anden forretningskontekst end en viral videodelingsplatform på internettet til børn. For flysoftwaren er det meget vigtigt, at absolut alt er defineret og verificeret. Hurtig udvikling og ændring af nye funktioner er ikke en prioritet. For den virale videoplatform har virksomheden brug for innovation, hastighed og hurtig forbedring, hvilket er meget vigtigere end garanteret validering af systemet. Hver kontekst er forskellig, og der er mange forskellige fremgangsmåder til softwaretest. Opbygning af teststrategien vil bestå af en blanding af de passende testtyper fra listen over mulige testtyper, som er kategoriseret nedenfor. I denne artikel viser vi forskellige typer softwaretest.

Enhedstest

Enhedstestning testes på en individuel funktion, klasse eller et modul uafhængigt end at teste en fuldt fungerende software. Ved hjælp af en ramme til enhedstest kan programmøren oprette testcases med input og forventet output. Når du har hundreder, tusinder eller titusinder af enhedstestsager til et stort softwareprojekt, sikrer du, at alle de enkelte enheder fungerer som forventet, når du fortsætter med at ændre koden. Når du skifter en enhed, der har testcases, skal testcases for det modul undersøges og afgøre, om der er behov for nye testcases, output er ændret, eller de aktuelle testcases kan fjernes, da de ikke længere er relevante. Oprettelse af et stort antal enhedstest er den nemmeste måde at opnå høj testdækning for en softwarekodebase, men det vil ikke sikre, at det endelige produkt fungerer som et system som forventet.

Funktionel testning

Funktionel test er den mest almindelige form for test. Når folk henviser til softwaretest uden meget detaljer, betyder de ofte funktionstest. Funktionstest vil kontrollere de primære funktioner i softwaren som forventet. En testplan kunne skrives for at beskrive alle de funktionelle testtilfælde, der vil blive testet, hvilket svarer til de vigtigste funktioner og muligheder i softwaren. Primær funktionstestning vil være “lykkelig vej ” test, som ikke forsøger at bryde softwaren eller bruge den i udfordrende scenarier. Dette bør være det absolutte minimum af test for ethvert softwareprojekt.

Integrationstest

Efter enhedstest og funktionstest kan der være flere moduler eller hele systemet, der endnu ikke er testet som en helhed. Eller der kan være komponenter, der stort set er uafhængige, men lejlighedsvis bruges sammen. Hver gang komponenter eller moduler testes uafhængigt, men ikke som et helt system, skal der udføres integrationstest for at validere komponenternes funktion sammen som et fungerende system i henhold til brugernes krav og forventninger.

Stresstest

Tænk på stresstest, som om du tester en rumfærge eller et fly. Hvad betyder det at sætte din software eller dit system under "STRESS"? Stress er intet andet end en intens belastning af en bestemt type, der mest sandsynligt bryder dit system. Dette kan svare til "Load Testing" i den forstand, at du sætter dit system under høj samtidighed med mange brugere, der får adgang til systemet. Men at understrege et system kan også ske på andre vektorer. For eksempel kører firmware på en hardwarekomponent, når hardwaren har haft fysisk forringelse og fungerer i nedbrudt tilstand. Stress er unikt for alle typer software, og systemer og design af stresstest bør overvejes, hvilke naturlige eller unaturlige årsager der mest sandsynligt vil stresse din software eller dit system.

Load Testing

Belastningstest er en bestemt type stresstest, som diskuteret ovenfor, hvorved et stort antal samtidige brugerforbindelser og -adgang automatiseres for at generere simulering af effekten af ​​et stort antal autentiske brugere, der får adgang til dit softwaresystem på samme tid. Målet er at finde ud af, hvor mange brugere der kan få adgang til dit system på samme tid uden at dit softwaresystem går i stykker. Hvis dit system let kan håndtere normal trafik på 10.000 brugere, hvad sker der, hvis dit websted eller din software bliver viral og får 1 million brugere? Vil dette uventet "BELASTNING" bryde dit websted eller system? Belastningstest vil simulere dette, så du er fortrolig med den fremtidige stigning i brugere, fordi du ved, at dit system kan håndtere den øgede belastning.

Test af ydeevne

Folk kan blive helt frustrerede og fortvivle, når softwaren ikke lever op til deres præstationskrav. Ydeevne betyder generelt, hvor hurtigt vigtige funktioner kan udføres. Jo mere komplekse og dynamiske funktionerne er tilgængelige i et system, jo ​​vigtigere og ikke indlysende bliver det at teste dets ydeevne, lad os tage et grundlæggende eksempel, Windows- eller Linux-operativsystem. Et operativsystem er et meget komplekst softwareprodukt, og udførelse af ydelsestest på dets system kan involvere hastighed og timing af funktioner såsom Bootup, installation af en app, søgning efter en fil, kørsel af beregninger på en GPU og / eller andre af de millioner af handlinger, der kan udføres. Der skal udvises forsigtighed, når man vælger ydeevnestesttilfælde for at sikre de vigtige og sandsynlige funktionsfejl, der er testet.

Test af skalerbarhed

Test på din bærbare computer er god, men ikke rigtig god nok, når du bygger et socialt netværk, et e-mail-system eller supercomputersoftware. Når din software er beregnet til at blive implementeret på 1000 servere, der alle fungerer sammen, vil den test, du foretager lokalt på et system, ikke afdække de fejl, der opstår, når softwaren implementeres "I skala" i hundreder af tusinder af forekomster. I virkeligheden vil din test sandsynligvis aldrig være i stand til at køre i fuld skala, før den frigives til produktion, fordi det ville være alt for dyrt og ikke praktisk at opbygge et testsystem med 1000 servere, der koster millioner af dollars. Derfor udføres skalerbarhedstest på flere servere, men normalt ikke det fulde antal produktionsservere for at forsøge at afdække nogle af de fejl, der kan findes, da dine systemer bruges på større infrastruktur.

Statisk analysetest

Statisk analyse er test, der udføres ved at inspicere softwarekoden uden faktisk at køre den. For at udføre statisk analyse vil du generelt bruge et værktøj, der er mange, et berømt værktøj er Coverity. Statisk analyse er let at køre, før du frigiver din software og kan finde mange kvalitetsproblemer i din kode, der kan løses, inden du frigiver. Hukommelsesfejl, datatypehåndteringsfejl, null pointer dereferences, ikke-initialiserede variabler og mange flere defekter kan findes. Sprog som C og C ++ drager stor fordel af statisk analyse, fordi sprogene giver stor frihed til programmører i bytte for stor magt, men dette kan også skabe store bugs og fejl, der kan findes ved hjælp af statisk analysetest.

Test af fejlinjektion

Nogle fejltilstande er meget vanskelige at simulere eller udløse, derfor kan softwaren designes til kunstigt at injicere et problem eller en fejl i systemet uden manglen naturligt forekommende. Formålet med test af fejlinjektion er at se, hvordan softwaren håndterer disse uventede fejl. Reagerer det yndefuldt på situationen, går det ned, eller giver det uventede og uforudsigelige problematiske resultater? Lad os for eksempel sige, at vi har et banksystem, og der er et modul til at overføre penge internt fra KONTO A til KONTO B. Denne overførselsoperation kaldes dog først op, efter at systemet allerede har verificeret, at disse konti eksisterede, før overførselsoperationen blev kaldt. Selvom vi antager, at begge konti findes, har overførselsoperationen en fejlsag, hvor et mål eller en kildekonto ikke findes, og at det kan kaste en fejl. Fordi vi under normale omstændigheder aldrig får denne fejl på grund af for-test af input, så for at kontrollere systemadfærd, når overførslen mislykkes på grund af en ikke-eksisterende konto, indsprøjter vi en falsk fejl i systemet, der returnerer en ikke-eksisterende konto til en overførsel og test, hvordan resten af ​​systemet reagerer i så fald. Det er meget vigtigt, at fejlindsprøjtningskoden kun er tilgængelig i testscenarier og ikke frigives til produktion, hvor det kan skabe kaos.

Test af hukommelsesoverskridelse

Når man bruger sprog som C eller C ++, har programmøren et stort ansvar for at adressere hukommelsen direkte, og dette kan forårsage fatale fejl i software, hvis der begås fejl. For eksempel, hvis en markør er nul og derferenseret, vil softwaren gå ned. Hvis hukommelsen allokeres til et objekt, og derefter kopieres en streng over objektets hukommelsesplads, kan det henvise til objektet forårsage et nedbrud eller endda uspecificeret forkert opførsel. Derfor er det vigtigt at bruge et værktøj til at prøve at fange hukommelsesadgangsfejl i software, der bruger sprog som C eller C ++, hvilket kan have disse potentielle problemer. Værktøjer, der kan udføre denne type test, inkluderer Open Source Valgrind eller proprietære værktøjer som PurifyPlus. Disse værktøjer kan redde den dag, hvor det ikke er klart, hvorfor softwaren går ned eller opfører sig forkert og direkte peger på placeringen i koden, der har fejlen. Awesome, rigtigt?

Grænsesagstest

Det er let at lave fejl i kodning, når du er på det, der kaldes en grænse. For eksempel siger en bankautomatisk kassamaskine, at du maksimalt kan trække $ 300 ud. Så forestil dig, at koderen skrev følgende kode naturligt, når han byggede dette krav:

Hvis (amt < 300)
startWithdrawl ()

andet
fejl (“Du kan trække% s ud”, amt);

Kan du få øje på fejlen? Brugeren, der prøver at hæve $ 300, modtager en fejl, fordi den ikke er mindre end $ 300. Dette er en fejl. Derfor udføres grænsetest naturligt. Kravsgrænser sikrer derefter, at softwaren fungerer korrekt på begge sider af grænsen og grænsen.

Fuzz-test

Højhastighedsgenerering af input til software kan producere så mange mulige inputkombinationer, selvom disse inputkombinationer er total vrøvl og aldrig ville blive leveret af en rigtig bruger. Denne type fuzz-test kan finde fejl og sikkerhedssårbarheder, der ikke findes på andre måder på grund af den høje mængde input og scenarier, der testes hurtigt uden manuel testgenerering.

Undersøgende test

Luk øjnene og visualiser, hvad ordet "Udforsk" betyder. Du observerer og undersøger et system for at finde ud af, hvordan det virkelig fungerer. Forestil dig, at du modtager en ny skrivebordsstol i postordre, og den har 28 dele alle i separate plastposer uden instruktioner. Du skal udforske din nye ankomst for at finde ud af, hvordan den fungerer, og hvordan den er sammensat. Med denne ånd kan du blive en udforskende tester. Du har ikke en veldefineret testplan for testsager. Du vil udforske og undersøge din software på udkig efter ting, der får dig til at sige det vidunderlige ord: “INTERESSANT!”. Når du lærer, undersøger du yderligere og finder måder at bryde softwaren, som designerne aldrig har tænkt på, og derefter levere en rapport, der beskriver talrige dårlige antagelser, fejl og risici i softwaren. Lær mere om dette i bogen kaldet Explore It.

Penetrationstest

I en verden af ​​softwaresikkerhed er penetrationstest et af de primære testmetoder. Alle systemer, hvad enten det er biologisk, fysisk eller software, har grænser og grænser. Disse grænser er beregnet til kun at tillade specifikke meddelelser, personer eller komponenter at komme ind i systemet. Mere konkret, lad os overveje et online banksystem, der bruger brugergodkendelse til at komme ind på siden. Hvis webstedet kan hackes og indtastes i backend uden korrekt godkendelse, ville det være en penetration, som skal beskyttes mod. Målet med penetrationstest er at bruge kendte og eksperimentelle teknikker til at omgå den normale sikkerhedsgrænse for et softwaresystem eller et websted. Penetrationstest involverer ofte kontrol af alle porte, der lytter, og forsøger at komme ind i et system via en åben port. Andre almindelige teknikker inkluderer SQL-indsprøjtning eller cracking af adgangskoder.

Regressionstest

Når du har arbejdssoftware, der er implementeret i marken, er det vigtigt at forhindre introduktion af fejl i funktionalitet, der allerede fungerede. Formålet med softwareudvikling er at øge produktets kapacitet, introducere fejl eller få gammel funktionalitet til at stoppe med at arbejde, hvilket kaldes en REGRESSION. Regression er en fejl eller defekt, der blev introduceret, da kapaciteten tidligere fungerede som forventet. Intet kan ødelægge omdømmet for din software eller dit brand hurtigere end at indføre regressionsfejl i din software og få rigtige brugere til at finde disse fejl efter en frigivelse.

Regressionstestsager og testplaner skal bygges omkring kernefunktionaliteten, der skal fortsætte med at arbejde for at sikre, at brugerne har en god oplevelse med din applikation. Alle kernefunktionerne i din software, som brugerne forventer at arbejde på en bestemt måde, bør have en regressionstesttilstand, der kan udføres for at forhindre, at funktionaliteten bryder ved en ny udgivelse. Dette kan være alt fra 50 til 50.000 testsager, der dækker kernefunktionaliteten i din software eller applikation.

Test af kildekode-gennemskæring

En fejl blev introduceret i softwaren, men det er ikke indlysende, hvilken version af udgivelsen der introducerede den nye fejl. Forestil dig, at der var 50 softwareforpligtelser fra sidst kendte gang, softwaren fungerede uden fejlen, indtil nu, når ..

Lokaliseringstest

Forestil dig en vejrapplikation, der viser det aktuelle og forventede vejr på dit sted, samt en beskrivelse af vejrforholdene. Den første del af lokaliseringstest er at sikre, at det korrekte sprog, alfabet og tegn vises korrekt afhængigt af brugerens geolokalisering. Appen i Storbritannien skal vises på engelsk med latinske tegn; den samme app i Kina skal vises med kinesiske tegn på det kinesiske sprog. Mere detaljeret lokaliseringstest udført, den bredere vifte af mennesker fra forskellige geolokationer vil interface med applikationen.

Test af tilgængelighed

Nogle af borgerne i vores samfund har handicap og kan derfor have problemer med at bruge softwaren, der oprettes, så tilgængelighedstest udføres for at sikre, at befolkninger med handicap stadig kan få adgang til systemets funktionalitet. For eksempel, hvis vi antager, at 1% af befolkningen er farveblinde, og vores softwaregrænseflade antager, at brugerne kan skelne mellem rød og grøn, men de farveblinde individer KAN IKKE se forskellen. Derfor vil en software til godt software have yderligere signaler ud over farven for at indikere betydning. Andre scenarier udover test af farveblindhed ville også være inkluderet i test af tilgængelighed af software, såsom fuld visuel blindhed, døvhed og mange andre scenarier. Et godt softwareprodukt skal være tilgængeligt af en maksimal procentdel af potentielle brugere.

Opgraderingstest

Enkle apps på en telefon, operativsystemer som Ubuntu, Windows eller Linux Mint og software, der kører atomubåde, har brug for hyppige opgraderinger. Processen med selve opgraderingen kunne introducere bugs og defekter, der ikke ville eksistere ved en ny installation, fordi miljøtilstanden var anderledes, og processen med at introducere den nye software oven på den gamle kunne have introduceret bugs. Lad os tage et simpelt eksempel, vi har en bærbar computer, der kører Ubuntu 18.04, og vi vil opgradere til Ubuntu 20.04. Dette er en anden proces med installation af operativsystemet end direkte rengøring af harddisken og installation af Ubuntu 20.04. Derfor, efter at softwaren er installeret eller en af ​​dens afledte funktioner, fungerer den muligvis ikke 100% som forventet eller det samme som da softwaren blev nyinstalleret. Så vi bør først overveje at teste selve opgraderingen under mange forskellige tilfælde og scenarier for at sikre, at opgraderingen fungerer til afslutning. Og så skal vi også overveje at teste den aktuelle systemopgradering for at sikre, at softwaren blev lagt ned og fungerede som forventet. Vi gentager ikke alle testtilfælde i et nyinstalleret system, hvilket ville være spild af tid, men vi vil tænke nøje over med vores viden om systemet, hvad der KUN bryde under en opgradering og strategisk tilføje testsager til disse funktioner.

Black Box & White Box Testing

Sort kasse og hvid kasse er mindre specifikke testmetoder og mere af kategoriseringstyper af test. I det væsentlige testes den sorte boks, som antager, at testeren ikke ved noget om softwarens indre funktion og bygger en testplan og testcases, der bare ser på systemet udefra for at verificere dets funktion. White box-test udføres af softwarearkitekter, der forstår det interne arbejde i et softwaresystem og designer sagerne med viden om, hvad der kunne, ville, burde og sandsynligvis bryde. Både test i sort og hvid boks vil sandsynligvis finde forskellige typer fejl.

Blogs og artikler om softwaretest

Softwaretest er et dynamisk felt, og mange interessante publikationer og artikler, der opdaterer samfundet om avanceret tænkning om softwaretest. Vi kan alle drage fordel af denne viden. Her er et eksempel på interessante artikler fra forskellige blogkilder, du måske vil følge:

Produkter til softwaretest

De fleste værdifulde testopgaver kan automatiseres, så det bør ikke være nogen overraskelse, at det er en god idé at bruge værktøjer og produkter til at udføre de utallige opgaver inden for softwarekvalitetssikring. Nedenfor viser vi nogle vigtige og meget værdifulde softwareværktøjer til softwaretest, som du kan udforske og se, om de kan hjælpe.

JUnit

Til test af Java-baseret software leverer JUnit en omfattende testpakke til enheds- og funktionstest af koden, der er venlig over for Java-miljøet.

Selen

Til test af webapplikationer giver Selenium muligheden for at automatisere interaktioner med webbrowsere, herunder test af kompatibilitet på tværs af browsere. Dette er en førende testinfrastruktur til automatisering af webtest.

Agurk

En adfærdsdrevet testramme giver forretningsbrugere, produktledere og udviklere mulighed for at forklare den forventede funktionalitet på et naturligt sprog og derefter definere denne adfærd i testsager. Dette gør mere læsbare testsager og tydelig kortlægning til forventet brugerfunktionalitet.

Rens

Find hukommelseslækager og hukommelseskorruptioner ved kørsel ved at udføre din software med Purify Plus-instrumentering integreret, der sporer dit hukommelsesforbrug og påpeger fejl i din kode, der ikke er lette at finde uden instrumentering.

Valgrind

Open source-værktøjer, der udfører din software og giver dig mulighed for at interagere med den, mens du påpeger en fejlrapport om kodningsfejl såsom hukommelseslækage og korruption. Intet behov for at kompilere eller tilføje instrumentering til kompileringsprocessen, da Valgrind har intelligensen til dynamisk at forstå din maskinkode og indsprøjte instrumentering problemfrit for at finde kodningsfejl og hjælpe dig med at forbedre din kode.

Dækning

Statisk analyseværktøj, der finder kodningsfejl i din software, før du selv kompilerer og kører din kode. Coverity kan finde sikkerhedssårbarheder, overtrædelser af kodningskonventioner samt fejl og mangler, som din kompilator ikke finder. Død kode kan findes, ikke-initialiserede variabler og tusindvis af andre defekttyper. Det er vigtigt at rense din kode med statisk analyse, før du frigiver den til produktion.

JMeter

En open source-ramme til præstationstest orienteret mod Java-baserede udviklere, deraf J i navnet. Hjemmesidetest er en af ​​de vigtigste anvendelsestilfælde for JMeter ud over ydelsestest af databaser, mailsystemer og mange andre serverbaserede applikationer.

Metasploit

Til sikkerhed og penetrationstest er Metasploit en generisk ramme med tusindvis af funktioner og funktioner. Brug interaktionskonsollen til at få adgang til forkodede udnyttelser og prøv at verificere sikkerheden i din applikation.

Akademisk forskning i softwaretest

Konklusion

Softwares rolle i samfundet fortsætter med at vokse, og samtidig bliver verdens software mere kompleks. For at verden skal fungere, skal vi have metoder og strategier til at teste og validere den software, vi opretter ved at udføre de funktioner, den er beregnet til at udføre. For hvert komplekst softwaresystem bør der være en teststrategi og testplan for at fortsætte med at validere softwarefunktionaliteten, da de fortsat bliver bedre og leverer dens funktion.

Shadow of the Tomb Raider til Linux-vejledning
Shadow of the Tomb Raider er den tolvte tilføjelse til Tomb Raider-serien - en action-adventure-spilfranchise oprettet af Eidos Montreal. Spillet blev...
Sådan styrkes FPS i Linux?
FPS står for Billeder i sekundet. FPS's opgave er at måle billedhastigheden i videoafspilninger eller spiloptræden. I enkle ord betegnes antallet af u...
Top Oculus App Lab-spil
Hvis du er Oculus-headset-ejer, skal du være opmærksom på sideloading. Sideladning er processen med at installere ikke-butiksindhold på dit headset. S...