Ohjelmiston regressio on ohjelmointivirhe, joka saa ohjelmiston taantumaan tehokkaasti yhdellä tai useammalla alueella. Ohjelmiston regressiota on kahta päätyyppiä: toiminnallinen ja ei-toiminnallinen. Toiminnallinen tarkoittaa, että ohjelma toimii oikeilla nopeuksilla, mutta yksi tai useampi toiminto ei toimi, kun taas ei-toiminnallinen tarkoittaa, että kaikki toiminnot toimivat, mutta nopeus laskee dramaattisesti. Tapahtuma, kuten päivitys, on yleensä syy regressioon. Regressiotestaus tarkistaa ohjelmiston varmistaakseen, ettei regressiota ole tai ei tapahdu.
Ohjelmistojen toiminnallinen regressio on yksi tapa, jolla ohjelman regressio voi ilmetä. Kun näin tapahtuu, ohjelma jatkaa täydellä nopeudella, joten käyttäjä ei ehkä huomaa regressiota aluksi. Tässä ilmentymässä on tiettyjä toimintoja, jotka eivät enää toimi. Jos esimerkiksi ohjelma voi etsiä tiedostoja, tämä toiminto ei ehkä enää toimi. Tämä voi vaikuttaa lisätoimintoihin – niihin, joita ei yleisesti käytetä – tai ohjelman päätoimintoon.
Ei-toiminnallinen ohjelmiston regressio on vaarallisempaa ja helpompi havaita, vaikka kaikki toiminnot toimivat edelleen. Tässä ilmentymässä regressio hidastaa ohjelman toimintaa tai ohjelman tulos on huomattavasti pienempi. Nopeuden puute tarkoittaa, että ohjelma voi myös muuttua haavoittuvaksi haitallisille koodauksille ja hyökkäyksille, jolloin sekä ohjelma että tietokone, jolla se on käynnissä, ovat hakkerointiriskissä. Nopeus voi olla niin hidas, että ohjelman käyttö voi olla mahdotonta.
Ohjelmiston regressio voi tapahtua niin kutsutun tapahtuman. Tämä tapahtuma muuttaa ohjelmiston koodausta ja esittelee nämä virheet joko tahallisesti – mikä on harvinaista – tai tahattomasti. Kehittäjä saattaa yrittää korjata vikaa tai päivittää versiota, mutta esittelee väärin koodin, joka rajoittaa ohjelmaa. Tyypillisin tapahtuma on päivitys, koska tämä vaikuttaa suoraan ohjelman koodaukseen. Muita tapahtumia ovat versio- tai kokoonpanomuutokset.
Ohjelmiston regressiomahdollisuuksien lievittämiseksi käytetään yleensä regressiotestausta. Tämäntyyppinen testaus tarkastelee uutta ohjelmaa ja vertaa sitä kaikkiin ohjelman vanhoihin versioihin. Sitten se suorittaa ohjelmoinnin testin avulla nähdäkseen, onko regressiossa merkkejä, ja varmistaakseen, että kaikki koodaus on toiminnallinen. Kaikki merkit regressiosta tai toimimattomasta koodista palautetaan kehittäjälle tai käyttäjälle ja raportoivat, mikä on taantunut tai missä regressio havaitaan.