Achieving high structural coverage such as branch coverage in object oriented programs is an important and yet challenging goal due to two main challenges. First, some branches involve complex program logics and generating tests to cover them requires deep knowledge of the program structure and semantics. Second, covering some branches requires special method sequences to lead the receiver object or non-primitive arguments to specific desirable states. Previous work has developed the concolic testing technique (a combination of concrete and symbolic testing techniques) and the evolutionary testing technique to address these two challenges, respectively. However, neither technique was designed to address both challenges at the same time. To address the respective weaknesses of these two previous techniques, we propose a novel framework called Evacon that integrates evolutionary testing (used to search for desirable method sequences) and concolic testing (used to generate desirable method arguments). We have implemented our framework and applied it on six classes taken from the Java standard library and basic data structures. The experimental results show that the tests generated using our framework can achieve higher branch coverage than evolutionary testing or concolic testing alone
[1]
David Notkin,et al.
Rostra: a framework for detecting redundant object-oriented unit tests
,
2004,
Proceedings. 19th International Conference on Automated Software Engineering, 2004..
[2]
David Notkin,et al.
Symstra: A Framework for Generating Object-Oriented Unit Tests Using Symbolic Execution
,
2005,
TACAS.
[3]
Corina S. Pasareanu,et al.
Test input generation for java containers using state matching
,
2006,
ISSTA '06.
[4]
Nikolai Tillmann,et al.
Unit tests reloaded: parameterized unit testing with symbolic execution
,
2006,
IEEE Software.
[5]
Koushik Sen,et al.
CUTE and jCUTE: Concolic Unit Testing and Explicit Path Model-Checking Tools
,
2006,
CAV.
[6]
Paolo Tonella,et al.
Evolutionary testing of classes
,
2004,
ISSTA '04.