Programvaretesting: metoder, fallgruver og tips

Software-Testing: Methoden, Fallstricke und Tipps

Programvaretesting har blitt et uunnværlig prosesstrinn i produksjon og programmering av programvareprodukter for å sikre kvaliteten, påliteligheten og sikkerheten til programvareproduktene.
Som en viktig del av livssyklusen for programvareutvikling spiller programvaretesting en avgjørende rolle når det gjelder å identifisere og fikse feil før programvaren leveres til sluttbrukeren.
I denne artikkelen ser vi nærmere på temaet programvaretesting og deler med oss av den erfaringen vi har opparbeidet oss gjennom mer enn 15 år med programvaretesting i egen regi og innen IT-outsourcing.

Hva er programvaretesting?

Programvaretesting er evaluering av en programvare for å sikre at den oppfyller kravene som er spesifisert (av kunden), og at den er fri for feil.
Denne prosessen innebærer vanligvis at programvaren kjøres i et kontrollert miljø for å identifisere og rette opp feil eller mangler og avdekke mangler i brukervennligheten.

Hva er de ulike typene programvaretesting?

Innen programvaretesting finnes det en rekke ulike tilnærminger som varierer ut fra ulike kriterier, for eksempel graden av automatisering, testens fokus eller tidspunktet i utviklingssyklusen.
To av de mest grunnleggende kategoriene er manuell testing og automatisert testing, som begge spiller en viktig rolle i testprosessen.
Det finnes imidlertid andre, mer spesifikke typer tester som kan brukes avhengig av prosjektkravene.

  • Manuelle tester

Manuell testing er den mest tradisjonelle formen for programvaretesting, der testtilfellene utføres av en menneskelig tester uten bruk av automatiserte verktøy.
Denne metoden egner seg spesielt godt for utforskende tester, brukervennlighetstester eller andre scenarier der det kreves menneskelig dømmekraft og fleksibilitet.
Fordelen med manuell testing er at testeren intuitivt kan gjenkjenne uventet oppførsel eller uventede egenskaper ved programvaren som kan bli oversett ved automatisert testing.
Manuelle tester er som skapt for IT-outsourcing, og utførelsen i henhold til forhåndsdefinerte regler, som likevel stiller ekstra krav sammenlignet med automatisering, er derfor et av våre klassiske aktivitetsområder.

  • Automatiserte tester

Automatiserte tester bruker spesielle programvareverktøy til å utføre og kontrollere testtilfeller uavhengig av hverandre.
Denne typen testing er spesielt effektiv når man skal utføre gjentatte testtilfeller eller kontrollere store datamengder.
Automatiserte tester gir høy effektivitet og konsistens, ettersom de kan utføres raskere enn manuelle tester og er mindre utsatt for menneskelige feil.
Vanlige bruksområder er regresjonstester, belastningstester og ytelsestester.
Automatiserte tester krever også en viss mengde arbeidskraft når det gjelder implementering og evaluering av den siste milen, noe vi også dekker med våre outsourcingstjenester.

Eksperttips: Verktøyet Selenium med åpen kildekode er spesielt populært for automatisert testing av nettbasert programvare.
Se vår andre bloggartikkel.

  • Andre testtyper

I tillegg til de grunnleggende testformene som er nevnt ovenfor, finnes det en rekke andre spesifikke begreper for visse typer testing, som vi her bare nevner som en oversikt:

  • Funksjonstesting: Kontroll av programvarens funksjonalitet opp mot funksjonskravene for å sikre at programvaren gjør det den skal gjøre.
    En undertype er«smoketesting», ofte også kalt «build verification testing»: Dette innebærer at man utfører en rudimentær test av funksjonaliteten til en applikasjon for å sikre at de viktigste funksjonene fungerer feilfritt. Målet er å raskt identifisere de stabile delene av programvaren før de utsettes for en grundigere og mer detaljert test av funksjonaliteten som helhet (såkalt «systemtest«).
  • Ikke-funksjonelle tester: Evaluerer programvarens ytelse, brukervennlighet, pålitelighet og sikkerhet.
  • Integrasjonstester: Fokuserer på å finne feil i grensesnittene og samspillet mellom flere programvaremoduler eller systemer.
  • Akseptansetesting: Utføres for å bekrefte at programvaren er klar for levering og fullt ut oppfyller sluttbrukerens behov.

Hvordan utfører du programvaretesting på riktig måte?

I praksis er det avgjørende at programvaretesting utføres systematisk, profesjonelt og fullstendig for å kunne levere feilfri og funksjonell programvare.
Prosessrelaterte eller strukturelle feil er spesielt farlige her, og kan hindre hele prosjekter i å lykkes.

  1. Planlegging og forberedelser

Vellykket programvaretesting starter med solid testplanlegging.
Dette omfatter definisjon av testmål, valg av testmetoder og allokering av ressurser.
Fremfor alt er det viktig å sette klare og målbare mål for å kunne evaluere hvor vellykket testprosessen har vært.

  1. Utvikling av testtilfeller

