Abstract
Variational execution is a novel dynamic analysis technique for exploring highly configurable systems and accurately tracking information flow. It is able to efficiently analyze many configurations by aggressively sharing redundancies of program executions. The idea of variational execution has been demonstrated to be effective in exploring variations in the program, especially when the configuration space grows out of control. Existing implementations of variational execution often require heavy lifting of the runtime interpreter, which is painstaking and error-prone. Furthermore, the performance of this approach is suboptimal. For example, the state-of-the-art variational execution interpreter for Java, VarexJ, slows down executions by 100 to 800 times over a single execution for small to medium size Java programs. Instead of modifying existing JVMs, we propose to transform existing bytecode to make it variational, so it can be executed on an unmodified commodity JVM. Our evaluation shows a dramatic improvement on performance over the state-of-the-art, with a speedup of 2 to 46 times, and high efficiency in sharing computations.
- Thomas H. Austin and Cormac Flanagan. 2012. Multiple Facets for Dynamic Information Flow. In Proceedings of the ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL). ACM, 165–178. Google ScholarDigital Library
- Thomas H. Austin, Jean Yang, Cormac Flanagan, and Armando Solar-Lezama. 2013. Faceted Execution of Policy-Agnostic Programs. In Proceedings of the ACM SIGPLAN Workshop on Programming Languages and Analysis for Security (PLAS). ACM, 15–26. Google ScholarDigital Library
- Roberto Baldoni, Emilio Coppa, Daniele Cono D’Elia, Camil Demetrescu, and Irene Finocchi. 2018. A Survey of Symbolic Execution Techniques. ACM Computing Surveys (CSUR) 51, 3 (2018), 50:1–50:39. Google ScholarDigital Library
- Gilles Barthe, Juan Manuel Crespo, Dominique Devriese, Frank Piessens, and Exequiel Rivas. 2012. Secure Multi-Execution through Static Program Transformation. In Formal Techniques for Distributed Systems. Springer, 186–202. Google ScholarDigital Library
- Jonathan Bell and Gail E. Kaiser. 2014. Phosphor: Illuminating Dynamic Data Flow in Commodity JVMs. In Proceedings of the ACM International Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA). ACM, 83–101. Google ScholarDigital Library
- Jonathan Bell and Luís Pina. 2018. CROCHET: Checkpoint and Rollback via Lightweight Heap Traversal on Stock JVMs. In Proceedings of the European Conference on Object-Oriented Programming (ECOOP). Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik, 17:1–17:31.Google Scholar
- Eric Bodden, Társis Tolêdo, Márcio Ribeiro, Claus Brabrand, Paulo Borba, and Mira Mezini. 2013. SPLLIFT: Statically Analyzing Software Product Lines in Minutes Instead of Years. In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI). ACM, 355–364. Google ScholarDigital Library
- Yuriy Brun, Reid Holmes, Michael D. Ernst, and David Notkin. 2011. Proactive Detection of Collaboration Conflicts. In Proceedings of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE). ACM, 168–178. Google ScholarDigital Library
- Muffy Calder, Mario Kolberg, Evan H. Magill, and Stephan Reiff-Marganiec. 2003. Feature Interaction: A Critical Review and Considered Forecast. Computer Networks 41, 1 (2003), 115–141. Google ScholarDigital Library
- Marcelo d’Amorim, Steven Lauterburg, and Darko Marinov. 2008. Delta Execution for Efficient State-Space Exploration of Object-Oriented Programs. IEEE Transactions on Software Engineering (TSE) 34, 5 (2008), 597–613. Google ScholarDigital Library
- Willem De Groef, Dominique Devriese, Nick Nikiforakis, and Frank Piessens. 2012. FlowFox: A Web Browser with Flexible and Precise Information Flow Control. In Proceedings of the ACM Conference on Computer and Communications Security (CCS). ACM, 748–759. Google ScholarDigital Library
- Dominique Devriese and Frank Piessens. 2010. Noninterference Through Secure Multi-Execution. In Proceedings of the IEEE Symposium on Security and Privacy (SP). IEEE, 109–124. Google ScholarDigital Library
- Aleksandar S. Dimovski, Ahmad Salim Al-Sibahi, and Andrzej Brabrand, Clausand Wąsowski. 2017. Efficient Family-Based Model Checking via Variability Abstractions. International Journal on Software Tools for Technology Transfer (STTT) 19, 5 (2017), 585–603. Google ScholarDigital Library
- Emelie Engström and Per Runeson. 2011. Software Product Line Testing - A Systematic Mapping Study. Information and Software Technology 53, 1 (2011), 2–13. Google ScholarDigital Library
- Martin Erwig and Eric Walkingshaw. 2013. Variation Programming with the Choice Calculus. In Generative and Transformational Techniques in Software Engineering IV (GTTSE). Springer, 55–100.Google Scholar
- Andy Georges, Dries Buytaert, and Lieven Eeckhout. 2007. Statistically Rigorous Java Performance Evaluation. In Proceedings of the ACM SIGPLAN Conference on Object-Oriented Programming Systems and Applications (OOPSLA). ACM, 57–76. Google ScholarDigital Library
- Klaus Havelund and Thomas Pressburger. 2000. Model Checking JAVA Programs using JAVA PathFinder. International Journal on Software Tools for Technology Transfer (STTT) 2, 4 (2000), 366–381.Google ScholarCross Ref
- Petr Hosek and Cristian Cadar. 2013. Safe Software Updates via Multi-Version Execution. In Proceedings of the International Conference on Software Engineering (ICSE). IEEE, 612–621. Google ScholarDigital Library
- Yue Jia and Mark Harman. 2011. An Analysis and Survey of the Development of Mutation Testing. IEEE Transactions on Software Engineering (TSE) 37, 5 (2011), 649–678. Google ScholarDigital Library
- Christian Kästner. 2017. Differential Testing for Variational Analyses: Experience from Developing KConfigReader. Technical Report 1706.09357. arXiv.Google Scholar
- Christian Kästner, Alexander von Rhein, Sebastian Erdweg, Jonas Pusch, Sven Apel, Tillmann Rendel, and Klaus Ostermann. 2012. Toward Variability-Aware Testing. In Proceedings of the International Workshop on Feature-Oriented Software Development (FOSD). ACM, 1–8. Google ScholarDigital Library
- Chang Hwan Peter Kim, Sarfraz Khurshid, and Don Batory. 2012. Shared Execution for Efficiently Testing Product Lines. In Proceedings of the IEEE International Symposium on Software Reliability Engineering (ISSRE). IEEE, 221–230. Google ScholarDigital Library
- Dohyeong Kim, Yonghwi Kwon, William N. Sumner, Xiangyu Zhang, and Dongyan Xu. 2015. Dual Execution for On the Fly Fine Grained Execution Comparison. In Proceedings of the International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS). ACM, 325–338. Google ScholarDigital Library
- Clemens Kolbitsch, Benjamin Livshits, Benjamin Zorn, and Christian Seifert. 2012. Rozzle: De-Cloaking Internet Malware. In Proceedings of the IEEE Symposium on Security and Privacy (SP). IEEE, 443–457. Google ScholarDigital Library
- Yonghwi Kwon, Dohyeong Kim, William Nick Sumner, Kyungtae Kim, Brendan Saltaformaggio, Xiangyu Zhang, and Dongyan Xu. 2016. LDX: Causality Inference by Lightweight Dual Execution. In Proceedings of the International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS). ACM, 503–515. Google ScholarDigital Library
- Lukas Lazarek. 2017. How to Efficiently Process 2 100 List Variations. In Proceedings Companion of the ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity (SPLASH). ACM, 36–38. Google ScholarDigital Library
- Claire Le Goues, ThanhVu Nguyen, Stephanie Forrest, and Westley Weimer. 2012. GenProg: A Generic Method for Automatic Software Repair. IEEE Transactions on Software Engineering (TSE) 38, 1 (2012), 54–72. Google ScholarDigital Library
- Jörg Liebig, Alexander von Rhein, Christian Kästner, Sven Apel, Jens Dörre, and Christian Lengauer. 2013. Scalable Analysis of Variable Software. In Proceedings of the Joint Meeting on Foundations of Software Engineering (ESEC/FSE). ACM, 81–91. Google ScholarDigital Library
- Max Lillack, Christian Kästner, and Eric Bodden. 2014. Tracking Load-Time Configuration Options. In Proceedings of the ACM/IEEE International Conference on Automated Software Engineering (ASE). ACM, 445–456. Google ScholarDigital Library
- Tim Lindholm, Frank Yellin, Gilad Bracha, and Alex Buckley. 2015. The Java® Virtual Machine Specification (1 ed.). AddisonWesley Professional. Google ScholarDigital Library
- Matthew Maurer and David Brumley. 2012. Tachyon: Tandem Execution for Efficient Live Patch Testing. In Proceedings of the USENIX Security Symposium. USENIX, 617–630. Google ScholarDigital Library
- Flávio Medeiros, Christian Kästner, Márcio Ribeiro, Rohit Gheyi, and Sven Apel. 2016. A Comparison of 10 Sampling Algorithms for Configurable Systems. In Proceedings of the International Conference on Software Engineering (ICSE). ACM, 664–675. Google ScholarDigital Library
- Flávio Medeiros, Christian Kästner, Márcio Ribeiro, Sarah Nadi, and Rohit Gheyi. 2015. The Love/Hate Relationship with the C Preprocessor: An Interview Study. In Proceedings of the European Conference on Object-Oriented Programming (ECOOP), Vol. 37. Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik, 495–518.Google Scholar
- Jens Meinicke, Chu-Pan Wong, Christian Kästner, and Gunter Saake. 2018. Understanding Differences among Executions with Variational Traces. Technical Report 1807.03837. arXiv.Google Scholar
- Jens Meinicke, Chu-Pan Wong, Christian Kästner, Thomas Thüm, and Gunter Saake. 2016. On Essential Configuration Complexity: Measuring Interactions in Highly-Configurable Systems. In Proceedings of the IEEE/ACM International Conference on Automated Software Engineering (ASE). ACM, 483–494. Google ScholarDigital Library
- Meng Meng, Jens Meinicke, Chu-Pan Wong, Eric Walkingshaw, and Christian Kästner. 2017. A Choice of Variational Stacks: Exploring Variational Data Structures. In Proceedings of the International Workshop on Variability Modelling of Software-Intensive Systems (VAMOS). ACM, 28–35. Google ScholarDigital Library
- Saul B. Needleman and Christian D. Wunsch. 1970. A General Method Applicable to the Search for Similarities in the Amino Acid Sequence of Two Proteins. Journal of Molecular Biology 48, 3 (1970), 443–453.Google ScholarCross Ref
- Hung Viet Nguyen, Christian Kästner, and Tien N. Nguyen. 2014. Exploring Variability-Aware Execution for Testing Plugin-Based Web Applications. In Proceedings of the International Conference on Software Engineering (ICSE). ACM, 907–918. Google ScholarDigital Library
- A Nhlabatsi, R Laney, and B Nuseibeh. 2008. Feature Interaction: the Security Threat from within Software Systems. Progress in Informatics (2008), 75–89.Google Scholar
- Changhai Nie and Hareton Leung. 2011. A Survey of Combinatorial Testing. ACM Computing Surveys (CUSR) 43, 2 (2011), 11:1–11:29. Google ScholarDigital Library
- Klaus Pohl, Günter Böckle, and Frank J. van der Linden. 2005. Software Product Line Engineering: Foundations, Principles and Techniques. Springer. Google ScholarDigital Library
- Elnatan Reisner, Charles Song, Kin-Keung Ma, Jeffrey S Foster, and Adam Porter. 2010. Using Symbolic Evaluation to Understand Behavior in Configurable Software Systems. In Proceedings of the International Conference on Software Engineering (ICSE). ACM, 445–454. Google ScholarDigital Library
- Thomas Schmitz, Maximilian Algehed, Cormac Flanagan, and Alejandro Russo. 2018. Faceted Secure Multi Execution. In Proceedings of the ACM Conference on Computer and Communications Security (CCS). ACM. Google ScholarDigital Library
- Thomas Schmitz, Dustin Rhodes, Thomas H. Austin, Kenneth Knowles, and Cormac Flanagan. 2016. Faceted Dynamic Information Flow via Control and Data Monads. In Proceedings of the International Conference on Principles of Security and Trust - Volume 9635. Springer, 3–23.Google ScholarCross Ref
- Julia Schroeter, Malte Lochau, and Tim Winkelmann. 2012. Multi-Perspectives on Feature Models. In Proceedings of the International Conference on Model Driven Engineering Languages and Systems (MODELS). Springer, 252–268. Google ScholarDigital Library
- Koushik Sen, George Necula, Liang Gong, and Wontae Choi. 2015. MultiSE: Multi-Path Symbolic Execution Using Value Summaries. In Proceedings of the Joint Meeting on Foundations of Software Engineering (ESEC/FSE). ACM, 842–853. Google ScholarDigital Library
- Larissa Rocha Soares, Jens Meinicke, Sarah Nadi, Christian Kästner, and Eduardo Santana de Almeida. 2018. VarXplorer: Lightweight Process for Dynamic Analysis of Feature Interactions. In Proceedings of the International Workshop on Variability Modelling of Software-Intensive Systems (VAMOS). ACM, 59–66. Google ScholarDigital Library
- Ya-Yunn Su, Mona Attariyan, and Jason Flinn. 2007. AutoBash: Improving Configuration Management with Operating System Causality Analysis. In Proceedings of the ACM SIGOPS Symposium on Operating Systems Principles (SOSP). ACM, 237–250. Google ScholarDigital Library
- William N. Sumner, Tao Bao, Xiangyu Zhang, and Sunil Prabhakar. 2011. Coalescing Executions for Fast Uncertainty Analysis. In Proceedings of the International Conference on Software Engineering (ICSE). ACM, 581–590. Google ScholarDigital Library
- William N. Sumner and Xiangyu Zhang. 2013. Comparative Causality: Explaining the Differences between Executions. In Proceedings of the International Conference on Software Engineering (ICSE). IEEE, 272–281. Google ScholarDigital Library
- Thomas Thüm, Sven Apel, Christian Kästner, Ina Schaefer, and Gunter Saake. 2014. A Classification and Survey of Analysis Strategies for Software Product Lines. ACM Computing Surveys (CSUR) 47, 1 (2014), 6:1–6:45. Google ScholarDigital Library
- Joseph Tucek, Weiwei Xiong, and Yuanyuan Zhou. 2009. Efficient Online Validation with Delta Execution. In Proceedings of the International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS). ACM, 193–204. Google ScholarDigital Library
- Alexander von Rhein, Sven Apel, and Franco Raimondi. 2011. Introducing Binary Decision Diagrams in the Explicit-State Verification of Java Code. In Proceedings of the Java Pathfinder Workshop.Google Scholar
- Eric Walkingshaw, Christian Kästner, Martin Erwig, Sven Apel, and Eric Bodden. 2014. Variational Data Structures: Exploring Tradeoffs in Computing with Variability. In Proceedings of the ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software (Onward!). ACM, 213–226. Google ScholarDigital Library
- Bo Wang, Yingfei Xiong, Yangqingwei Shi, Lu Zhang, and Dan Hao. 2017. Faster Mutation Analysis via Equivalence Modulo States. In Proceedings of the ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA). ACM, 295–306. Google ScholarDigital Library
- Lusheng Wang and Tao Jiang. 1994. On the Complexity of Multiple Sequence Alignment. Journal of Computational Biology 1 (1994), 337–348.Google ScholarCross Ref
- Chu-Pan Wong, Jens Meinicke, and Christian Kästner. 2018. Beyond Testing Configurable Systems: Applying Variational Execution to Automatic Program Repair and Higher Order Mutation Testing. In Proceedings of the ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering - New Ideas and Emerging Results Track (ESEC/FSE-NIER). ACM. Google ScholarDigital Library
- Jean Yang, Travis Hance, Thomas H. Austin, Armando Solar-Lezama, Cormac Flanagan, and Stephen Chong. 2016. Precise, Dynamic Information Flow for Database-backed Applications. In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI). ACM, 631–647. Google ScholarDigital Library
- Andreas Zeller. 2002. Isolating Cause-Effect Chains From Computer Programs. In Proceedings of the ACM SIGSOFT Symposium on Foundations of Software Engineering (FSE). ACM, 1–10. Google ScholarDigital Library
- Xiangyu Zhang, Sriraman Tallam, Neelam Gupta, and Rajiv Gupta. 2007. Towards Locating Execution Omission Errors. In Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI). ACM, 415–424. Google ScholarDigital Library
Index Terms
- Faster variational execution with transparent bytecode transformation
Recommendations
Efficient Java exception handling in just-in-time compilation
Research ArticlesJava uses exceptions to provide elegant error handling capabilities during program execution. However, the presence of exception handlers complicates the job of the just-in-time (JIT) compiler, while exceptions are rarely used in most programs. This ...
Efficient exception handling in Java bytecode-to-c ahead-of-time compiler for smbedded systems
EMSOFT '06: Proceedings of the 6th ACM & IEEE International conference on Embedded softwareOne of the most promising approaches to Java acceleration in embedded systems is a bytecode-to-C ahead-of-time compiler (AOTC). It improves the performance of a Java virtual machine (JVM) by translating bytecode into C code, which is then compiled into ...
Efficient exception handling in Java bytecode-to-C ahead-of-time compiler for embedded systems
One of the most promising approaches to Java acceleration in embedded systems is a bytecode-to-C ahead-of-time compiler (AOTC). It improves the performance of a Java virtual machine (JVM) by translating bytecode into C code, which is then compiled into ...
Comments