Regression defects -- defects surrounding or related to changed code -- can happen at any stage in the development process. That makes it critical to include a regression test suite in all test efforts at all test levels.
A regression test suite is a selection of test cases designed to ensure any code changes or added features have not harmed the version of code to which those changes were made.
Regression test suites are an important measure of quality and should be incorporated throughout the development process. They can be used as a part of many test types, including unit, integration, system, functional and nonfunctional. To build effective regression test suites, consider purpose and scope, test case selection, proper maintenance and best practices.
Define the purpose and scope of a regression test suite
Determining what to include in a regression test suite begins with an assessment of its purpose and scope. Once the team defines the purpose of a specific test suite, it can assess the scope.
Testers and developers use regression test suites for many purposes. Small regression suites can unit test especially complex code. Regression suites can be included in smoke or sanity testing. Testers can create specific regression test suites around intricate code or important user stories.
Since these regression suites have specific purposes, they are likely to be limited in scope. These suites have a finite number of test cases and may be used for only a specific period of time. Even so, test case selection requires analysis and thought to create an effective regression test suite.
Some regression suites are used for more general purposes, such as release regression, end-to-end testing or continuous testing as part of the continuous integration pipeline. These general-purpose regression suites are more comprehensive in scope and may contain large numbers of test cases. They also require analysis during the selection process, as they need to be optimized, meaning each test case selected must provide the greatest amount of coverage. This ensures the suite contains the fewest number of test cases that meet the coverage objective.
How to select test cases
One of the most important considerations in building an effective regression test suite is the selection of test cases. Selection involves more than choosing the test cases around the code that has been changed.
Select test cases based on the purpose and scope of the regression test suite. For testing suites with limited scope, choose the most complex scenarios, as well as scenarios that test code with previous defects. In addition, teams can add test cases in different areas of the application where the same code is used.
If the scope of the regression test is broad, such as an end-to-end test, feature coverage should be based on risk. This ensures that the regression test is both effective and efficient.
Always include test cases in areas where defects tend to cluster -- for example, complex business rules, algorithms, multiple integrations or frequent code changes. In addition, always include critical features that are important to the customer or high priority to the business.
Maintain the regression test suite
Regression test suites must be dynamic. As changes are made to the application, review and optimize the regression suite for feature coverage on a regular basis. Track the regression suite against the current list of features to ensure the suite provides the correct test coverage. Remove tests that are obsolete, and add new test cases for feature changes.
Test optimization is an important aspect of regression test suite maintenance. This involves examining each test case to develop a suite that provides the greatest test coverage with the lowest numbers of test cases. Test optimization ensures the efficiency of the regression test suite.
Best practices for regression test suites
There are five best practices to keep in mind as you develop, execute and maintain regression test suites:
- Design the regression test suite based on its intended purpose, and manage the scope accordingly.
- Select test cases based on code complexity, areas of defect clustering and feature priority.
- Ensure test case selections are risk-based and provide the correct coverage.
- Keep the regression test suite dynamic, and optimize it continually.
- Automate test suites that are used frequently.