BUBEN: Automated Library Abstractions Enabling Scalable Bug Detection for Large Programs with I/O and Complex Environment
An important goal of software engineering research is to create methods for efficient verification and detecting bugs. In this context, we focus on two challenges: (1) scalability to large and realistic software systems and (2) tools unable to directly analyze programs that perform I/O operations and interact with their environment. The common sources of problems with scalability include the huge number of thread interleavings and usage of large libraries. Programs written in managed languages, such as Java, cannot be directly analyzed by many verification tools due to insufficient support for native library methods. Both issues affect especially path-sensitive verification techniques.
We present the Buben system that automatically generates abstractions of complex software systems written in Java. The whole process has three phases: (1) dynamic analysis that records under-approximate information about behavior of native methods and library methods that perform I/O, (2) static analysis that computes over-approximate summaries of side effects of library methods, and (3) program code transformation that replaces calls of native methods and creates abstractions of library methods. Software systems abstracted in this way can be analyzed, e.g. for the presence of bugs, without the risk of a tool failure caused by unsupported libraries and more efficiently too. We evaluated Buben on several programs from popular benchmark suites, including DaCapo.
We would like to thank Ondřej Lhoták for all his suggestions regarding the paper content and presentation. This work was partially supported by the Czech Science Foundation project 18-17403S.
- 1.Artzi, S., Kiezun, A., Glasser, D., Ernst, M.: Combined static and dynamic mutability analysis. In: Proceedings of ASE 2007. ACM (2007)Google Scholar
- 2.Binkley, D., Gallagher, K.B.: Program slicing. In: Advances in Computers, vol. 43 (1996)Google Scholar
- 3.Blackburn, S.M., et al.: The DaCapo benchmarks: Java benchmarking development and analysis. In: Proceedings of OOPSLA 2006. ACM (2006)Google Scholar
- 4.Cadar, C., Dunbar, D., Engler, D.R.: KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs. In: Proceedings of OSDI 2008. USENIX (2008)Google Scholar
- 7.Flanagan, C., Freund, S.N.: The RoadRunner dynamic analysis framework for concurrent programs. In: Proceedings of PASTE 2010. ACM (2010)Google Scholar
- 9.Marek, L., Villazon, A., Zheng, Y., Ansaloni, D., Binder, W., Qi, Z.: DiSL: a domain-specific language for bytecode instrumentation. In: Proceedings of AOSD 2012. ACM (2012)Google Scholar
- 10.Matosevic, I., Abdelrahman, T.S.: Efficient bottom-up heap analysis for symbolic path-based data access summaries. In: Proceedings of CGO 2012. ACM (2012)Google Scholar
- 14.Tkachuk, O., Dwyer, M.: Adapting side effect analysis for modular program model checking. In: Proceedings of ESEC/FSE 2003. ACM (2003)Google Scholar
- 15.Yorsh, G., Yahav, E., Chandra, S.: Generating precise and concise procedure summaries. In: Proceedings of POPL 2008. ACM (2008)Google Scholar
- 16.Java Pathfinder verification framework (JPF). https://github.com/javapathfinder/jpf-core/wiki