Hva er programvaretesting?

Discover how to deliver better software and systems in rapidly scaling environments. Join our Community

Denne omfattende veiledningen forklarer programvaretesting og dekker viktige konsepter og praktiske verktøy for nybegynnere og eksperter. Oppdag forskjellene mellom manuell testing og automatiseringstesting, funksjonell og ikke-funksjonell testing, og hvordan du navigerer i livssyklusen for programvaretesting.

Kvalitetssikring blir stadig mer populært. Eksperter anslår at antallet stillinger innen testing i USA alene vil øke med 25 % i løpet av det neste tiåret. Hvis dette interesserer deg, lurer du kanskje på hvor du skal begynne å lære om programvaretesting.

I denne artikkelen vil jeg besvare spørsmål som kan hjelpe deg med å komme i gang med programvaretesting. Jeg skal gjennomgå hva programvaretesting er, de viktigste testkonseptene og noen verktøy for programvaretesting du bør vurdere. 

Programvaretesting forklart

Prosessen som består av alle aktiviteter i livssyklusen, både statiske og dynamiske, som gjelder planlegging, forberedelse og evaluering av en komponent eller et system og relaterte arbeidsprodukter, for å fastslå at de oppfyller spesifiserte krav, demonstrere at de er egnet til formålet og avdekke feil.

ISTQBs ordliste

Programvaretesting spiller en viktig rolle i programvareutviklingsprosessen ved at den validerer at programvareapplikasjonen fungerer som tiltenkt og oppfyller kravene og forventningene til sluttbrukerne.

Målet er å identifisere feil, mangler og uoverensstemmelser i programvareapplikasjonen før den lanseres for offentligheten. Testing innebærer å kjøre programvaren under ulike forhold, med forskjellige konfigurasjoner og i ulike scenarier, for å sikre at den fungerer korrekt og effektivt.

Hvis du er nysgjerrig på hvordan du kan begynne innen programvaretesting, finner du her en liste over vanlige QA-intervjuspørsmål (og svar!).

Programvaretestingens livssyklus

Livssyklusen for programvaretesting (STLC) er prosessen som programvaretestere følger for å sikre at applikasjonen som testes, oppfyller de angitte kvalitetsstandardene og kravene. STLC består vanligvis av flere faser som skal sikre at programvareapplikasjonen testes grundig og oppfyller ønsket kvalitetsnivå før den lanseres for sluttbrukerne. Følgende er fasene i programvaretestingens livssyklus:

Kravsanalyse

I denne fasen analyserer programvaretesterne kravene og spesifikasjonene. De identifiserer funksjonelle og ikke-funksjonelle krav, setter seg inn i formålet med programvareapplikasjonen og målgruppen, og utvikler testtilfeller og scenarier basert på dette.

Testplanlegging

I denne fasen identifiserer testteamet omfanget av testingen, testtilnærmingen og ressursene som kreves for testingen. Testplanen identifiserer også risikoene og begrensningene knyttet til testprosessen og beskriver tidsplanen for testingen.

Testdesign

I denne fasen utformer testteamet testtilfellene og scenariene basert på kravene og spesifikasjonene. De identifiserer også testdataene som kreves for testingen, og utvikler testskript som automatiserer testprosessen.

Testgjennomføring

Testerne gjennomfører testtilfellene og scenariene som ble utformet i den forrige fasen. Testresultatene dokumenteres, og eventuelle feil eller mangler som oppdages i programvareapplikasjonen, rapporteres.

Get Free Access
Get regular tech leadership wisdom for delivering better software and systems.
Get Free Access

Have an account? Log In

Testrapportering

I denne fasen utarbeider testteamet en rapport med testresultatene og feilene som ble identifisert under testingen. Rapporten kan inneholde anbefalinger om hvordan feilene kan rettes og den overordnede kvaliteten på programvareapplikasjonen kan forbedres.

Avslutning av testingen

