There is always a level of uncertainty when releasing code changes to production. A question that crosses the mind of many after a deploy is usually, is everything working as it should? Or did something break. Fortunately, there is a way to confirm this prior to deployment and it is by performing regression testing.
Regression testing is a form of software testing that checks whether new or existing code changes have had any impact on the application. Whenever code changes take place, it is necessary to validate that the application continues to work. Performing regression testing helps with this task and ensures the application behaves as expected.
There are two ways to check for regressions, either it can be done manually or it can be automated.
As we know, manual anything can be time-consuming and difficult to scale. Testing each release for the new features and bug fixes in all the previous versions is no simple task. It can be done, but it wouldn’t be easy. Manual regression testing can be useful as it can help uncover issues not originally thought of or covered in test scripts. If possible, automate whenever possible and try to get manual tests to a manageable amount.
Automated regression testing can help accelerate testing. It can verify application behavior at scale in which new software is being released. With automated regression testing, test scripts are created and written to test specific scenarios. These tests can be used over and over again each time the test suite is executed. However, because these tests are specifically designed to test only what it is told to test, it will only do that, leaving a gray area for edge cases.
Now when can you start and what do you do?
Regression testing can start immediately, during unit testing. Developers should be writing tests that account for proper workflow based on requirements
Continue the good practice of writing tests that account for proper workflow based on requirements in System, Integration, and Functional testing.
Tests may become more complex as various systems are integrated together (currency transaction, database entry, etc.)
Once these tests are hardened, they can be used for the duration of the project and can be kicked off with every new build.
And that’s it. Once you accomplish the three steps described above, you’ll be able to build excellent regressions test that will:
Indicate when bugs and defects have been introduced
Verify that requirements have been met and the software works as designed.
Validate the software works as intended (if tests are based on good requirements that have been thoroughly vetted)
There are different types of regression testing that can be performed. And the reason for doing so is to retest the application again to confirm that the issue was fixed.
Using two examples of regression testing:
A bug regression involves testing specifically for the bug(s) to validate that it has been fixed.
A functional regression involves testing across the application to ensure that it is working correctly.
There are other forms of regression testing. One, in particular, has risen in popularity lately and that is visual regression testing, commonly known as visual testing. Visual testing is how users ensure their application appears to the end-user as originally intended. It involves verifying that the user interface (UI) of an application is free of visual bugs.
Automated visual testing automatically runs tests on the current UI to see if any regression has taken place. This process involves comparing two images together, the new snapshot of a screen against a previously saved snapshot -- this is set as the baseline for comparison -- to see if there were any changes detected. Any changes would be highlighted for review.
Although this is done automatically, there needs to be manual involvement from a person to make the call whether the change was intentional or not.
Introducing changes to the code base, whether that is modifying existing code or adding new lines of code can either work flawlessly, which we all hope for, or can cause issues, which we dread. Fortunately, this is covered with regression testing and has been proven to help reduce the number of bugs released. Regression testing is critical to software development in that it ensures no new bugs have been introduced while adhering to the stated requirements.