Using Dynamic Analysis Of Java Bytecode For Evolutionary Object-Oriented Unit Testing
Resumo
The focus of this paper is on presenting a methodology for generating and optimizing test data by employing evolutionary search techniques, with basis on the information provided by the analysis and interpretation of Java bytecode and on the dynamic execution of the instrumented test object. The main reason to work at the bytecode level is that even when the source code is unavailable, structural testing requirements can still be derived and used to assess the quality of a given test set and to guide the evolutionary search towards reaching specific test goals. Java bytecode retains enough high-level information about the original source code for an underlying model for program representation to be built. The observations required to select or generate test data are obtained by employing dynamic analysis techniques – i.e. by instrumenting, tracing and analysing Java bytecode.
Referências
Haggar, P. (2001, 2001/07/01). "Java bytecode: Understanding bytecode makes you a better programmer " IBM developerWorks Retrieved 2007/04/01, from http://www-128.ibm.com/developerworks/ibm/library/it-haggar_bytecode/.
Kinneer, A., M. Dwyer, et al. (2006). Sofya: A Flexible Framework for Development of Dynamic Program Analyses for Java Software, Department of Computer Science and Engineering, University of Nebraska - Lincoln.
Lindholm, T. and F. Yellin (1999). The Java virtual machine specification. Harlow, Addison-Wesley.
Liu, X., B. Wang, et al. (2005). Evolutionary search in the context of object-oriented programs. MIC2005: The Sixth Metaheuristics International Conference, Vienna, Austria.
Luke, S., L. Panait, et al. (2007). "ECJ 16: A Java evolutionary computation library." from http://www.cs.gmu.edu/~eclab/projects/ecj/.
Mantere, T. and J. T. Alander (2005). "Evolutionary software engineering, a review." Applied Soft Computing 5(3): 315-331.
McMinn, P. (2004). "Search-based software test data generation: a survey." Software Testing, Verification and Reliability 14(2): 105-156.
McMinn, P. and M. Holcombe (2003). The state problem for evolutionary testing. Genetic and Evolutionary Computation Conference, Chicago, USA, Springer-Verlag.
Muller, R. A., C. Lembeck, et al. (2004). A symbolic Java virtual machine for test case generation. Proceedings of IASTED Conference on Software Engineering: 365-371.
Tonella, P. (2004). Evolutionary testing of classes. ISSTA '04: Proceedings of the 2004 ACM SIGSOFT international symposium on Software testing and analysis. Boston, Massachusetts, USA, ACM Press: 119-128.
Tracey, N., J. Clark, et al. (2002). A search-based automated test-data generation framework for safety-critical systems, Springer-Verlag New York, Inc.
Vincenzi, A. M. R., M. E. Delamaro, et al. (2006). "Establishing structural testing criteria for Java bytecode." Software Practice and Experience 36(14): 1513-1541.
Vincenzi, A. M. R., J. C. Maldonado, et al. (2005). "Coverage testing of Java programs and components." Special issue on new software composition concepts 56(1-2): 211-230.
Wappler, S. and F. Lammermann (2005). Using evolutionary algorithms for the unit testing of object-oriented software. GECCO '05: Proceedings of the 2005 conference on genetic and evolutionary computation, ACM Press: 1053-1060.
Wappler, S. and J. Wegener (2006a). Evolutionary Unit Testing Of Object-Oriented Software Using A Hybrid Evolutionary Algorithm. Proceedings of the 2006 IEEE Congress on Evolutionary Computation. Vancouver, IEEE Press: 3193-3200.
Wappler, S. and J. Wegener (2006b). Evolutionary unit testing of object-oriented software using strongly-typed genetic programming. GECCO '06: Proceedings of the 8th annual conference on Genetic and evolutionary computation. Seattle, Washington, USA, ACM Press: 1925-1932.
Wegener, J., A. Baresel, et al. (2001). "Evolutionary test environment for automatic structural testing." Information & Software Technology 43(14): 841-854.