Kvalitetstesting

Typer programvaretesting

Typer programvaretesting
Strategien for å teste hvert programvareprodukt er forskjellig. Vi må vurdere forretningsmålene og / eller formålet med programvaren før vi utvikler programvareteststrategien. For eksempel har programvare som kjører i et fly, som styrer motoren og flysikkerheten, en annen forretningskontekst enn en viral videodelingsplattform på internett for barn. For flyprogramvaren er det veldig viktig at absolutt alt er definert og verifisert. Rask utvikling og endring av nye funksjoner er ikke en prioritet. For den virale videoplattformen trenger virksomheten innovasjon, hastighet og rask forbedring, noe som er mye viktigere enn garantert validering av systemet. Hver kontekst er forskjellig, og det er mange forskjellige fremgangsmåter for programvaretesting. Å bygge teststrategien vil bestå av en blanding av passende typer testing fra listen over mulige testtyper, som er kategorisert nedenfor. I denne artikkelen vil vi liste opp forskjellige typer programvaretesting.

Enhetstesting

Enhetstesting testes på en individuell funksjon, klasse eller modul uavhengig enn å teste en fullt fungerende programvare. Ved hjelp av et rammeverk for enhetstesting kan programmereren lage testtilfeller med input og forventet output. Når du har hundrevis, tusenvis eller titusenvis av enhetstesttilfeller for et stort programvareprosjekt, sikrer du at alle individuelle enheter fungerer som forventet når du fortsetter å endre koden. Når du endrer en enhet som har testtilfeller, bør testtilfellene for den modulen studeres og avgjøre om det er behov for nye testtilfeller, utgangen har endret seg, eller de nåværende testtilfellene kan fjernes som ikke lenger relevante. Å lage et stort volum enhetstester er den enkleste måten å oppnå høy testdekning for en programvarekodebase, men vil ikke sikre at det endelige produktet fungerer som et system som forventet.

Funksjonell testing

Funksjonstesting er den vanligste formen for testing. Når folk refererer til programvaretesting uten mye detalj, betyr de ofte funksjonstesting. Funksjonstesting vil kontrollere de primære funksjonene til programvaren som forventet. En testplan kan skrives for å beskrive alle funksjonelle testtilfeller som skal testes, som tilsvarer de viktigste funksjonene og funksjonene til programvaren. Primær funksjonalitetstesting vil være “lykkelig vei ” testing, som ikke prøver å bryte programvaren eller bruke den i utfordrende scenarier. Dette bør være absolutt minimum av testing for ethvert programvareprosjekt.

Integrasjonstesting

Etter enhetstesting og funksjonstesting kan det være flere moduler eller hele systemet som ennå ikke er testet som en helhet. Eller det kan være komponenter som stort sett er uavhengige, men som av og til brukes sammen. Når som helst komponenter eller moduler testes uavhengig, men ikke som et helt system, bør integrasjonstesting utføres for å validere komponentfunksjonene sammen som et fungerende system i henhold til brukerens krav og forventninger.

Stresstesting

Tenk på stresstesting som om du tester en romferge eller et fly. Hva betyr det å sette programvaren eller systemet ditt under "STRESS"? Stress er ikke mer enn en intens belastning av en bestemt type som mest sannsynlig vil ødelegge systemet ditt. Dette kan være lik "Load Testing" i betydningen å sette systemet ditt under høy samtidighet med mange brukere som får tilgang til systemet. Men å understreke at et system også kan skje på andre vektorer. For eksempel kjører firmware på en maskinvarekomponent når maskinvaren har hatt fysisk forverring og fungerer i nedbrutt modus. Stress er unikt for alle typer programvare, og systemer og utforming av stresstester bør vurderes av hvilke naturlige eller unaturlige årsaker som mest sannsynlig vil stresse programvaren eller systemet ditt.

Lastetesting

Lastetesting er en bestemt type stresstesting, som diskutert ovenfor, der et stort antall samtidige brukerforbindelser og tilganger automatiseres for å generere simulering av effekten av et stort antall autentiske brukere som får tilgang til programvaresystemet ditt samtidig. Målet er å finne ut hvor mange brukere som har tilgang til systemet ditt samtidig uten at programvaresystemet ditt går i stykker. Hvis systemet ditt enkelt kan håndtere normal trafikk på 10 000 brukere, hva vil skje hvis nettstedet eller programvaren din blir viral og skaffer 1 million brukere? Vil dette uventet "LASTE" bryte nettstedet eller systemet ditt? Lastetesting vil simulere dette, slik at du er komfortabel med den fremtidige økningen i brukere fordi du vet at systemet ditt takler den økte belastningen.

