Regresja oprogramowania to błąd w programowaniu oprogramowania, który powoduje, że oprogramowanie skutecznie cofa się w jednym lub kilku obszarach. Istnieją dwa główne typy regresji oprogramowania: funkcjonalna i niefunkcjonalna. Funkcjonalny oznacza, że program działa z odpowiednią prędkością, ale jedna lub więcej funkcji nie działa, natomiast niefunkcjonalny oznacza, że wszystkie funkcje działają, ale prędkość jest drastycznie zmniejszona. Zdarzenie, takie jak aktualizacja, jest zwykle przyczyną regresji. Testy regresji sprawdzają oprogramowanie, aby upewnić się, że regresja nie wystąpiła lub nie wystąpi.
Funkcjonalna regresja oprogramowania jest jednym ze sposobów, w jaki może się objawiać regresja programu. Gdy to nastąpi, program będzie działał z pełną prędkością, więc użytkownik może początkowo nie zauważyć regresji. W tej manifestacji są pewne funkcje, które już nie działają. Na przykład, jeśli program może wyszukiwać pliki, ta funkcja może już nie działać. Może to mieć wpływ na funkcje dodatkowe — te, które nie są powszechnie używane — lub na główną funkcję programu.
Regresja niefunkcjonalnego oprogramowania jest bardziej niebezpieczna i łatwiejsza do zauważenia, mimo że wszystkie funkcje nadal działają. W tej manifestacji regresja spowalnia działanie programu lub wynik programu będzie znacznie mniejszy. Brak szybkości oznacza, że program może również stać się podatny na złośliwe kodowanie i ataki, narażając zarówno program, jak i komputer, na którym działa, na ryzyko włamania. Szybkość może stać się tak mała, że korzystanie z programu może być niemożliwe.
Aby nastąpiła regresja oprogramowania, musi nastąpić tak zwane zdarzenie. To zdarzenie zmienia kodowanie oprogramowania i wprowadza te błędy, celowo — co zdarza się rzadko — lub nieumyślnie. Deweloper może próbować naprawić błąd lub zaktualizować wersję, ale niepoprawnie wprowadza kod, który powoduje regresję programu. Najbardziej typowym wydarzeniem jest aktualizacja, ponieważ ma to bezpośredni wpływ na kodowanie programu. Inne zdarzenia obejmują zmiany wersji lub konfiguracji.
Aby zmniejszyć szanse na regresję oprogramowania, zwykle stosuje się testowanie regresji. Ten typ testowania polega na sprawdzaniu nowego programu i porównywaniu go ze wszystkimi starymi wersjami programu. Następnie przeprowadza programowanie przez test, aby sprawdzić, czy istnieją jakiekolwiek oznaki regresji i upewnić się, że całe kodowanie jest funkcjonalne. Wszelkie oznaki regresji lub niedziałającego kodu zostaną zwrócone programiście lub użytkownikowi i zgłoszą, co nastąpiło regresję lub gdzie regresja została znaleziona.