Function Substitution: Towards Constraint Solving in Software Testing
Constraint solving is a fundamental tenet of most test case generation strategies. However, conventional constraint solving methods were not designed in consideration of that aspect of test case generation. It has led to a situation where test case generation techniques can miss test cases when constraints contain function invocations. This is due to the fact that, when solving constraints to generate test cases, function invocations are not effectively handled and, as a result, solutions to some constraints are not found even though they do exist. This problem occurs in both specification-based and code-based testing. To address the problem, this paper presents a function substitution method that transforms test case constraints that contain certain types of functions into equivalent constraints that do not contain those functions. The transformation preserves the solution space and avoids missed test cases. As a result, the completeness of test case generation can be improved.