"Regression defines the act of returning to a former or a previously existed state."
Regression Testing: A variant of software testing that seeks to detect and unravel new software bugs or issues in existing functional and non-functional areas of a system in the event of upgrade, patches, configuration changes and any minor or major change(s) introduced in the system during bug-fixation. Basically, regression tests are being executed after each modification or change brought into software application to ensure that these new changes have no side-effects or impact on the existing older & core functionalities.
The scope of regression testing depends upon the amount of change introduced in the code. If the change is small, a set of minimal test cases would be sufficient to perform regression tests whereas for the large amount of change, selective test cases based on the developer's input in respect to modification done may prove to be time and money saving solution.
Many a times, while upgrading an operating system, a software regression can wreck havoc with its intended functioning. A software regression is a software bug which makes a feature stop functioning according to its targeted utility due to minor or major configuration changes such as a system patch.
This is often caused by encompassed bug fixes included in the system patch itself. A properly designed test plan can prevent this possibility before releasing any software. This is where Regression testing as a viable solution comes into picture and the beauty of it is that it can be done manually or in an automated manner.
Below, given figure or example clearly defines the necessity and working of the regression testing.
We have a software application with functionality:A+B. On testing the application, a bug gets identified and detected. Patches & bug-fixation process including changes in the code is being carried out to remove or resolve the identified bug. However, in the process of bug-removal, the existing functionality of the application also gets affected:B-A. Thus, regression testing is carried out to evaluate whether existing functionalities has been impaired or not along with the occurrence of any new bug or issue in the event of changes and bug-fixation.
Further, we can also see that during upgrade or addition of new feature; C, the existing functionalities of the application; A+B has been impacted with the change in the functionality; A*B. Here, also regression tests are executed over software application to find out whether existing functionalities has been affected or not.
Regression tests are frequently executed throughout the software testing life cycle at each different level; unit, integration, system and acceptance. However, it is recommended to perform regression testing on the occurrence of following events:
A basic approach to carry out regression testing comprises of following actions:
“It is pertinent to mention here that no new test cases are designed for the purpose of regression testing instead already existing & executed test cases are brought into use to perform the task of regression testing.”
No, regression testing and re-testing are not similar testing methodologies. They are quite different to each other. In fact, regression testing is much more than the re-testing. Regression testing ensures no side effects to the application in the event of bug fixation or any major and minor changes whereas re-testing is performed to ensure that all the previously identified and detected have been fixed or resolved. Read our article regression testing vs. retesting to find out the exact differences between these two.
These tests exercise the complete program with various inputs. The test may be a scripted series of program inputs, possibly even involving an automated mechanism for controlling mouse movements and clicks.
They exercise individual functions, subroutines, or object methods. The test may be a set of separate functions within the code itself or a driver layer that links to the code without altering the code being tested.
Apart from the functional and unit tests, regression tests may be sub-categorized into two more types as detailed below:
Re-testing all the test cases, may not seems to be feasible. An alternative approach, may be the selection of limited number of test cases, based on the needs and requirements. Further, this selection, may further be considered under two categories
Priority wise execution of the test cases based on the business requirements, essential and often used functionalities significantly reduces the regression test suite. Read more about the prioritization of test case in our article test prioritization.
The plan of attack employs a Triangular approach pinpointing the areas of focus, priority and strategy for test execution. The chief inputs come from the client and the lead developer. The client highlights the features most visible and critical to the benefit of the end user. The lead developer informs about the areas of application most impacted by the code changes.
As the process of regression is all about repeatedly testing the original functionality of the software product after each modification/enhancement in the code, automation of regression tests is preferable to ease the task of testing. Below given, are some of the well known testing tools, with the help of which regression testing may be performed in an effortless manner.
“Regression testing is just not a testing technique but an inherited and integrated part of the testing life cycle which not only validates the veracity of the existing functionalities after each change but also improves the quality of the software application.”
You may also like to visit and read our some more regression testing related articles here; smoke testing vs regression testing , development testing vs regression testing and functional testing vs regression testing.