Regression testing (rarely, ''non-regression testing'') is re-running
functional
Functional may refer to:
* Movements in architecture:
** Functionalism (architecture)
** Form follows function
* Functional group, combination of atoms within molecules
* Medical conditions without currently visible organic basis:
** Functional sy ...
and
non-functional tests
Non-functional testing is the testing of a software application or system for its non-functional requirements: the way a system operates, rather than specific behaviours of that system. This is in contrast to functional testing, which tests again ...
to ensure that previously developed and tested software still performs as expected after a change. If not, that would be called a ''
regression''.
Changes that may require regression testing include
bug fixes, software enhancements,
configuration
Configuration or configurations may refer to:
Computing
* Computer configuration or system configuration
* Configuration file, a software file used to configure the initial settings for a computer program
* Configurator, also known as choice board ...
changes, and even substitution of
electronic component
An electronic component is any basic discrete device or physical entity in an electronic system used to affect electrons or their associated fields. Electronic components are mostly industrial products, available in a singular form and are not ...
s. As regression test suites tend to grow with each found defect, test automation is frequently involved. Sometimes a
change impact analysis
Change impact analysis (IA) or impact analysis is the analysis of changes within a deployed product or application and their potential consequences.
Change impact analysis is defined by Bohnner and Arnold as "identifying the potential consequenc ...
is performed to determine an appropriate subset of tests (''non-regression analysis'').
Background
As software is updated or changed, or reused on a modified target, emergence of new faults and/or re-emergence of old faults is quite common.
Sometimes re-emergence occurs because a fix gets lost through poor
revision control
In software engineering, version control (also known as revision control, source control, or source code management) is a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections o ...
practices (or simple
human error
Human error refers to something having been done that was " not intended by the actor; not desired by a set of rules or an external observer; or that led the task or system outside its acceptable limits".Senders, J.W. and Moray, N.P. (1991) Human ...
in revision control). Often, a fix for a problem will be "
fragile
Fragile or The Fragile may refer to:
Film and television
* ''Fragile'' (film), a 2005 film by Jaume Balagueró
* "Fragile" (''Smallville''), a television episode
Literature
* ''Fragile'' (manga), a 2016 Japanese series by Bin Kusamizu and Sab ...
" in that it fixes the problem in the narrow case where it was first observed but not in more general cases which may arise over the lifetime of the software. Frequently, a fix for a problem in one area inadvertently causes a
software bug
A software bug is an error, flaw or fault in the design, development, or operation of computer software that causes it to produce an incorrect or unexpected result, or to behave in unintended ways. The process of finding and correcting bugs i ...
in another area.
Finally, it may happen that, when some feature is redesigned, some of the same mistakes that were made in the original implementation of the feature are made in the redesign. Therefore, in most software development situations, it is considered
good coding practice, when a bug is located and fixed, to record a test that exposes the bug and re-run that test regularly after subsequent changes to the program.
Although this may be done through
manual testing
:''Compare with Test automation''.
Manual testing is the process of manually testing software for defects. It requires a tester to play the role of an end user where by they use most of the application's features to ensure correct behaviour. To ...
procedures using programming techniques, it is often done using
automated testing
In software testing, test automation is the use of software separate from the software being tested to control the execution of tests and the comparison of actual outcomes with predicted outcomes. Test automation can automate some repetitive bu ...
tools. Such a
test suite
In software development, a test suite, less commonly known as a validation suite, is a collection of test cases that are intended to be used to test a software program to show that it has some specified set of behaviors. A test suite often contai ...
contains software tools that allow the testing environment to execute all the regression
test case
In software engineering, a test case is a specification of the inputs, execution conditions, testing procedure, and expected results that define a single test to be executed to achieve a particular software testing objective, such as to exercise ...
s automatically; some projects even set up automated systems to re-run all regression tests at specified intervals and report any 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), every night, or once a week. Those strategies can be automated by an external tool.
Regression testing is an integral part of the
extreme programming
Extreme programming (XP) is a software development methodology intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development,"Human Centred Technology Workshop 2006 ", 2006, PD ...
software development method. In this method, design documents are replaced by extensive, repeatable, and automated testing of the entire software package throughout each stage of the
software development process
In software engineering, a software development process is a process of dividing software development work into smaller, parallel, or sequential steps or sub-processes to improve design, product management. It is also known as a software devel ...
. Regression testing is done after functional testing has concluded, to verify that the other functionalities are working.
In the corporate world, regression testing has traditionally been performed by a
software quality assurance
Software quality assurance (SQA) is a means and practice of monitoring all software engineering processes, methods, and work products to ensure compliance against defined standards. It may include ensuring conformance to standards or models, suc ...
team after the development team has completed work. However, defects found at this stage are the most costly to fix. This problem is being addressed by the rise of
unit testing
In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures&md ...
. Although developers have always written test cases as part of the development cycle, these test cases have generally been either
functional tests or
unit tests
In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures&mda ...
that verify only intended outcomes. Developer testing compels a developer to focus on unit testing and to include both positive and negative test cases.
Techniques
The various regression testing techniques are:
Retest all
This technique checks all the test cases on the current program to check its integrity. Though it is expensive as it needs to re-run all the cases, it ensures that there are no errors because of the modified code.
Regression test selection
Unlike Retest all, this technique runs a part of the
test suite
In software development, a test suite, less commonly known as a validation suite, is a collection of test cases that are intended to be used to test a software program to show that it has some specified set of behaviors. A test suite often contai ...
(owing to the cost of retest all) if the cost of selecting the part of the test suite is less than the Retest all technique.
Test case prioritization
Prioritize the test cases so as to increase a test suite's rate of fault detection. Test case prioritization techniques schedule test cases so that the test cases that are higher in priority are executed before the test cases that have a lower priority.
Types of test case prioritization
* General prioritization – Prioritize test cases that will be beneficial on subsequent versions
* Version-specific prioritization – Prioritize test cases with respect to a particular version of the software.
Hybrid
This technique is a hybrid of regression test selection and test case prioritization.
Benefits and drawbacks
Regression testing is performed when changes are made to the existing functionality of the software or if there is a bug fix in the software. Regression testing can be achieved through multiple approaches; if a ''test all'' approach is followed, it provides certainty that the changes made to the software have not affected the existing functionalities, which are unaltered.
In
agile software development
In software development, agile (sometimes written Agile) practices include requirements discovery and solutions improvement through the collaborative effort of self-organizing and cross-functional teams with their customer(s)/ end user(s), ad ...
—where the software development life cycles are very short, resources are scarce, and changes to the software are very frequent—regression testing might introduce a lot of unnecessary overhead.
In a software development environment which tends to use
black box
In science, computing, and engineering, a black box is a system which can be viewed in terms of its inputs and outputs (or transfer characteristics), without any knowledge of its internal workings. Its implementation is "opaque" (black). The te ...
components from a third party, performing regression testing can be tricky, as any change in the third-party component may interfere with the rest of the system (and performing regression testing on a third-party component is difficult, because it is an unknown entity).
Uses
Regression testing can be used not only for testing the ''
correctness'' of a program but often also for tracking the quality of its output.
For instance, in the design of a
compiler
In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
, regression testing could track the code size and the time it takes to compile and execute the test suite cases.
Regression tests can be broadly categorized as
functional test
Functional testing is a quality assurance (QA) processPrasad, Dr. K.V.K.K. (2008) ''ISTQB Certification Study Guide'', Wiley, , p. vi and a type of black-box testing that bases its test cases on the specifications of the software component unde ...
s or
unit tests
In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures&mda ...
. Functional tests exercise the complete program with various inputs. Unit tests exercise individual functions,
subroutine
In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed.
Functions may ...
s, or object methods. Both functional testing tools and unit-testing tools tend to be automated and are often third-party products that are not part of the compiler suite. A functional test may be a scripted series of program inputs, possibly even involving an automated mechanism for controlling mouse movements and clicks. A unit test may be a set of separate functions within the code itself or a driver layer that links to the code without altering the code being tested.
See also
*
Quality control
Quality control (QC) is a process by which entities review the quality of all factors involved in production. ISO 9000 defines quality control as "a part of quality management focused on fulfilling quality requirements".
This approach places ...
*
Test-driven development
Test-driven development (TDD) is a software development process relying on software requirements being converted to test cases before software is fully developed, and tracking all software development by repeatedly testing the software against al ...
References
External links
Microsoft regression testing recommendations
{{DEFAULTSORT:Regression Testing
Software testing
Extreme programming