Regresjonstesting

Regresjonstesting er når man på nytt kjører funksjonelle og ikke-funksjonelle tester for å sikre at programvare som tidligere har blitt utviklet og testet fortsatt fungerer som forventet etter en endring. De brukes for å detektere om feilrettinger eller endringer har introdusert nye feil eller uønskede effekter. Dersom regresjonstesten feiler kan oppdateringene ha ført til feil med tidligere fungerende kode, og man har fått en regresjon (tilbakesteg) som kan kreve videre avlusing.

Endringer som kan kreve regresjonstesting inkluderer vanlig fiks av programvarelus, forbedringer av programvare, konfigurasjonsendringer eller til og med bytte av maskinvare. Testautomasjon brukes ofte med regresjonstesting ettersom testsuiter for regresjonstester har en tendens til å vokse med hver funnede defekt. Det åpenbare unntaket er regresjonstester på grafisk brukergrensesnitt, som vanligvis må utføres manuelt. Noen ganger utføres en konsekvensanalyse for å bestemme en passende delmengde av tester (ikke-regresjonsanalyse).

Når kode redesignes kan noen av de samme feilene som ble gjort i den opprinnelige implementasjonen også bli gjort i den redesignede versjonen. Derfor ansees det som god praksis når man har oppdaget og fikset en feil at man lager en test som vil avsløre slike feil og rekjøre slike tester med jevne mellomrom etter påfølgende endringer i programmet.

Automatiserte regresjonstester 
Selv om regresjonstesting kan gjøres med manuelle testprosedyrer gjøres det ofte ved hjelp av automatiserte testverktøy. Testpakker kan brukes for å sette opp automatisk kjøring av regresjons-testtilfeller. Vanlige strategier er å kjøre tester etter hver vellykket kompilering (for små prosjekter), hver kveld eller en gang i uken. Hvis en regresjonstest feiler kan det også være at den er utdatert. Regresjonstesting utføres etter at funksjonell testing er avsluttet for å verifisere at de andre funksjonene fungerer.

I prosjekter 
Regresjonstesting er en viktig del av ekstrem programmering (XP), en metode hvor designdokumenter erstattes av omfattende, repeterbare og automatiserte tester gjennom hele utviklingsprosessen. I smidig programvareutvikling, som har korte utviklingssykluser med lite ressurser og hyppige programvareendringer, kan regresjonstesting føre til mye unødvendig overhead.

Regresjonstesting har tradisjonelt vært gjort etter at utviklingen er ferdig, men feil som finnes på dette stadiet kan være dyre å reparere. Dette problemet kan avhjelpes med enhetstesting. Selv om utviklere alltid har skrevet testtilfeller som en del av utviklingssyklusen har disse generelt vært enten funksjonelle tester eller enhetstester som bare bekrefter de planlagte resultatene. Utviklingstesting tvinger en utvikler til å fokusere på enhetstesting og å inkludere både positive og negative testtilfeller.

Se også 
 Enhetstesting
 Testdrevet utvikling
 Versjonskontrollsystem

Referanser 

Programvareutvikling