I. Introduction
Developers can save time and effort by generating unit tests automatically. Automatically generated tests can be integrated into the code base of the program under test just like manually written tests, where they support developers during software maintenance [1]. Good tests should not merely detect undesired modifications of the code by failing, but should also provide guidance to the developer in correcting the undesired modification to make the test pass again. Furthermore, desired code changes may require the test code to be modified in order to avoid spurious test failures. Accordingly, a good test case should not only be sensitive to deviations from the intended behavior, but should also be maintainable in its own right; it should be easy to understand so that it can be readily adapted to changes in the rest of the code base as it evolves.