Ytelsestesting

Folk kan bli helt frustrerte og fortvile når programvaren ikke oppfyller deres ytelseskrav. Ytelse betyr generelt hvor raskt viktige funksjoner kan fullføres. Jo mer komplekse og dynamiske funksjonene er tilgjengelige i et system, jo ​​viktigere og ikke åpenbart blir det å teste ytelsen, la oss ta et grunnleggende eksempel, Windows eller Linux operativsystem. Et operativsystem er et svært komplekst programvareprodukt, og å gjøre ytelsestesting på systemet kan involvere hastighet og timing av funksjoner som Bootup, installere en app, søke etter en fil, kjøre beregninger på en GPU og / eller andre av de millioner av handlingene som kan utføres. Det må utvises forsiktighet når du velger ytelsestesttilfeller for å sikre at viktige og sannsynlige funksjonsfunksjoner som er testet.

Skalerbarhetstesting

Det er bra å teste på den bærbare datamaskinen, men egentlig ikke god nok når du bygger et sosialt nettverk, et e-postsystem eller superdatamaskinvare. Når programvaren din er ment å distribueres på 1000 servere, som alle fungerer i felleskap, vil ikke testingen du gjør lokalt på ett system, avdekke feilene som oppstår når programvaren distribueres "I skala" i hundretusener av tilfeller. I virkeligheten vil testingen din sannsynligvis aldri kunne kjøre i full skala før den slippes på produksjon fordi det ville være altfor dyrt og ikke praktisk å bygge et testsystem med 1000 servere som koster millioner av dollar. Derfor gjøres skalerbarhetstesting på flere servere, men vanligvis ikke hele antall produksjonsservere for å prøve å avdekke noen av feilene som kan bli funnet når systemene dine brukes på større infrastruktur.

Statisk analysetesting

Statisk analyse er testing som gjøres ved å inspisere programvarekoden uten å kjøre den. For å gjøre statisk analyse, generelt, vil du bruke et verktøy, det er mange, ett kjent verktøy er Coverity. Statisk analyse er enkel å kjøre før du slipper programvaren, og kan finne mange kvalitetsproblemer i koden din som kan løses før du slipper. Minnefeil, håndtering av datatypefeil, nullpeker-dereferanser, uinitialiserte variabler og mange flere feil kan bli funnet. Språk som C og C ++ drar stor nytte av statisk analyse fordi språkene gir stor frihet til programmerere i bytte mot stor kraft, men dette kan også skape gode feil og feil som kan bli funnet ved bruk av statisk analysetesting.

Test av feilinjeksjon

Noen feilforhold er veldig vanskelige å simulere eller utløse, derfor kan programvaren utformes for kunstig å injisere et problem eller en feil i systemet uten at feilen naturlig oppstår. Hensikten med feilinjeksjonstesting er å se hvordan programvaren håndterer disse uventede feilene. Reagerer den elegant på situasjonen, krasjer den, eller gir den uventede og uforutsigbare problematiske resultater? La oss for eksempel si at vi har et banksystem, og det er en modul for å overføre midler internt fra KONTO A til KONTO B. Denne overføringsoperasjonen kalles imidlertid bare etter at systemet allerede har bekreftet at disse kontoene eksisterte før de ringte overføringsoperasjonen. Selv om vi antar at begge kontoene eksisterer, har overføringsoperasjonen en feiltilfelle der en mål- eller kildekonto ikke eksisterer, og at den kan føre til en feil. Fordi vi under normale omstendigheter aldri får denne feilen på grunn av forhåndstesting av innganger, så for å bekrefte systematferden når overføringen mislykkes på grunn av en ikke-eksisterende konto, injiserer vi en falsk feil i systemet som returnerer en ikke-eksisterende konto for en overføring og test hvordan resten av systemet reagerer i så fall. Det er veldig viktig at feilinnsprøytningskoden bare er tilgjengelig i testscenarier og ikke blir utgitt til produksjon, der den kan skape kaos.

Testing av minneoverskridelse

