A Differential Testing Pipeline for Validating Lambda Expression Handling in Java Compilers Through LLM-Generated Test Cases
Resumo
A linguagem de programação Java, conhecida por sua robustez e capacidades multiplataforma, evoluiu com funcionalidades como as expressões Lambda (introduzidas no Java 8) para aumentar a produtividade do desenvolvedor e a legibilidade do código. No entanto, a correção das implementações do compilador para tais funcionalidades é crítica para manter a confiabilidade do Java. Este estudo aproveita os Grandes Modelos de Linguagem (LLMs) para gerar diversos programas Java com expressões Lambda, permitindo o teste diferencial do comportamento do compilador em implementações como Oracle JDK e OpenJDK. A partir dessa abordagem foi possível validar a consistência das implementações desses compiladores e demonstrar a viabilidade da proposta. Adicionalmente, fornece uma estrutura de conjunto de testes reutilizável para avaliar outras funcionalidades de linguagem e compiladores, demonstrando a utilidade de ferramentas orientadas por IA no avanço de testes de software rigorosos e na validação de compiladores.
Referências
(2023b). Java se documentation. Technical report, Oracle Corporation. [link].
(2024). Lambda expressions.
Brown, T., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., Agarwal, S., Herbert-Voss, A., Krueger, G., Henighan, T., Child, R., Ramesh, A., Ziegler, D. M., Wu, J., Winter, C., Hesse, C., Chen, M., Sigler, E., Litwin, M., Gray, S., Chess, B., Clark, J., Berner, C., McCandlish, S., Radford, A., Sutskever, I., and Amodei, D. (2020). Language models are few-shot learners. In Advances in Neural Information Processing Systems, NeurIPS ’20.
Feitosa, S., Ribeiro, R., and Du Bois, A. (2020). A type-directed algorithm to generate random well-typed java 8 programs. Science of Computer Programming, 196:102494.
Ferrer, J. (2024). How transformers work: A detailed exploration of transformer architecture.
Goetz, B. (2014). Java SE 8 for the Really Impatient. Addison-Wesley.
Gosling, J., Joy, B., Steele, G., Bracha, G., and Buckley, A. (2000). The Java Language Specification. Addison-Wesley.
Kraus, L. F., Schafaschek, B., Ribeiro, R. G., and da Silva Feitosa, S. (2021). Synthesis of random real-world java programs from preexisting libraries. In Proceedings of the 25th Brazilian Symposium on Programming Languages, SBLP ’21, page 108–115, New York, NY, USA. Association for Computing Machinery.
McKeeman, W. M. (1995). Differential testing for software. In Proceedings of the ACM SIGSOFT ’95: Foundations of Software Engineering, pages 98–104. ACM.
Oracle Corporation (2023). Lambda expressions: The java™ tutorials. [link]. Accessed: 2023-10-28.
Palka, M. H., Claessen, K., Russo, A., and Hughes, J. (2011). Differential testing using random well-typed haskell programs. In Proceedings of the International Conference on Software Engineering, pages 504–514. ACM.
Schkufza, E., Sharma, R., and Aiken, A. (2011). Csmith: A tool for generating random c programs. In Proceedings of the 2011 ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), pages 320–331. ACM.
Wang, B., Chen, M., Lin, Y., Papadakis, M., and Zhang, J. M. (2024). An exploratory study on using large language models for mutation testing. CoRR, abs/2401.04567. OpenReview preprint.
Wang, J., Huang, Y., Chen, C., Liu, Z., Wang, S., and Wang, Q. (2023). Software testing with large language models: Survey, landscape, and vision. arXiv preprint arXiv:2307.07567. Available on Papers with Code at [link].