Neste trinn er å utvikle testtilfeller som dekker alle aspekter av applikasjonen.
Dette inkluderer funksjonelle, ikke-funksjonelle, ytelses- og sikkerhetsaspekter.
Gode testtilfeller er spesifikke, målbare, realiserbare, relevante og tidsavgrensede.

  1. Testgjennomføring og dokumentasjon

De på forhånd klart definerte testtilfellene skal utføres i henhold til en strukturert testplan.
Alle feil og avvik må dokumenteres i henhold til definerte standarder og kategorier for å gjøre det enklere å spore og rette dem opp.

  1. Analyse og rapportering av resultater

Testresultatene analyseres deretter på grunnlag av dokumentasjonen for å forstå årsakene til feil og utlede tiltak for å forbedre programvarekvaliteten.
Det er også fornuftig å lage rapporter som inneholder testresultatene og anbefalinger til prosjektgruppen.

Vårt tips: Resultatene av testingen kan ofte gi lærdom ikke bare for det spesifikke prosjektet, men også for fremtidige prosjekter med det samme teamet eller den samme kunden!
Det kan derfor være nyttig å dele testrapporter eller et kort sammendrag av dem med hele teamet.

Typiske feilkilder i programvaretesting

I det følgende vil vi peke på noen feilkilder som vi har erfart at forekommer ofte:

  • Ufullstendig testdekning: Ikke alle deler av applikasjonen blir testet, noe som kan føre til uoppdagede feil.
    Dette skyldes hovedsakelig at trinn
    1. og
    2 (se ovenfor) ikke er utført nøye.
  • Mangel på realistiske testdata: Tester som utføres med urealistiske data, kan ikke forutsi programvarens oppførsel i den virkelige verden på en nøyaktig måte.
    Som en del av planleggingen og forberedelsene (trinn 1) bør man sørge for å unngå dette problemet og bruke pålitelige datakilder.
  • Overdreven bruk av manuelle tester: Det er tidkrevende og feilutsatt å utføre utelukkende manuelle tester.
    Derfor er vi også avhengige av en balansert blanding av manuelle og automatiserte tester for å øke effektiviteten og påliteligheten.
  • Forsømmelse av ikke-funksjonelle krav: Sikkerhet, ytelse og, fremfor alt, brukervennlighet er like viktig i testingen som funksjonelle krav, og bør testes deretter.

Og til slutt..: Hvilke konstellasjoner har spesielt høy risiko for feil i programvaretesting?

  • Smidige utviklingsmiljøer: I smidige miljøer, der det kreves fleksibilitet og raske iterasjoner, er det viktig å implementere raske tilbakemeldinger gjennom såkalt kontinuerlig integrasjon og kontinuerlig testing.
    Her er en kort forklaring:

    • Kontinuerlig integrasjon (CI): Kontinuerlig integrasjon (CI) er en praksis for programvareutvikling der teammedlemmer ofte integrerer arbeidet sitt – ofte flere ganger om dagen – i et felles repository (sentralt lagringssted).
      Hver integrasjon blir deretter automatisk verifisert ved å bygge programvaren og kjøre automatiserte tester.
      Dette gjør det mulig for teamene å oppdage og løse problemer på et tidlig tidspunkt, noe som resulterer i høyere programvarekvalitet.
      CI har som mål å fremskynde og forenkle integrasjonsprosessen ved å redusere tiden og innsatsen som kreves for å integrere endringer.
    • Kontinuerlig testing (CT): Kontinuerlig testing (CT) er prosessen med å utføre automatiserte tester som en del av programvareleveransen for å få tilbakemelding om forretningsrisiko så raskt som mulig gjennom en programvareutgivelse.
      CT foregår i alle faser av utviklingssyklusen, fra den første kodingen til levering og videre.
      Målet er å identifisere og korrigere programvarefeil så tidlig og så ofte som mulig.
      Kontinuerlig testing bidrar til å kontinuerlig kontrollere kvaliteten på programvaren og sikre at den oppfyller brukerkravene før den settes i produksjon.
  • Store prosjekter med flere team: I store prosjekter er en samordnet teststrategi avgjørende for å unngå overlapping og hull i testdekningen.
    Bruk av felles teststandarder og -verktøy kan bidra til bedre konsistens og effektivitet.
    Det er også fornuftig å etablere en felles koordinering av testingen.
  • Prosjekter med høye sikkerhetskrav: I prosjekter der sikkerhet har høy prioritet, for eksempel i finans- eller helsesektoren eller for programvare for såkalt kritisk infrastruktur, er det avgjørende med spesialiserte sikkerhetstester og regelmessige penetrasjonstester, også etter at programvaren er implementert.

Konklusjon

Programvaretesting er en kompleks, men uunnværlig prosess som gir et avgjørende bidrag til kvalitetssikringen av programvareprodukter.
Ved å følge de beste fremgangsmåtene som er nevnt ovenfor og tilpasse testprosessen til de spesifikke kravene og konstellasjonene i et prosjekt, kan leverandører av IT-outsourcing sikre at programvareproduktene deres oppfyller de høyeste kvalitetsstandardene.