There are various test cases to be designed and executed at a certain level in the complete software testing lifecycle. Based on the importance and requirements of a particular application, the priorities need to be set for sanity tests, integration tests and a complete set of regression test cases.
Whenever there are new changes, the existing regression test suites might require modification in adding, editing or removing the existing test cases. All these need to be done within the time allocated for the regression testing.
Entry/exit criteria can be implemented in regression testing as well. For entry criteria, a fixed set of conditions like reviewing bugs & regression tests based on those bugs, etc. need to be met in order to initiate the testing. And, for exit criteria, a fixed set of conditions like checking all tests are executed, no bugs remained unfixed, etc. need to be met to conclude the testing process.
A great way to maintain the effectiveness of the regression test suite is to have a good tracking mechanism between the features that are developed and the tests that are added in order to validate for future usability. This should be a consistent activity as it would help test manager verify the feature checklist and validate the test coverage for a feature that is being developed in the release.
Another technique that I came across during my research on reducing the time for regression testing was reduce, reuse, recycle and recover.
Reduce the regression testing time by creating effective regression test suites that test the changed part of the software, by identifying test cases in the regression test suite that do not need to be rerun on the changed software, and by identifying and removing obsolete test cases.
Reuse test suites created for one version of the software by identifying those test cases that need to be rerun for testing subsequent versions of the software and by computing an effective ordering for running the test cases.
Recycle test cases by monitoring executions to gather test inputs that can be used for retest-ing and by creating unit test cases from system test cases.
Recover test cases by identifying, manipulating, and transforming obsolete test cases, by generating new test cases from old ones, and by repairing test cases when the software changes