Dette er den siste fasen, der testteamet evaluerer testprosessen og identifiserer områder som kan forbedres. De utarbeider også en rapport om avslutningen av testingen, som oppsummerer testprosessen og testresultatene.

Livssyklusen for programvaretesting er en kontinuerlig prosess som krever samarbeid mellom testteamet og utviklingsteamet for å sikre at programvareapplikasjonen oppfyller ønsket nivå for kvalitet og funksjonalitet.

Typer programvaretesting 

Det finnes ulike typer programvaretesting som brukes av QA-teamene, avhengig av prosjektets kontekst og krav.

Vi kan skille mellom manuell testing og automatisert testing, avhengig av hvordan testene utføres. Basert på hva som testes, kan vi skille mellom funksjonell og ikke-funksjonell testing. Avhengig av metodene som brukes, har vi statisk og dynamisk testing. Basert på tilnærmingen kan vi identifisere typene hvitboks- og svartbokstesting. Vi har også utforskende testing, røyk- og sunnhetstesting samt regresjonstesting. Alle disse testingstypene kan overlappe hverandre, avhengig av hvordan de brukes. 

Manuell testing

Ved manuell testing utføres testingen av en person, uten bruk av automatiserte verktøy eller skript. Den kan være mer utsatt for feil og tar vanligvis lengre tid. 

Automatisert testing

Automatisert testing utføres av en maskin som kjører skript skrevet på forhånd. Det krever mer teknisk ekspertise, for eksempel kunnskap om et programmeringsspråk og automatiseringsverktøy som Selenium. Det kan være dyrere enn manuell testing, og enkelte deler av testprosessen kan ikke automatiseres.

Funksjonell testing

Funksjonell testing innebærer å verifisere hva applikasjonen gjør. Funksjonell testing kontrollerer programvareapplikasjonens funksjoner og egenskaper og sikrer at de oppfyller kravene og spesifikasjonene.

Ikke-funksjonell testing

I motsetning til funksjonell testing fokuserer ikke-funksjonelle tester på hvordan appen oppfører seg. Det finnes flere undertyper av ikke-funksjonell testing, avhengig av hva hovedmålet med testene er. Jeg vil bare dekke noen få av dem i denne artikkelen. 

Ytelsestesting: Måler programvareapplikasjonens responstid, gjennomstrømning og skalerbarhet under ulike belastningsforhold. Den kontrollerer programvareapplikasjonens evne til å håndtere flere brukere og transaksjoner samtidig, og sikrer at den fungerer effektivt under toppbelastning.

Belastningstesting: Simulerer belastning fra brukere i den virkelige verden og utføres for å fastslå et systems atferd under normale forhold og toppbelastning. Den brukes til å identifisere om infrastrukturen som brukes til å være vert for applikasjonen, er tilstrekkelig, og forteller oss hvor mange samtidige brukere applikasjonen kan håndtere, samt hvilken skala applikasjonen krever når det gjelder maskinvare, nettverkskapasitet osv., slik at flere brukere får tilgang til applikasjonen.

Stresstesting: Innebærer testing utover normal kapasitet, ofte til et bristepunkt, for å observere resultatene. Målet er å sikre at programvaren ikke krasjer under forhold med utilstrekkelige databehandlingsressurser (for eksempel minne, diskplass, nettverksforespørsler osv.).

Sikkerhetstesting: Sikrer at programvareapplikasjonen er sikker og beskyttet mot uautorisert tilgang. Sikkerhetstesting kontrollerer om det finnes sårbarheter og svakheter i programvareapplikasjonens sikkerhetsprotokoller, og identifiserer potensielle sikkerhetstrusler.

Brukervennlighetstesting: Brukes til å vurdere om applikasjonen er brukervennlig. Den kontrollerer hvor enkelt det er for brukere å navigere i programvareapplikasjonen og utføre de tiltenkte funksjonene effektivt.

