When making changes to a system, application, or component, you may find that the error or new feature you addressed is functioning – but now several other issues exist. This is a common issue in software development.
There are many ways to test software, but one test focuses on post-modification testing to ensure the fix doesn’t cause harm or errors elsewhere. This is called regression testing.
Types of Software Testing
To understand where regression testing fits into your software testing, let’s briefly look at how software testing works. In general, software testing is divided into two types:
- Whitebox testing takes into account the internal mechanisms of the software. This testing is often used for verification.
- Blackbox testing, on the other hand, ignores the system’s mechanism, instead focusing on the generated output. This can sometimes be known as functional testing. Unlike whitebox testing, blackbox testing is used for validation.
Regression testing falls into the category of blackbox testing.
Defining Regression Testing
Regression testing, as the name implies, tests for any regressions in software. A software regression includes any bug that stops a feature from functioning after a certain event occurs, such as a code modification or enhancement, patching, or upgrade.
The purpose of regression testing is two-fold:
– To ensure that new changes to code don’t introduce new bugs or errors.
– To determine whether a change in one software module will affect other modules.
Note that regression testing is not ensuring that the fix actually does what is intended. Instead, non-regression testing verifies whether introducing or updating code actually accomplishes the intended functions.
Because regression testing can uncover new bugs, regression testing occurs after the code has been modified, but before it is deployed to users. Exactly when the testing occurs depends on the type of regression testing necessary.
Regression testing may sometimes seem superfluous, especially with only slight changes or additions to the code. Indeed, some developers even believe that as long as essential functions are tested and deliver as designed, that is sufficient. But, regression testing advocates point out how fruitful small testing now can be down the road – ensuring current functionality and that there are no larger, unforeseen ramifications as future iterations are introduced.
Types of Regression Testing
At its core, regression testing is performed by repeatedly executing units of code. But, there are different techniques on executing this testing.
Regression testing can be done in phases, often based on what the new code may affect. Here are the most common types of regression testing:
- In a unit regression, the new or modified code is tested as a single unit prior to integration. This narrow approach temporarily blocks complex interactions and dependencies that extend beyond the code under this review.
- In a partial regression, the single unit of code that was tested in the unit regression is now integrated with old, pre-existing code. This determines whether the code modifications will allow the software module to function correctly.
- In a complete regression, the code is integrated with pre-existing code and is tested to provide a comprehensive view of the system. This is often necessary when new or modified code will have an affect deep into the code roots, or if there are many, not just a single, change in the code.
Common methods in regression testing, no matter the type, can include:
– Re-running previously completed tests
– Checking whether behavior in other modules have changed
– Determining whether previously fixed faults (from prior iterations) have returned
How to Perform Regression Testing
Once your new or modified code is written, follow these steps to begin your regression testing:
- Perform the smoke and sanity test. This confirms that the system is stable prior to beginning the regression testing. The goal is not to find bugs or errors.
- Analyze the code requirements. Users report bugs that are often, upon inspection, the result of last-minute alterations to code. To easily avoid this, analyze the new build in accordance with the customers’ requirements before adding it to the existing code.
- Review test cases. This determines which regression to perform: a unit, partial, or complete.
- Schedule and perform. Schedule the test for least downtime and test the code aggressively.
Once your tests are complete and results are satisfactory, you can fully integrate the code and deploy it to users. And, consider that if the build hasn’t been altered for some time, a final complete regression is good practice before deploying to end users.
These postings are my own and do not necessarily represent BMC's position, strategies, or opinion.