Når du bruker språk som C eller C ++, har programmereren et stort ansvar for å adressere minne direkte, og dette kan forårsake fatale feil i programvaren hvis feil blir gjort. For eksempel, hvis en peker er null og refereres til, vil programvaren krasje. Hvis minne er allokert til et objekt og deretter en streng kopieres over minneområdet til objektet, kan det referere til objektet forårsake et krasj eller til og med uspesifisert feil oppførsel. Derfor er det viktig å bruke et verktøy for å prøve å fange minnetilgangsfeil i programvare som bruker språk som C eller C ++, som kan ha disse potensielle problemene. Verktøy som kan gjøre denne typen testing inkluderer Open Source Valgrind eller proprietære verktøy som PurifyPlus. Disse verktøyene kan redde dagen da det ikke er klart hvorfor programvaren krasjer eller oppfører seg dårlig og peker direkte på stedet i koden som har feilen. Fantastisk, ikke sant?

Grensesakstesting

Det er lett å gjøre feil i koding når du er på det som kalles en grense. For eksempel sier en bankautomatisk teller at du kan ta ut maksimalt $ 300. Så forestill deg at koderen skrev følgende kode naturlig når du bygger dette kravet:

Hvis (amt < 300)
startWithdrawl ()

ellers
feil ("Du kan ta ut% s", amt);

Kan du oppdage feilen? Brukeren som prøver å ta ut $ 300 vil motta en feil fordi det ikke er mindre enn $ 300. Dette er en feil. Derfor gjøres grensetesting naturlig. Kravgrenser sørger da for at programvaren fungerer på begge sider av grensen og grensen.

Fuzz-testing

Høyhastighetsgenerering av inngang til programvare kan produsere så mange mulige inngangskombinasjoner, selv om disse inngangskombinasjonene er total tull og aldri vil bli levert av en ekte bruker. Denne typen fuzz-testing kan finne feil og sikkerhetsproblemer som ikke blir funnet på andre måter på grunn av det høye volumet av innganger og scenarier som blir testet raskt uten manuell generering av testtilfeller.

Utforskende testing

Lukk øynene og visualiser hva ordet “Utforsk” betyr. Du observerer og undersøker et system for å finne ut hvordan det virkelig fungerer. Tenk deg at du mottar en ny skrivebordsstol i postordre, og den har 28 deler, alle i separate plastposer uten instruksjoner. Du må utforske din nye ankomst for å finne ut hvordan den fungerer og hvordan den er satt sammen. Med denne ånden kan du bli en utforskende tester. Du vil ikke ha en veldefinert testplan for testsaker. Du vil utforske og undersøke programvaren din på jakt etter ting som får deg til å si det fantastiske ordet: “INTERESSANT!”. Når du lærer deg, undersøker du videre og finner måter å bryte programvaren som designerne aldri har tenkt på, og deretter levere en rapport som beskriver mange dårlige antagelser, feil og risikoer i programvaren. Lær mer om dette i boka som heter Explore It.

Penetrasjonstesting

I en verden av programvaresikkerhet er penetrasjonstesting et av de viktigste måtene å teste på. Alle systemer, enten det er biologisk, fysisk eller programvare, har grenser og grenser. Disse grensene er ment å tillate at bare bestemte meldinger, personer eller komponenter kommer inn i systemet. Mer konkret, la oss vurdere et nettbanksystem som bruker brukerautentisering for å komme inn på nettstedet. Hvis nettstedet kan bli hacket og inngått i backend uten riktig godkjenning, vil det være en penetrasjon, som må beskyttes mot. Målet med penetrasjonstesting er å bruke kjente og eksperimentelle teknikker for å omgå den normale sikkerhetsgrensen til et programvaresystem eller et nettsted. Penetrasjonstesting innebærer ofte å sjekke alle portene som lytter og prøve å gå inn i et system via en åpen port. Andre vanlige teknikker inkluderer SQL-injeksjon eller passordknusing.

Regresjonstesting

Etter at du har fungerende programvare som er distribuert i felt, er det viktig å forhindre at feil introduseres i funksjonalitet som allerede fungerte. Hensikten med programvareutvikling er å øke produktets evne, introdusere feil eller få gammel funksjonalitet til å slutte å fungere, som kalles en REGRESSION. Regresjon er en feil eller mangel som ble introdusert da evnen tidligere fungerte som forventet. Ingenting kan ødelegge omdømmet til programvaren eller merkevaren din raskere enn å introdusere regresjonsfeil i programvaren din og få virkelige brukere til å finne disse feilene etter en utgivelse.

