Regresija programske opreme je napaka pri programiranju programske opreme, ki povzroči, da programska oprema učinkovito nazaduje na enem ali več področjih. Obstajata dve glavni vrsti regresije programske opreme: funkcionalna in nefunkcionalna. Funkcionalno pomeni, da program deluje pri ustreznih hitrostih, vendar ena ali več funkcij ne deluje, medtem ko nefunkcionalno pomeni, da vse funkcije delujejo, vendar je hitrost dramatično zmanjšana. Dogodek, kot je nadgradnja, je običajno vzrok za regresijo. Regresijsko testiranje preveri programsko opremo, da se zagotovi, da se regresija ni ali se ne bo zgodila.
Funkcionalna regresija programske opreme je eden od načinov, kako se lahko manifestira programska regresija. Ko se to zgodi, bo program nadaljeval s polno hitrostjo, tako da uporabnik sprva morda ne bo opazil regresije. V tej manifestaciji obstajajo določene funkcije, ki ne delujejo več. Na primer, če lahko program išče datoteke, ta funkcija morda ne bo več delovala. To lahko vpliva na dodatne funkcije – tiste, ki se običajno ne uporabljajo – ali na glavno funkcijo programa.
Nefunkcionalna regresija programske opreme je bolj nevarna in jo je lažje opaziti, čeprav vse funkcije še vedno delujejo. V tej manifestaciji regresija povzroči, da se program izvaja počasneje ali pa bo rezultat programa bistveno manjši. Pomanjkanje hitrosti pomeni, da lahko program postane tudi ranljiv za zlonamerno kodiranje in napade, zaradi česar sta tako program kot računalnik, v katerem deluje, v nevarnosti za vdiranje. Hitrost lahko postane tako počasna, da program morda ne bo mogoče uporabljati.
Da pride do regresije programske opreme, se mora zgoditi tako imenovani dogodek. Ta dogodek spremeni kodiranje programske opreme in uvede te napake, bodisi namerno — kar je redko — bodisi nenamerno. Razvijalec morda poskuša popraviti napako ali posodobiti različico, vendar napačno uvede nekaj kode, ki regresira program. Najbolj tipičen dogodek je nadgradnja, saj to neposredno vpliva na kodiranje programa. Drugi dogodki vključujejo spremembe različice ali konfiguracije.
Za zmanjšanje možnosti regresije programske opreme se običajno uporablja regresijsko testiranje. Ta vrsta testiranja pogleda nov program in ga primerja z vsemi starimi različicami programa. Nato zažene programiranje skozi test, da ugotovi, ali obstajajo znaki regresije, in zagotovi, da je vse kodiranje funkcionalno. Morebitni znaki regresije ali nedelujoče kode bodo vrnjeni razvijalcu ali uporabniku in sporočili, kaj se je nazadovalo ali kje je bila ugotovljena regresija.