Effective regression tests generate sufficient code execution coverage to
exercise all meaningful code branches. Therefore, software testing is a
combinatorial problem. Every boolean decision statement requires at least two
tests: one with an outcome of "true" and one with an outcome of "false". As a
result, for every line of code written, programmers often need 3 to 5 lines of
Traditionally, regression testing has been performed by a software quality
assurance 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 developer testing. 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 that verify only intended outcomes.
Developer testing compels a developer to focus on unit testing and to include
both positive and negative test cases.
When regression test generation is supported by a sustainable process for
ensuring that test case failures are reviewed daily and addressed immediately,
the end result is a regression suite that evolves with the application, and
becomes more robust and more intelligent each day. If such a process is not
implemented and ingrained into the team's workflow, the application may evolve
out of sync with the generated test suite—- increasing false positives and
reducing the effectiveness of the test suite.