skip to main content
research-article
Open Access

Faster variational execution with transparent bytecode transformation

Published:24 October 2018Publication History
Skip Abstract Section

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.

References

  1. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  2. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  3. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  4. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  5. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  6. 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 ScholarGoogle Scholar
  7. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  8. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  9. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  10. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  11. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  12. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  13. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  14. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  15. 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 ScholarGoogle Scholar
  16. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  17. 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 ScholarGoogle ScholarCross RefCross Ref
  18. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  19. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  20. Christian Kästner. 2017. Differential Testing for Variational Analyses: Experience from Developing KConfigReader. Technical Report 1706.09357. arXiv.Google ScholarGoogle Scholar
  21. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  22. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  23. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  24. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  25. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  26. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  27. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  28. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  29. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  30. Tim Lindholm, Frank Yellin, Gilad Bracha, and Alex Buckley. 2015. The Java® Virtual Machine Specification (1 ed.). AddisonWesley Professional. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  32. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  33. 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 ScholarGoogle Scholar
  34. 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 ScholarGoogle Scholar
  35. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  36. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  37. 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 ScholarGoogle ScholarCross RefCross Ref
  38. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  39. A Nhlabatsi, R Laney, and B Nuseibeh. 2008. Feature Interaction: the Security Threat from within Software Systems. Progress in Informatics (2008), 75–89.Google ScholarGoogle Scholar
  40. Changhai Nie and Hareton Leung. 2011. A Survey of Combinatorial Testing. ACM Computing Surveys (CUSR) 43, 2 (2011), 11:1–11:29. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Klaus Pohl, Günter Böckle, and Frank J. van der Linden. 2005. Software Product Line Engineering: Foundations, Principles and Techniques. Springer. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  43. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  44. 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 ScholarGoogle ScholarCross RefCross Ref
  45. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  46. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  47. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  48. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  49. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  50. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  51. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  52. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  53. 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 ScholarGoogle Scholar
  54. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  55. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  56. Lusheng Wang and Tao Jiang. 1994. On the Complexity of Multiple Sequence Alignment. Journal of Computational Biology 1 (1994), 337–348.Google ScholarGoogle ScholarCross RefCross Ref
  57. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  58. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  59. 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 ScholarGoogle ScholarDigital LibraryDigital Library
  60. 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 ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Faster variational execution with transparent bytecode transformation

        Recommendations

        Comments

        Login options

        Check if you have access through your login credentials or your institution to get full access on this article.

        Sign in

        Full Access

        PDF Format

        View or Download as a PDF file.

        PDF

        eReader

        View online with eReader.

        eReader