Programinės įrangos regresija yra programinės įrangos programavimo klaida, dėl kurios programinė įranga veiksmingai regresuoja vienoje ar keliose srityse. Yra du pagrindiniai programinės įrangos regresijos tipai: funkcinis ir nefunkcinis. Funkcinis reiškia, kad programa veikia tinkamu greičiu, bet neveikia viena ar kelios funkcijos, o nefunkcinė reiškia, kad visos funkcijos veikia, tačiau greitis smarkiai sumažėja. Įvykis, pavyzdžiui, atnaujinimas, dažniausiai yra regresijos priežastis. Regresijos testavimas patikrina programinę įrangą, kad įsitikintų, jog regresijos nevyksta ir nebus.
Funkcinė programinės įrangos regresija yra vienas iš būdų, kaip gali pasireikšti programos regresija. Kai taip atsitiks, programa toliau veiks visu greičiu, todėl vartotojas iš pradžių gali nepastebėti regresijos. Šioje apraiškoje yra tam tikrų funkcijų, kurios nebeveikia. Pavyzdžiui, jei programa gali ieškoti failų, ši funkcija gali nebeveikti. Tai gali turėti įtakos papildomoms funkcijoms – toms, kurios paprastai nenaudojamos – arba pagrindinei programos funkcijai.
Neveikiančios programinės įrangos regresija yra pavojingesnė ir lengviau pastebima, nors visos funkcijos vis dar veikia. Šioje apraiškoje dėl regresijos programa veikia lėčiau, arba programos išvestis bus žymiai mažesnė. Dėl greičio stokos programa taip pat gali tapti pažeidžiama kenkėjiško kodavimo ir atakų, todėl programai ir kompiuteriui, kuriame ji veikia, kyla įsilaužimo pavojus. Greitis gali tapti toks mažas, kad gali būti neįmanoma naudotis programa.
Kad įvyktų programinės įrangos regresija, turi įvykti vadinamasis įvykis. Šis įvykis pakeičia programinės įrangos kodavimą ir įveda šias klaidas tyčia (kas yra reta) arba netyčia. Kūrėjas gali bandyti ištaisyti klaidą arba atnaujinti versiją, bet neteisingai įveda kodą, kuris regresuoja programą. Tipiškiausias įvykis yra atnaujinimas, nes tai tiesiogiai veikia programos kodavimą. Kiti įvykiai apima versijos arba konfigūracijos pakeitimus.
Norint sumažinti programinės įrangos regresijos tikimybę, paprastai naudojamas regresinis testavimas. Šio tipo testavimas žiūri į naują programą ir lygina ją su visomis senomis programos versijomis. Tada jis paleidžia programavimą per testą, kad pamatytų, ar yra kokių nors regresijos požymių, ir įsitikintų, kad visas kodavimas veikia. Bet kokie regresuoto ar neveikiančio kodo požymiai bus grąžinti kūrėjui arba vartotojui ir praneš, kas regresavo arba kur rastas regresas.