|Chair of Software Engineering|
is estimated that 80% of software development cost is spent on
detecting and fixing defects. To tackle this issue, a number of tools
and testing techniques have been developed to improve the testing
framework. Although techniques such as static analysis, random testing
and evolutionary testing have
been used to automate the testing process, it is not clear what is the best approach. One way to view software testing is as an optimization problem, where the test cases are the parameters and the number of faults found, state coverage and number of tested features can be used as the optimization variables.
One commonly used optimization method is genetic Algorithms (evolutionary testing) , but previous research on evolutionary testing has mainly focused on procedural programming languages with simple test data inputs such as numbers. In this work, we present an evolutionary object-oriented testing approach that combines a genetic algorithm with static analysis to increase the number of faults found within a time frame. A total of 4,379 hours of experiments were executed to evaluate the effectiveness of the evolutionary testing approach implemented compared to a random testing strategy and a precondition-satisfaction strategy.
The results show that genetic algorithm combined with static analysis can increase the number of faults by 34% compared to the second best performing strategy. It also showed that compared to the other two strategies, the chance of a test case generated by our evolutionary testing approach to find a fault is 320% higher.