Regression testing is one of the types of software testing which helps us to uncover the new errors in the existing functionality once the changes have been made to the software like functional enhancements, patches or configuration changes.
Intension of regression testing is to assure that the bugfix will not introduce new bugs. The main reason for regression testing is that it’s extremely difficult for a programmer to find out how a change can impact in one part of the software will be echoed in the other parts of software.
Some common methods of practicing regression testing include rerunning previously run tests and check whether the program behavior has changed and whether previously fixed faults has been re-emerged in the program. This regression testing can be used to test a system more efficiently by selecting the appropriate set of tests needed to adequately cover a particular change.
Some experience has shown that software is fixed; emerging of new or reemerging of old faults is quite common. At times reemergence occurs because a fix gets lost through poor revision control practice or it can be simple human error in revision control. A fix for a problem will be fragile in which it can be fixed the problem in the narrow case where it will be first observed but not in the general cases which might arise over the lifetime of the software. Frequently a fix for a problem in an area inadvertently may cause a software bug in another area. So finally it’s often the case when some features are redesigned, some of the same mistakes which were made in the original implementation of the feature will be made in the redesign.
So, in software development it is considered as good coding practice that when a bug will be located and fixed, a test which exposes the bug will be recorded and it will be retested regularly after subsequent changes in the program. This may be done by manual testing procedures using programming techniques, which is often done using automated testing tools, such as test suite contains software tools which allow the testing environment to execute the regression test cases automatically. Some projects set up automated systems to re-run automatically all regression tests at specified intervals and report the failures which could imply a regression or an out of date test. Common strategies are to run such a system after every successful compile for small projects, once a weak or night these strategies can be automated by an external tool such as BuildBot, Tinderbox, Hudson and Jenkins.
In software development method regression testing is an integral part of the extreme programming. In this method of design documents are replaced by extensive, repeatable and automated testing of the entire software package throughout each stage of the development cycle.
Regression testing is performed by a software quality assurance team after the development team has completed work. However it might be defects found at this stage are the most costly to fix. So this problem is being addressed by the rise of unit testing. Since developers have always written test cases as part of the development life cycle, so these test cases have generally been either functional test or unit test that verifies only the intended outcomes. Testing compels a developer to focus on unit testing and to include both the positive and negative test cases.
Uses of Regression testing
Regression testing is used to test the correctness of a program and often used for tracking the quality of its output. For instance, in the design of a compiler a regression testing can track the code size, simulation time and time of the test suite cases. Regression testing can be automated and should be a part of the test plan. Regression tests can be categorized as functional test or unit test. Unit test exercises individual functions, subroutines or the other object methods and functional test exercises the complete program with the various inputs. Both the functional testing tools and unit testing tools tend to be third party products that are not part of the complier suite and both can be automated. Functional tests can be a scripted series of program inputs, possibly even an automated mechanism for controlling mouse movements. Unit tests may be separate functions within the code itself or driver layer that links to the code without altering the code to be tested.