Thursday, April 14, 2011

What is software regression?

Things are not as good as they used to be.

Before one can do an informed regression testing, it is important to understand software regression, which can happen after an event that changes the system. Software regression is deterioration in the software. Such decay can be functional, meaning one or more functions working earlier no longer do so. Or, it can be non-functional, for example, the software becomes slower/ outputs less or becomes (more) vulnerable to security threats.

Software Regression

The events that change the system include the change of the executable code of the software (e.g. when a new software release is deployed), change of the underlying components (third-party components or operating system components e.g. when an update/ upgrade/ patch is applied), change of the configuration of the software (e.g. with hardware/ network changes) or change in user data.

Some examples of regressing changes to the software include:
a. Bug fixes incorrectly done - The developer attempts to fix a bug without truly understanding it. The result may now be that the software works in a particular scenario but fails in other scenarios not tested by the developer.
b. Bug fixes incompletely done - The developer fixes a bug with a temporary solution. Or the developer fixes a bug in only one part of the code, missing to fix it in all the impacted parts of the code.
c. Incorrect version control - The latest changes to the code were not made on the latest version of the code, overwriting some prior changes.

Examples of regression caused by component changes include:
a. The new component version functions differently, requiring the software to be updated to work with the new version.
b. The new version supports a different data format, requiring the software to be updated to handle the new format.

Changing the system configuration and user data is in the hands of the users. Examples of regression caused by such changes are:
a. New configuration was never tested by the developer and is not supported. It results in intermittent errors, system slowdown up to irreversible user data loss.
b. The software was never tested with the current user data volume, resulting in very slow performance.

As you can see, software regression can be caused by a variety of reasons. Regression testing should discover such regression (functional or non-functional) after examining the particular changes to the system.

Learn more with my video tutorial, Regression Testing.