Issue No. 08 - August (1997 vol. 23)
DOI Bookmark: http://doi.ieeecomputersociety.org/10.1109/32.624306
<p><b>Abstract</b>—Software maintainers are faced with the task of regression testing: retesting a modified program on an often large number of test cases. The cost of regression testing can be reduced if the size of the program that must be retested is reduced and if old test cases and old test results can be reused. Two complimentary algorithms for reducing the cost of regression testing are presented. The first produces a program called <tt>differences</tt> that captures the <tt>semantic</tt> change between <tt>certified</tt>, a previously tested program, and <tt>modified</tt>, a changed version of <tt>certified</tt>. It is more efficient to test <tt>differences</tt>, because it omits unchanged computations. The program <tt>differences</tt> is computed using a combination of program slices.</p><p>The second algorithm identifies test cases for which <tt>certified</tt> and <tt>modified</tt> will produce the same output and existing test cases that will test components new in <tt>modified</tt>. Not rerunning test cases that produce the same output avoids unproductive testing; testing new components with existing test cases avoids the costly construction of new test cases. The second algorithm is based on the notion of <it>common execution patterns</it>, which is the interprocedural extension of the notion introduced by Bates and Horwitz. Program components with common execution patterns have the same execution pattern during some call to their procedure. They are computed using a new type of interprocedural slice called a <it>calling context slice</it>. Whereas an interprocedural slice includes the program components necessary to capture all possible executions of a statement, a calling context slice includes only those program components necessary to capture the execution of a statement in a <it>particular calling context</it> (i.e., a particular call to the procedure).</p><p>Together with <tt>differences</tt>, it is possible to test <tt>modified</tt> by running the smaller program <tt>differences</tt> on a smaller number of test cases. This is more efficient than running <tt>modified</tt> on a large number of test cases. A prototype implementation has been built to examine and illustrate these algorithms.</p>
CTR Categories and Subject Descriptors: D.2.2 [Software Engineering]: tools and techniques—programmer workbench; D.2.5 [Software Enginering]: testing and debugging; D.3.3 [Programming Languages]: language constructs—control structures, procedures, functions, and subroutines; E.1 [Data Structures] graphs; other keywords: slicing, regression testing.
D. Binkley, "Semantics Guided Regression Test Cost Reduction," in IEEE Transactions on Software Engineering, vol. 23, no. , pp. 498-516, 1997.