black box 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, 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 tests or unit tests. Functional tests exercise the complete program with various inputs. Unit tests exercise individual functions, subroutines, 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 Test-driven development References External links Microsoft regression testing recommendations Software testing Extreme programming