ABSTRACT
Previous research on static analysis for program families has focused on lifting analyses for single, plain programs to program families by employing idiosyncratic representations. The lifting effort typically involves a significant amount of work for proving the correctness of the lifted algorithm and demonstrating its scalability. In this paper, we propose a parameterized static analysis framework for program families that can automatically lift a class of type-based static analyses for plain programs to program families. The framework consists of a parametric logical specification and a parametric variational constraint solver. We prove that a lifted algorithm is correct provided that the underlying analysis algorithm is correct. An evaluation of our framework has revealed an error in a previous manually lifted analysis. Moreover, performance tests indicate that the overhead incurred by the general framework is bounded by a factor of 2.
- S. Apel, C. Kästner, A. Größlinger, and C. Lengauer. Type Safety for Feature-Oriented Product Lines. Automated Software Engineering, 17(3):251--300, 2010. Google ScholarDigital Library
- S. Apel, A. von Rhein, P. Wendler, A. Größlinger, and D. Beyer. Strategies for Product-Line Verification: Case Studies and Experiments. In IEEE Int. Conf. on Software Engineering, pages 482--491, 2013. Google ScholarDigital Library
- E. Bodden, T. Tolêdo, M. Ribeiro, C. Brabrand, P. Borba, and M. Mezini. SPLLIFT: Statically Analyzing Software Product Lines in Minutes Instead of Years. In ACM SIGPLAN Conf. on Programming Language Design and Implementation, pages 355--364, 2013. Google ScholarDigital Library
- C. Brabrand, M. Ribeiro, T. Tolêdo, J. Winther, and P. Borba. Intraprocedural dataflow analysis for software product lines. In Transactions on Aspect-Oriented Software Development X, pages 73--108. 2013. Google ScholarDigital Library
- C. Brabrand, M. Ribeiro, T. Tolêdo, and P. Borba. Intraprocedural Dataflow Analysis for Software Product Lines. In Int. Conf. on Aspect-Oriented Software Development, pages 13--24, 2012. Google ScholarDigital Library
- L. Cardelli. Program fragments, linking, and modularization. In ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages, pages 266--277, 1997. Google ScholarDigital Library
- S. Chen and M. Erwig. Counter-Factual Typing for Debugging Type Errors. In ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages, pages 583--594, 2014. Google ScholarDigital Library
- S. Chen and M. Erwig. Guided Type Debugging. In Int. Symp. on Functional and Logic Programming, LNCS 8475, pages 35--51, 2014.Google Scholar
- S. Chen, M. Erwig, and E. Walkingshaw. An Error-Tolerant Type System for Variational Lambda Calculus. In ACM Int. Conf. on Functional Programming, pages 29--40, 2012. Google ScholarDigital Library
- S. Chen, M. Erwig, and E. Walkingshaw. Extending Type Inference to Variational Programs. ACM Trans. on Programming Languages and Systems, 36(1):1:1--1:54, 2014. Google ScholarDigital Library
- A. Classen, P. Heymans, P.-Y. Schobbens, and A. Legay. Symbolic Model Checking of Software Product Lines. In IEEE Int. Conf. on Software Engineering, pages 321--330, 2011. Google ScholarDigital Library
- A. Classen, P. Heymans, P.-Y. Schobbens, A. Legay, and J.-F. Raskin. Model Checking Lots of Systems: Efficient Verification of Temporal Properties in Software Product Lines. In IEEE Int. Conf. on Software Engineering, pages 335--344, 2010. Google ScholarDigital Library
- P. C. Clements and L. M. Northrop. Software Product Lines: Practices and Patterns. Addison-Wesley, Boston, 2001. Google ScholarDigital Library
- M. Cordy, A. Classen, G. Perrouin, P.-Y. Schobbens, P. Heymans, and A. Legay. Simulation-based Abstractions for Software Product-Line Model Checking. In IEEE Int. Conf. on Software Engineering, pages 672--682, 2012. Google ScholarDigital Library
- L. Damas and R. Milner. Principal Type Schemes for Functional Programming Languages. In ACM Symp. on Principles of Programming Languages, pages 207--208, 1982. Google ScholarDigital Library
- B. Delaware, W. Cook, and D. Batory. Product lines of theorems. In ACM SIGPLAN Int. Conf. on Object-Oriented Programming, Systems, Languages, and Applications, pages 595--608, 2011. Google ScholarDigital Library
- B. Delaware, W. R. Cook, and D. Batory. Fitting the Pieces Together: A Machine-Checked Model of Safe Composition. In ACM SIGSOFT Int. Symp. on the Foundations of Software Engineering, pages 243--252, 2009. Google ScholarDigital Library
- M. Erwig and E. Walkingshaw. The Choice Calculus: A Representation for Software Variation. ACM Trans. on Software Engineering and Methodology, 21(1):6:1--6:27, 2011. Google ScholarDigital Library
- P. Gazzillo and R. Grimm. SuperC: Parsing all of C by Taming the Preprocessor. In ACM SIGPLAN Conf. on Programming Language Design and Implementation, pages 323--334, 2012. Google ScholarDigital Library
- C. Hankin and D. Métayer. A type-based framework for program analysis. In Static Analysis Symposium, LNCS 864, pages 380--394. 1994.Google ScholarCross Ref
- N. Heintze. Control-flow analysis and type systems. In Static Analysis Symposium, LNCS 983, pages 189--206. 1995. Google ScholarDigital Library
- C. Kästner, S. Apel, T. Thüm, and G. Saake. Type Checking Annotation-Based Product Lines. ACM Trans. on Software Engineering and Methodology, 21(3):14:1--14:39, 2012. Google ScholarDigital Library
- C. Kästner, P. G. Giarrusso, T. Rendel, S. Erdweg, K. Ostermann, and T. Berger. Variability-aware parsing in the presence of lexical macros and conditional compilation. In ACM SIGPLAN Int. Conf. on Object-Oriented Programming, Systems, Languages, and Applications, pages 805--824, 10 2011. Google ScholarDigital Library
- C. Kästner, K. Ostermann, and S. Erdweg. A Variability-Aware Module System. In ACM SIGPLAN Int. Conf. on Object-Oriented Programming, Systems, Languages, and Applications, pages 773--792, 2012. Google ScholarDigital Library
- J. Liebig, A. von Rhein, C. Kästner, S. Apel, J. Dörre, and C. Lengauer. Large-Scale Variability-Aware Type Checking and Dataflow Analysis. Technical Report MIP-1212, Fakultät für Informatik und Mathematik, Universität Passau, 2012.Google Scholar
- J. Liebig, A. von Rhein, C. Kästner, S. Apel, J. Dörre, and C. Lengauer. Scalable analysis of variable software. In Foundations of Software Engineering, pages 81--91, 2013. Google ScholarDigital Library
- M. Naik and J. Palsberg. A type system equivalent to a model checker. ACM Trans. on Programming Languages and Systems, 30(5):29:1--29:24, 2008. Google ScholarDigital Library
- F. Nielson, H. R. Nielson, and C. Hankin. Principles of program analysis. Springer, 1999. Google ScholarDigital Library
- M. Odersky, M. Sulzmann, and M. Wehr. Type Inference with Constrained Types. Theory and Practice of Object Systems, 5(1):35--55, 1999. Google ScholarDigital Library
- J. Palsberg. Type-based analysis and applications. In ACM SIGPLAN-SIGSOFT Workshop on Program Analysis for Software Tools and Engineering, pages 20--27, 2001. Google ScholarDigital Library
- D. L. Parnas. On the design and development of program families. IEEE Trans. on Software Engineering, 2(1):1--9, 1976. Google ScholarDigital Library
- F. Pottier. A versatile constraint-based type inference system. Nordic J. of Computing, 7(4):312--347, Dec. 2000. Google ScholarDigital Library
- F. Pottier and V. Simonet. Information flow inference for ML. ACM Trans. on Programming Languages and Systems, 25(1):117--158, 2003. Google ScholarDigital Library
- F. Prost. A Formalization of Static Analyses in System F. In Automated Deduction CADE-16, pages 252--266. 1999. Google ScholarDigital Library
- T. Reps, S. Horwitz, and M. Sagiv. Precise interprocedural dataflow analysis via graph reachability. In ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages, pages 49--61, 1995. Google ScholarDigital Library
- J. A. Robinson. A machine-oriented logic based on the resolution principle. Journal of the ACM, 12(1):23--41, Jan. 1965. Google ScholarDigital Library
- V. Simonet. An extension of HM(X) with bounded existential and universal data-types. In ACM SIGPLAN Int. Conf. on Functional Programming, pages 39--50, 2003. Google ScholarDigital Library
- V. Simonet and F. Pottier. A constraint-based approach to guarded algebraic data types. ACM Trans. on Programming Languages and Systems, 29(1):1--38, 2007. Google ScholarDigital Library
- P. J. Stuckey and M. Sulzmann. A theory of overloading. In ACM SIGPLAN Int. Conf. on Functional Programming, pages 167--178, 2002. Google ScholarDigital Library
- M. Sulzmann, M. Müller, and C. Zenger. Hindley/Milner style type systems in constraint form. Research Report ACRC-99-009, University of South Australia, School of Computer and Information Science, 1999.Google Scholar
- T. Thüm, I. Schaefer, S. Apel, and M. Hentschel. Family-based deductive verification of software product lines. In International Conference on Generative Programming and Component Engineering, pages 11--20, 2012. Google ScholarDigital Library
- J. B. Wells. Typability and Type Checking in System F Are Equivalent and Undecidable. Annals of Pure and Applied Logic, 98:111--156, 1998.Google ScholarCross Ref
Index Terms
- Type-based parametric analysis of program families
Recommendations
Type-based parametric analysis of program families
ICFP '14Previous research on static analysis for program families has focused on lifting analyses for single, plain programs to program families by employing idiosyncratic representations. The lifting effort typically involves a significant amount of work for ...
Finding suitable variability abstractions for lifted analysis
Special Issue on Extended Versions of Papers Presented at FM 2016AbstractMany software systems are today variational: they are built as program families or Software Product Lines. They can produce a potentially huge number of related programs, known as products or variants, by selecting suitable configuration options (...
An approach to safely evolve program families in C
SPLASH '14: Proceedings of the companion publication of the 2014 ACM SIGPLAN conference on Systems, Programming, and Applications: Software for HumanityThe C preprocessor is widely used to handle variability and solve portability issues in program families. In this context, developers normally use tools like GCC and Clang. However, these tools are not variability-aware, i.e., they preprocess the code ...
Comments