What comes to mind immediately when we hear the word – ‘Regression’? Return of something to its former or less developed state again and again. Does that strike any chord? Any change requires regression so as to see we are getting what is expected or to see if the change initiated has been implemented or not.
Now, if we talk about Regression in terms of Software Testing, it is one of the strongest and most important pillars of the entire existence of this whole process of determining the quality of a software or a product. But what makes it so?
Regression Testing involves running and re-running of tests on a product or software to ensure that all the functionalities are working as expected, after a change has been implemented, including – adding new features, bug fixes, new build, addition of new software components, after each release, code change, new programs added, integration or basically anything that could deviate a product / software from not working – Business As Usual.
Regression Testing facts
Regression Testing makes up for more than 30% of a Software Tester’s work life. It is a supremely important aspect of Quality Assurance as a discipline. Depending upon the standards set in an organization, a tester has to cover anything between 70%-90% of the test cases every time a round of regression is performed. The purpose being the verification of application performing as usual, after any sort of changes that have been implemented, to validate the stability of the application due to any code change or any other modification.
What is Regression Testing
To get a clear and concise idea of what and how we try to achieve a high quality software, including Regression Testing can be understood as :-
- The Development Team works on a user story implementing a new feature in the application.
- New code is integrated into the existing code base.
- New build is raised and published.
- The changes are now part of the new release and have been incorporated.
- Testing team runs the Regression Test cases including functional as well as non-functional.
- Identify any deviations from the expected behavior.
- Log defects for the failed scenarios.
- The Development Team fixes the bugs.
- New build is raised and published with the code fixes.
- Changes are the part of the new release.
- Testing team tests again and all the regression test cases are performed again ensuring inclusion of all the features and functionality.
This process is repeated till the time final build is not deployed and the application is sent for UAT.
Why is Regression Testing important?
When we are developing a function or a feature, sometimes what happens is that the solution to one thing could cause a failure in another which could be due to a number of reasons including human error, design issues, misunderstanding of requirement, incorrect code patching, bad coding practices, incompatibility of interfacing of components or a number of other things that could go wrong.
And as a result of this, errors, defects and faults can occur. Sometimes it could be something minor, but at times it could be something very major resulting in application breakage in several places making it unfit for use or vulnerable even. Now, as a part of the Quality Assurance community, our primary goal is to deliver a high quality software or product.
By repeatedly looping this process of testing till the time the application is practically not bug free and we are confident of our product’s performance, we make sure that every feature and function is thoroughly tested and good to use. It acts as a line of defense with respect to the impact of any change made to the application, whether external or internal. Performing Regression continuously after each deployment makes not only the developers and testers confident of their creation, but it also plays a crucial role in foreseeing any bugs and issues which could arise at later stages in Production, which could lead to incurred losses, mismanaged budgeting of money as well as resources.
Regression Testing techniques
Regression testing as a discipline is branched into several components or techniques that ensure the attainment of robustness and perfection that we are striving for. Some of the techniques that are followed to achieve Regression Testing status are as follows:-
- Sanity Testing – Sanity Testing is a technique which is implemented to validate only the functional aspect of an application. It does not involve the testing of complete application, but rather focuses on a very small part that has undergone change. It is primarily done manually.
- Retest All – This is an expensive as well as time taking process which involves running the entire regression test suite and retesting everything about the application, thus maximizing the test coverage.
- Selective Regression – Instead of running the entire test suite, this focuses on testing specific areas of application which are decided on the basis of – modules that have been modified, high priority areas of application. This is a more practical approach.
- Test Case prioritization – This involves prioritizing the execution of test cases which target high risk areas of an application.
- Smoke Testing – It is also called build verification testing. It is done after deployment of each build. It is like the first step, which is done to ensure that the basic functions of an application like – Login etc. are working fine and are not impacted. After this has been established, then only we move on to actual testing.
SANITY TESTING vs REGRESSION TESTING
There is a slight confusion sometimes between Sanity Testing and Regression Testing as both of them are used to basically verify the smooth running of the application. The difference could be explained as follows:-
|Sanity Testing||Regression Testing|
Automating Regression Testing
Regression Testing is one testing type which can very well be automated, as it is a recurring process and it only makes sense to automate it as we usually have a well-defined and established test suite which can be automated and the results are also known so they can be easily verified against the outcome when they are tested via automation.
Moreover, it saves a lot of time and effort on testers’ part as they can spend their time on other areas of application rather than executing the same test scripts again and again manually after each deployment which could hinder the learning and growth process for a tester as well.
Now that we have established that Automation plays a huge role in Regression Testing type, let’s see the tools that we can use to automate the process:-
- Selenium – One of the most popular and well-known tool used for automating testing. It is one of the most fiercely used tools in the Quality assurance market today. The best part of it is – it is an open source tool, hence free.
- IBM Rational Functional Tester – A popular but commercial tool. Has the ability to support a number of applications as well as features thus justifying its cost.
- Micro Focused Unified Functional Testing (UFT) – Previously known as Quick Test Professional and Quality Center. It involves a recording feature. The selling feature is that it runs on the majority of browsers and environments.
- SAHI PRO – Majorly used for large scale web applications. It is flexible, integrates well with other interfaces thus making it a dream to work on when there are tight budgets and timelines.
- WATIR – This again is an open-source tool primarily used for web applications regression testing. It is easy to use and offers cross-browser support. Used by tech giants like – Oracle, Facebook and more.
- TESTCOMPLETE – Majorly used for cross platform testing to run parallel tests and automate regression for mobile, web as well as desktop applications.
- SILKTEST – Used for creating test cases, supports a variety of applications.
- TIMESHIFTX – Customizable testing tool which can be used for a variety of applications catering to different platforms, databases and operating systems.
- TESTDRIVE – Can be used to test GUIgoogadocsadocs. Not a very popular choice though.
- RANOREX STUDIO – A popular Regression Testing tool which integrates very well with other tools and is majorly used for mobile testing as it can create video reporting of test execution as well.
When to do Regression Testing?
As we have already established that Regression testing is a recurring process which is time as well as effort consuming and a tester can get so caught up in it so as to not be able to determine when and where to stop. To fix this, we have a few measures that can be taken to understand the metrics of it better, to prioritize the test cases and to ensure that there is enough test coverage. This could be done by implementing and updating the Requirements Traceability Matrix (RTM). It helps to keep an updated regression test coverage at all times which is also visible to all the stakeholders.
In addition to this, a Code Coverage report can also be generated by the automation tools that are used to perform Regression Testing.
Other than this, a tester’s instinct and experience also comes in handy while deciding prioritization of functionalities and test cases.
Regression Testing if not the most important, can be considered as a very crucial branch of testing. It not only keeps the stakeholders on top of things, but also ensures the smooth working of application. It acts as a preventive measure for risk mitigation and ensures there is no breakage of the system after any changes have been made or any enhancements have been introduced. It ensures a superior quality product and a perfectly unified software.