Software regression

This may happen after changes are applied to the software's source code, including the addition of new features and bug fixes.

Techniques have been proposed that try to prevent regressions from being introduced into software at various stages of development, as outlined below.

[7] However, due to the volume of these existing tests, it is often necessary to select a representative subset, using techniques such as test-case prioritization.

[16] Version control systems such as Git and Mercurial provide built-in ways to perform bisection on a given pair of commits.

[17][18] Other options include directly associating the result of a regression test with code changes;[19] setting divergence breakpoints;[20] or using incremental data-flow analysis, which identifies test cases - including failing ones - that are relevant to a set of code changes,[21] among others.

[26] Additional approaches include writing performance-aware unit tests to help with localization,[27] and ranking subsystems based on performance counter deviations.