Top 3 Regression Testing types & how to execute them

Listen on the go!

The National Security Agency recently alerted Microsoft about a major flaw discovered in the Windows operating system. The bug could expose the users to significant breaches, surveillance, or disruption, reported Washington Post. Post the alert, Microsoft has released a security patch for the flaw. The bug was essentially a mistake in the computer code that would have affected the Windows 10 OS, which is widely used by governments and businesses. There could have been serious implications if the wrong forces sensed the bug earlier and exploited the vulnerabiliy to cause serious damage. 

The thing about finding bugs ages after the code has gone live is that it needs to be backdated and fixed, such that it falls back into its place seamlessly. Regression testing needs to be done to ensure that there are as little of these after-release shocks as possible. 

What is Regression Testing? 

Regression testing is a blackbox testing technique performed by executing units of code repeatedly to ensure that the on-going code modifications do not impact the systems functionality. Alterations to the application can occur in various forms, be it new functionality, bug fixes, integrations, functionality enhancements, interfaces, patches, among others. Many software development engineers would insist that as long as essential functions are tested and are able to deliver results as per the requirement, it would suffice. While this may be practical, regression testing can prove to be a real blessing at a later stage, because rather than just guaranteeing the functionality being tested for, it ensures that there are no other nasty surprises. 

Even seemingly irrelevant modifications can result in complete breaking down of existing functionality. This is why regression testing is crucial; to ascertain that the modified code has not impacted ANY part of the system. It is advisable for regression tests to be executed as often as possible throughout the software development life cycle. 

Types of Regression Testing 

Often, regression testing is done through several phases of testing. It is for this reason, that there are several types of regression testing, such as: 

  • Unit regression – Unit regression testing, executed during the unit testing phase, tests the code as a single unit. It has a narrow and focused approach, where complex interactions and dependencies outside the unit of code in question are temporarily blocked. 
  • Partial regression – Partial regression is performed after impact analysis. In this testing process, the new addition of the code as a unit is made to interact with other parts of older existing code. Doing so determines that even with code modification, the system functions in silos as desired. 
  • Complete regression – Complete regression testing is often carried out when the code changes for modification or the software updates seep way back into the roots. It is also carried out in case there are multiple changes to the existing code. It gives a comprehensive view of the system as a whole and weeds out any unforeseen problems. A sort of a “final” regression testing is implemented to certify that the build (new lines of code) has not been altered for a period of time. This final version is then deployed to the end users. 

How do we go about Regression Testing? 

A comprehensive regression testing is not so much about the number of test cases, as it is about covering the critical conditions. These conditions assure that the functionality remains, that the bug-fixing has been successfully done, and a particular functional area is capable of handling unexpected behavior. Purely undertaking regression testing by the number of cases is not very easy, nor is it practical. For example, while one case may cover many conditions, it could also cover only one such condition. Hence, there is no proper estimate to the amount of detail that needs to be taken into consideration while executing the regression test cases. 

A sequence of steps is given below in order to understand how exactly we can go about regression testing: 

Smoke/Sanity test  Primarily done to check that the system is stable, this check is done to confirm that the system works as desired under ‘normal’ conditions. Rather than finding bugs, the purpose here is to ensure that the system is stable even before the rest of the testing process is initiated. 

Requirements analysis  Requirements of the modifications or additions of code must be thoroughly analyzed. Often users report bugs that, when analyzed, are found to be a result of last-minute alterations. Mandatory requirements of the customers must therefore be carefully assessed, and test cases for regression are prepared such that the core features of the product remain firmly intact. 

Test cases for critical functions  Of the various test cases designed for regression testing, the most critical, for customers and development teams alike, are the sanity test cases that check the basic functionality of the system. Ordinary setuprelated test cases are then checked on priority. The test cases that are designed for regression testing as the software life cycle progresses are then executed, as per bandwidth and need. Integration test cases, in particular, are highly important and there needs to be a series of regression test cases especially while performing integration testing. A sudden fix at the last moment, for example, can break the integration between multiple modules, even in an already tested application. 

Selection of test cases  After the prioritization of the test cases, they can be selected for execution. The selection of these test cases is done primarily based on the area of frequent defectsthe features, and their criticality. Tests are run aggressively for those units of code that have undergone multiple changes repeatedly. 

Regression tests are the ideal cases of automation that result in better ROI 

  1. Select the Tests for Regression 
  2. Choose the apt tool and automate the regression tests 
  3. Verify applications with checkpoints 
  4. Manage regression tests/update when required 
  5. Schedule the tests 
  6. Integrate with the builds 
  7. Analyze the results 

Conclusion 

Cigniti Technologies ensures that its solutions for regression testing enable the desired outcome post code enhancements. The demand of end-users to modify or upgrade functionality is only dynamically increasing. Software development teams undergo several iterations of coding when modifications are being made to the existing features. Cigniti’s QA engineers understand and perform impact analysis of the changes made to the test environment. 

Cigniti uses a systematic and welldefined approach to perform effective regression testing. Our approach includes: 

  • Detailed traceability matrix: Outlines of the requirements vs. test cases 
  • Dependency analysis: Performed between test cases and requirements 
  • Change reports: Issues between the current release and previous release 
  • Releasespecific regression test pack 
  • Risk-based analysis: Pareto analysis, FMEA, output from code coverage report, etc. 
  • Continuous pruning: Regression test packs are continuously pruned by removing the test cases that are no longer needed & add additional ones. 

To know more, get in touch with our QA experts.

Author

  • Cigniti Technologies

    Cigniti is the world’s leading AI & IP-led Digital Assurance and Digital Engineering services company with offices in India, the USA, Canada, the UK, the UAE, Australia, South Africa, the Czech Republic, and Singapore. We help companies accelerate their digital transformation journey across various stages of digital adoption and help them achieve market leadership.

Comment (1)

  • Meenakshi Agarwal

    Very comprehensive information about regression testing. This one clearly stands out of so many interpretations of it available on many online resources. Even I’d written about it lately, yet I’m impressed with the way it explained here. Thanks.

    May 1, 2017 at 11:22 PM

Leave a Reply

Your email address will not be published.