Tilgjengelighetstesting: Tilgjengelighetstesting regnes som en underkategori av brukervennlighetstesting og utføres for å sikre at applikasjonen som testes, kan brukes av personer med funksjonsnedsettelser.

Lokaliseringstesting: En type programvaretesting der programvarens atferd testes for en bestemt region, lokalitet eller kultur. Noen egenskaper som bør vurderes under lokaliseringstesting, er at teksten er korrekt oversatt, valuta, måleenheter, tillatte spesialtegn og formater for telefonnumre

Kompatibilitetstesting: Tester om applikasjonen er tilstrekkelig egnet til å kjøre i ulike nettlesere, databaser, maskinvaremiljøer, operativsystemer, mobilenheter og nettverk

Statisk og dynamisk testing

Statisk testing baserer seg på manuell gjennomgang av arbeidsprodukter (dvs. gjennomganger) eller verktøystyrt evaluering av koden (for eksempel kodegjennomganger) eller andre arbeidsprodukter (dvs. statisk analyse). Den kan utføres på, men er ikke begrenset til, spesifikasjoner, forretningskrav, akseptansekriterier, kildekode, testplaner, testtilfeller, testskript og brukerveiledninger. 

Dynamisk testing er selve kjøringen av programvaren som testes. Den kan være manuell eller automatisert, eller

Hvitbokstesting og svartbokstesting 

Hvitboks-testing er en type testing der testeren har kunnskap om den interne strukturen i applikasjonens kode, mens svartboks-testing utføres uten at det er nødvendig å forstå kildekoden. Hver av disse testtypene benytter ulike testteknikker, som ekvivalensklasseinndeling, grenseverdianalyse og beslutningstabeller for svartboks-testing, samt setningsdekning og beslutningsdekning for hvitboks-testing.

Eksplorativ testing

Eksplorativ testing er en type erfaringsbasert testing. Den innebærer minimal planlegging og maksimal testgjennomføring. 

Aktivitetene for testdesign og testgjennomføring utføres parallelt, vanligvis uten at testbetingelsene, testtilfellene eller testskriptene dokumenteres formelt.

Dette er en nyttig tilnærming når spesifikasjonene mangler eller er mangelfulle og tiden er svært begrenset, eller den fungerer godt som et supplement til automatisert testing.

Røyktesting 

Røyktesting, noen ganger kalt «byggverifiseringstesting» eller «konfidensitetstesting»,  er en programvaretestprosess der testerne verifiserer om det distribuerte bygget er stabilt. Røyktesting er en validering av at vi kan fortsette med videre programvaretesting. Den består av et minimalt antall tester som kjøres på hvert bygg for å teste kritisk programvarefunksjonalitet. 

Sunnhetstesting

Sunnhetstesting er en type programvaretesting som utføres etter levering av et programvarebygg med mindre kode- eller funksjonsendringer, for å bekrefte at feilene er løst og at ingen nye problemer har blitt introdusert som følge av disse endringene. Målet er å bekrefte at den foreslåtte funksjonen fungerer omtrent som forventet.

Regresjonstesting

Regresjonstesting er en type programvaretesting der vi tester eksisterende funksjonalitet på nytt for å bekrefte at den fortsatt fungerer korrekt etter endringer eller oppdateringer av programvareapplikasjonen. Regresjonstesting sikrer at de nye endringene eller oppdateringene ikke har påvirket programvareapplikasjonens eksisterende funksjonalitet.

Kompatibilitetstesting

Kompatibilitetstesting brukes for å sikre at programvareapplikasjonen fungerer korrekt på tvers av ulike plattformer, enheter og nettlesere. Den kontrollerer at programvareapplikasjonen er kompatibel med ulike maskinvare- og programvarekonfigurasjoner

AI-generert bilde av arbeidende roboter på et samlebånd som demonstrerer hvordan programvaretesting fungerer.

Testnivåer

