Static Analysis of Java Bytecode for Domain-specific Software Testing
Resumo
Embora seja de alto custo, a atividade de teste é de fundamental importância no processo de desenvolvimento de software. Técnicas e ferramentas são essenciais para a melhoria da qualidade e da produtividade na atividade de teste. A técnica de teste estrutural usa estruturas de fluxo de controle e de dados para derivar requisitos de testes. Buscando exercitar tais requisitos o testador supostamente fornece casos de teste que melhoram a qualidade do software. O teste estrutural requer a execução de várias atividades que exigem a análise de código que, em geral, é realizada no código fonte do produto em teste. Com o advento da linguagem Java tornou-se usual a realização da análise diretamente no código objeto (bytecode) o que traz algumas vantagens. Neste artigo, é discutido como usar as características da análise de bytecode Java e como estendê-la para a implementação de critérios de teste estruturais para dois domínios específicos: programas orientados a aspectos e aplicações de banco de dados.
Referências
Dahm, M. (2001). Byte code engineering with the BCEL API. Technical Report B-1798, Freie Universität Berlin – Institut für Informatik, Berlin – German. Available at: http://bcel.sourceforge.net/. Accessed on: 01/03/2004.
Delamaro, M. E. and Vincenzi, A. M. R. (2003). Structural Testing of Mobile Agents. In Nicolas Guelfi, E. A. and Reggio, G., editors, III International Workshop on Scientific Engineering of Java Distributed Applications (FIDJI’2003), Lecture Notes on Computer Science, pages 73–85. Springer.
Haddox, J. M., Kapfhammer, G. M., and Michael, C. C. (2002). An approach for understanding and testing third party software components. In Reliability and Maintainability Symposium – RAMS’2002, pages 293–299, Seattle, WA, USA. IEEE Press.
Herman, P. M. (1976). A data flow analysis approach to program testing. Australian Computer Journal, 8(3):92–96.
Hilsdale, E. and Hugunin, J. (2004). Advice weaving in aspectj. In Proceedings of the 3rd international conference on Aspect-oriented software development, pages 26–35. ACM Press.
Lemos, O. A. L., Vincenzi, A. M. R., Maldonado, J. C., and Masiero, P. C. (2007). Control and data flow structural testing criteria for aspect-oriented programs. The Journal of Systems and Software, 80(6):862–882.
Maldonado, J. C. (1991). Potential-Uses Criteria: A Contribution to the Structural Testing of Software. PhD thesis, DCA/FEE/UNICAMP, Campinas, SP, Brazil. (in Portuguese).
Rapps, S. and Weyuker, E. J. (1985). Selecting software test data using data flow information. IEEE Transactions on Software Engineering, 11(4):367–375.
Spoto, E. S., Jino, M., and Maldonado, J. C. (2000). Structural software testing: An approach to relational database applications. In XIV Brazilian Symposium on Software Engineering, João Pessoa, PA, Brazil. (in Portuguese).
The AspectJ Team (2006). Aspectj programming guide. Available at: http://www.eclipse.org/aspectj/doc/released/progguide/index.html. Accessed on: 04/03/2007.
Vincenzi, A. M. R., Maldonado, J. C., Wong, W. E., and Delamaro, M. E. (2005). Coverage testing of Java programs and components. Journal of Science of Computer Programming, 56(1-2):211–230.
Zhao, J. (2000). Dependence analysis of Java bytecode. In 24th IEEE Annual International Computer Software and Applications Conference (COMPSAC’2000), pages 486–491, Taipei, Taiwan. IEEE Computer Society Press.