Software regression is a bug in software programming that causes the software to effectively regress in one or more areas. There are two main types of software regression: functional and non-functional. Functional means the program works at proper speeds but one or more functions are not working, while non-functional means all functions are working, but the speed is dramatically decreased. An event, such as an upgrade, is usually the cause of regression. Regression testing checks software to ensure no regression has or will occur.
Functional software regression is one way program regression can manifest itself. When this occurs, the program will continue running at full speed, so the user may not notice the regression at first. In this manifestation, there are certain functions that do not work anymore. For example, if a program can search for files, that function may no longer work. This can affect accessory functions — those not commonly used — or the main function of the program.
Non-functional software regression is more dangerous and easier to notice, even though all functions are still working. In this manifestation, the regression makes the program run slower, or the output of the program will be significantly less. The lack of speed means the program may also become vulnerable to malicious coding and attacks, putting both the program and the computer on which it is running at risk for hacking. The speed can become so slow that it may be impossible to use the program.
For software regression to occur, a so-called event must take place. This event changes the coding of the software and introduces these bugs, either intentionally — which is rare — or unintentionally. The developer may be trying to fix a bug or update the version but incorrectly introduces some code that regresses the program. The most typical event is an upgrade, because this directly affects the program’s coding. Other events include version or configuration changes.
To alleviate the chances of software regression, regression testing is usually employed. This type of testing looks at the new program and compares it to all old versions of the program. It then runs the programming through a test to see if there is any sign of regression and to ensure that all coding is functional. Any signs of regressed or non-functioning code will be brought back to the developer or user and will report what has regressed or where the regression is found.