Regresija softvera je greška u programiranju softvera koja uzrokuje učinkovitu regresiju softvera u jednom ili više područja. Postoje dvije glavne vrste softverske regresije: funkcionalna i nefunkcionalna. Funkcionalno znači da program radi pri odgovarajućoj brzini, ali jedna ili više funkcija ne radi, dok nefunkcionalno znači da sve funkcije rade, ali je brzina dramatično smanjena. Događaj, kao što je nadogradnja, obično je uzrok regresije. Regresijsko testiranje provjerava softver kako bi se osiguralo da regresija nije ili da će se dogoditi.
Funkcionalna softverska regresija je jedan od načina na koji se programska regresija može manifestirati. Kada se to dogodi, program će nastaviti raditi punom brzinom, tako da korisnik možda isprva neće primijetiti regresiju. U ovoj manifestaciji postoje određene funkcije koje više ne rade. Na primjer, ako program može tražiti datoteke, ta funkcija možda više neće raditi. To može utjecati na dodatne funkcije — one koje se obično ne koriste — ili na glavnu funkciju programa.
Nefunkcionalna softverska regresija je opasnija i lakše je primijetiti, iako sve funkcije još uvijek rade. U ovoj manifestaciji, regresija čini da program radi sporije, ili će izlaz programa biti znatno manji. Nedostatak brzine znači da program također može postati ranjiv na zlonamjerno kodiranje i napade, dovodeći i program i računalo na kojem radi u opasnosti od hakiranja. Brzina može postati toliko spora da je možda nemoguće koristiti program.
Da bi došlo do regresije softvera, mora se dogoditi takozvani događaj. Ovaj događaj mijenja kodiranje softvera i uvodi te greške, bilo namjerno – što je rijetko – ili nenamjerno. Programer možda pokušava popraviti bug ili ažurirati verziju, ali pogrešno uvodi neki kod koji regresira program. Najtipičniji događaj je nadogradnja, jer to izravno utječe na kodiranje programa. Ostali događaji uključuju promjene verzije ili konfiguracije.
Kako bi se ublažile šanse za regresiju softvera, obično se koristi regresijsko testiranje. Ova vrsta testiranja gleda na novi program i uspoređuje ga sa svim starim verzijama programa. Zatim izvodi programiranje kroz test kako bi vidio ima li znakova regresije i kako bi se osiguralo da je svo kodiranje funkcionalno. Svi znakovi regresije ili nefunkcioniranja koda bit će vraćeni programeru ili korisniku i izvijestit će što je nazadovalo ili gdje je regresija pronađena.