Programvaretesting kan kategoriseres i ulike nivåer basert på testens omfang og mål. Følgende er de vanligste nivåene for programvaretesting:

Enhetstesting

Enhetstesting er det første testnivået og fokuserer på testing av individuelle komponenter eller kodeenheter isolert. Enhetstesting verifiserer at hver kodeenhet fungerer som forventet og oppfyller de spesifiserte kravene.

Integrasjonstesting

Integrasjonstesting fokuserer på å teste samspillet mellom ulike moduler eller komponenter i programvareapplikasjonen. Integrasjonstesting verifiserer at modulene eller komponentene fungerer sammen som tiltenkt og oppfyller de spesifiserte kravene.

More Articles

Systemtesting

Systemtesting er testnivået der hele programvareapplikasjonen testes som et komplett system. Systemtesting verifiserer at programvareapplikasjonen oppfyller de spesifiserte kravene og fungerer som forventet i ulike scenarioer.

Brukerakseptansetesting

Akseptansetesting er testnivået der programvareapplikasjonen testes fra sluttbrukerens perspektiv. Akseptansetesting verifiserer at programvareapplikasjonen oppfyller sluttbrukerens behov og krav og fungerer som forventet i brukermiljøet. Vanlige typer brukerakseptansetesting er alfatesting og betatesting.

Hvert testnivå er viktig og har et spesifikt formål i programvaretestprosessen. Testing bør utføres på hvert nivå for å sikre at programvareapplikasjonen oppfyller ønsket nivå av kvalitet og funksjonalitet og fungerer som forventet i ulike scenarioer. 

Prinsipper for programvaretesting

Det finnes sju hovedprinsipper for testing, slik de er definert av ISTQB:

  1. Testing viser at det finnes feil, ikke at de ikke finnes: Du kan ikke garantere at applikasjonen er feilfri bare fordi den er testet. Etter testingen kan imidlertid tilliten til produktet øke.
  2. Uttømmende testing er umulig: De fleste apper er utrolig komplekse, så det er umulig å teste alle mulige kombinasjoner og variasjoner, særlig fordi tiden og ressursene til testing også er begrensede.
  3. Tidlig testing: Jo tidligere feil og mangler oppdages i løpet av programvareutviklingslivssyklusen, desto enklere er de å rette. Det er her smidig utvikling gjør det riktig, siden testaktivitetene starter svært tidlig.
  4. Feil samler seg i klynger: Dette betyr at områder der det er funnet feil, mest sannsynlig vil ha enda flere feil. Ifølge Pareto-prinsippet kan 80 % av feilene finnes i 20 % av funksjonaliteten.
  5. Sprøytemiddelparadokset: Hvis de samme testene kjøres gjentatte ganger uten å oppdateres, vil de sannsynligvis ikke avdekke nye problemer. 
  6. Testing er kontekstavhengig: Applikasjoner testes forskjellig avhengig av konteksten – for eksempel tester du et API annerledes enn et brukergrensesnitt, og du tester nettapplikasjoner annerledes enn mobil- eller skrivebordsapper.  
  7. Feilslutningen om fravær av feil: Kort sagt betyr ikke det at feilene er funnet og rettet, at programvaren er nyttig for brukerne.

Konklusjon

Programvaretesting er et svært komplekst fagområde, og mange typer testing kan gjennomføres. Det er viktig å tilpasse teststrategien basert på konteksten til programvareproduktet som testes. Det finnes utallige ressurser om programvaretesting, blant annet podkaster, bøker og mer.

Hvis du likte denne artikkelen, kan du abonnere på QA Leads nyhetsbrev og være den første som får vite om nye innlegg som dekker testing og kvalitet.

Andreea Draniceanu
Hi there! My name is Andreea, I’m a software test engineer based in Romania. I’ve been in the software industry for over 10 years. Currently my main focus is UI test automation with C#, but I love exploring all QA-related areas 😊

You may also like