Regresjonstestesaker og testplaner bør bygges rundt kjernefunksjonaliteten som må fortsette å jobbe for å sikre at brukerne har god erfaring med applikasjonen din. Alle kjernefunksjonene i programvaren din som brukerne forventer å jobbe på en bestemt måte, bør ha en regresjonstest som kan utføres for å forhindre at funksjonaliteten brytes på en ny utgivelse. Dette kan være alt fra 50 til 50000 testtilfeller som dekker kjernefunksjonaliteten til programvaren eller applikasjonen din.

Testing av kildekode-snitt

En feil ble introdusert i programvaren, men det er ikke åpenbart hvilken versjon av utgivelsen som introduserte den nye feilen. Tenk deg at det var 50 programvareforpliktelser fra sist kjente gang programvaren arbeidet uten feilen, til nå da ..

Lokaliseringstesting

Tenk deg en værapplikasjon som viser gjeldende og anslått vær på stedet, samt en beskrivelse av værforholdene. Den første delen av lokaliseringstesten er å sikre at riktig språk, alfabet og tegn vises riktig, avhengig av brukerens geografiske plassering. Appen i Storbritannia skal vises på engelsk med latinske tegn; den samme appen i Kina skal vises med kinesiske tegn på kinesisk. Mer forseggjort lokaliseringstesting gjort, det bredere spekteret av mennesker fra forskjellige geolokaliseringer vil grensesnittet med applikasjonen.

Tilgjengelighetstesting

Noen av innbyggerne i samfunnet vårt har funksjonshemninger, og kan derfor ha problemer med å bruke programvaren som blir opprettet, så tilgjengelighetsprøving gjøres for å sikre at befolkninger med funksjonshemninger fremdeles kan få tilgang til systemets funksjonalitet. Hvis vi for eksempel antar at 1% av befolkningen er fargeblinde, og programvaregrensesnittet vårt antar at brukerne kan skille mellom rødt og grønt, men de fargeblinde individene KAN IKKE se forskjellen. Derfor vil et godt programvaregrensesnitt ha flere signaler utover fargen for å indikere mening. Andre scenarier i tillegg til testing av fargeblindhet vil også inngå i testing av programvaretilgjengelighet, for eksempel full visuell blindhet, døvhet og mange andre scenarier. Et godt programvareprodukt skal være tilgjengelig for en maksimal prosentandel av potensielle brukere.

Oppgraderingstesting

Enkle apper på en telefon, operativsystemer som Ubuntu, Windows eller Linux Mint og programvare som kjører atomubåter trenger hyppige oppgraderinger. Prosessen med selve oppgraderingen kunne introdusere bugs og mangler som ikke ville eksistere ved en ny installasjon fordi miljøtilstanden var annerledes og prosessen med å introdusere den nye programvaren på toppen av den gamle kunne ha introdusert bugs. La oss ta et enkelt eksempel, vi har en bærbar datamaskin som kjører Ubuntu 18.04, og vi vil oppgradere til Ubuntu 20.04. Dette er en annen prosess for å installere operativsystemet enn å rengjøre harddisken direkte og installere Ubuntu 20.04. Derfor, etter at programvaren er installert eller noen av dens avledede funksjoner, fungerer den kanskje ikke 100% som forventet eller den samme som da programvaren ble nylig installert. Så vi bør først vurdere å teste selve oppgraderingen under mange forskjellige tilfeller og scenarier for å sikre at oppgraderingen fungerer til fullføring. Og så må vi også vurdere å teste den faktiske systemoppgraderingen for å sikre at programvaren ble lagt ned og fungerte som forventet. Vi vil ikke gjenta alle testtilfeller til et nyinstallert system, noe som vil være bortkastet tid, men vi vil tenke nøye over med vår kunnskap om systemet om hva som KAN brekke under en oppgradering og strategisk legge til testsaker for disse funksjonene.

Black Box & White Box Testing

Svart boks og hvit boks er mindre spesifikke testmetoder og flere typer kategoriseringer. I hovedsak, black box testing, som forutsetter at testeren ikke vet noe om programvarens indre arbeid og bygger en testplan og tester tilfeller som bare ser på systemet fra utsiden for å verifisere dets funksjon. Testing av hvit boks utføres av programvarearkitekter som forstår det interne arbeidet til et programvaresystem og designer sakene med kunnskap om hva som kan, ville, burde og sannsynlig ville bryte. Både svart-hvitt-boks testing vil sannsynligvis finne forskjellige typer feil.

Blogger og artikler om programvaretesting

Testing av programvare er et dynamisk felt, og mange interessante publikasjoner og artikler som oppdaterer samfunnet om moderne tenking om programvaretesting. Vi kan alle ha nytte av denne kunnskapen. Her er et utvalg av interessante artikler fra forskjellige bloggkilder du kanskje vil følge:

Produkter for programvaretesting

De fleste verdifulle testoppgaver kan automatiseres, så det bør ikke være noen overraskelse at bruk av verktøy og produkter for å utføre de utallige oppgavene med kvalitetssikring av programvare er en god ide. Nedenfor vil vi liste opp noen viktige og svært verdifulle programvareverktøy for programvaretesting som du kan utforske og se om de kan hjelpe.

JUnit

For å teste Java-basert programvare, gir JUnit en omfattende testpakke for enhets- og funksjonstesting av koden som er vennlig for Java-miljøet.

Selen

For testing av webapplikasjoner gir Selenium muligheten til å automatisere interaksjoner med nettlesere, inkludert kompatibilitetstesting mellom nettlesere. Dette er en fremste testinfrastruktur for automatisering av nettesting.

Agurk

Et atferdsdrevet testrammeverk lar forretningsbrukere, produktledere og utviklere forklare forventet funksjonalitet på naturlig språk og deretter definere atferden i testtilfeller. Dette gjør mer lesbare testtilfeller og tydelig kartlegging av forventet brukerfunksjonalitet.

Rens

Finn minnelekkasjer og minnekorrupsjoner på kjøretid ved å kjøre programvaren din med innebygd Purify Plus-instrumentering som sporer minnebruk og påpeker feil i koden din som ikke er lette å finne uten instrumentering.

Valgrind

Åpen kildekodeverktøy som kjører programvaren din og lar deg samhandle med den mens du peker på en feilrapport om kodingsfeil som minnelekkasjer og korrupsjon. Du trenger ikke å kompilere på nytt eller legge til instrumentering i kompileringsprosessen, da Valgrind har intelligensen til å dynamisk forstå maskinkoden din og injisere instrumentering sømløst for å finne kodefeil og hjelpe deg med å forbedre koden din.

Dekning

Statisk analyseverktøy som vil finne kodefeil i programvaren din før du til og med kompilerer og kjører koden. Coverity kan finne sikkerhetsproblemer, brudd på kodekonvensjoner, så vel som feil og mangler som kompilatoren din ikke finner. Død kode kan bli funnet, uinitialiserte variabler og tusenvis av andre mangeltyper. Det er viktig å rengjøre koden din med statisk analyse før du slipper den til produksjon.

JMeter

Et open source-rammeverk for ytelsestesting orientert mot Java-baserte utviklere, derav J i navnet. Nettstedstesting er en av de viktigste brukssakene for JMeter i tillegg til ytelsestesting av databaser, e-postsystemer og mange andre serverbaserte applikasjoner.

Metasploit

For sikkerhet og penetrasjonstesting er Metasploit et generelt rammeverk med tusenvis av funksjoner og funksjoner. Bruk interaksjonskonsollen for å få tilgang til forhåndskodede utnyttelser, og prøv å verifisere sikkerheten til applikasjonen din.

Akademisk forskning på programvaretesting

Konklusjon

Programvarens rolle i samfunnet fortsetter å vokse, og samtidig blir verdens programvare mer kompleks. For at verden skal fungere, må vi ha metoder og strategier for å teste og validere programvaren vi lager ved å utføre funksjonene den er ment å utføre. For hvert komplekse programvaresystem bør en teststrategi og testplan være på plass for å fortsette å validere funksjonaliteten til programvaren ettersom de fortsetter å bli bedre og gi funksjonen.

Mus Midterste museknapp fungerer ikke i Windows 10
Midterste museknapp fungerer ikke i Windows 10
De midtre museknapp hjelper deg med å bla gjennom lange websider og skjermer med mye data. Hvis det stopper, vil du ende opp med å bruke tastaturet ti...
Mus Hvordan endre venstre og høyre museknapp på Windows 10 PC
Hvordan endre venstre og høyre museknapp på Windows 10 PC
Det er ganske vanlig at alle datamusenheter er ergonomisk designet for høyrehendte brukere. Men det er tilgjengelige musenheter som er spesielt design...
Mus Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Etterlig museklikk ved å sveve med Clickless Mouse i Windows 10
Bruk av mus eller tastatur i feil stilling for overdreven bruk kan føre til mange helseproblemer, inkludert belastning, karpaltunnelsyndrom og mer. I ...