Fragment class analysis for testing of polymorphism in Java software

Testing of polymorphism in object-oriented software may require coverage of all possible bindings of receiver classes and target methods at call sites. Tools that measure this coverage need to use class analysis to compute the coverage requirements. However, traditional whole-program class analysis cannot be used when testing incomplete programs. To solve this problem, we present a general approach for adapting whole-program class analyses to operate on program fragments. Furthermore, since analysis precision is critical for coverage tools, we provide precision measurements for several analyses by determining which of the computed coverage requirements are actually feasible for a set of subject components. Our work enables the use of whole-program class analyses for testing of polymorphism in partial programs, and identifies analyses that potentially are good candidates for use in coverage tools.

[1]  Jens Palsberg,et al.  Scalable propagation-based call graph construction algorithms , 2000, OOPSLA '00.

[2]  David Grove,et al.  A framework for call graph construction algorithms , 2001, TOPL.

[3]  David F. Bacon,et al.  Fast static analysis of C++ virtual function calls , 1996, OOPSLA '96.

[4]  Frank Tip,et al.  Practical extraction techniques for Java , 2002, TOPL.

[5]  Robert V. McDaniel,et al.  Testing the polymorphic interactions between classes , 1994 .

[6]  Mei-Hwa Chen,et al.  Testing object-oriented programs - an integrated approach , 1999, Proceedings 10th International Symposium on Software Reliability Engineering (Cat. No.PR00443).

[7]  Olin Shivers,et al.  Control-flow analysis of higher-order languages of taming lambda , 1991 .

[8]  Hong Zhu,et al.  Software unit test coverage and adequacy , 1997, ACM Comput. Surv..

[9]  Laurie J. Hendren,et al.  Practical virtual method call resolution for Java , 2000, OOPSLA '00.

[10]  S. Siegel,et al.  Nonparametric Statistics for the Behavioral Sciences , 2022, The SAGE Encyclopedia of Research Design.

[11]  Ole Agesen Constraint-Based Type Inference and Parametric Polymorphism , 1994, SAS.

[12]  Guy L. Steele,et al.  Java Language Specification, Second Edition: The Java Series , 2000 .

[13]  Chrislain Razafimahefa A Study Of Side-Effect Analyses For Java , 1999 .

[14]  A. Jefferson Offutt,et al.  Criteria for testing polymorphic relationships , 2000, Proceedings 11th International Symposium on Software Reliability Engineering. ISSRE 2000.

[15]  Donglin Liang,et al.  Evaluating the precision of static reference analysis using profiling , 2002, ISSTA '02.

[16]  Donglin Liang,et al.  Extending and evaluating flow-insenstitive and context-insensitive points-to analyses for Java , 2001, PASTE '01.

[17]  Gail E. Kaiser,et al.  Adequate testing and object-oriented programming , 1990 .

[18]  Amer Diwan,et al.  Simple and effective analysis of statically-typed object-oriented programs , 1996, OOPSLA '96.

[19]  A. Rountev,et al.  Fragment class analysis for testing of polymorphism in Java software , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[20]  Andrew A. Chien,et al.  Precise Concrete Type Inference for Object-Oriented Languages , 1994, OOPSLA.

[21]  Claes Wohlin,et al.  Experimentation in software engineering: an introduction , 2000 .

[22]  Alessandro Orso Integration Testing of Object-Oriented Software , 1998 .

[23]  Barbara G. Ryder,et al.  Dataflow analysis of software fragments , 2002 .

[24]  Gregg Rothermel,et al.  Performing data flow testing on classes , 1994, SIGSOFT '94.

[25]  Robert V. Binder,et al.  Testing Object-Oriented Systems: Models, Patterns, and Tools , 1999 .

[26]  Markus Mock,et al.  Dynamic points-to sets: a comparison with static analyses and potential applications in program understanding and optimization , 2001, PASTE '01.

[27]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[28]  Lars Ole Andersen,et al.  Program Analysis and Specialization for the C Programming Language , 2005 .

[29]  David Grove,et al.  Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis , 1995, ECOOP.

[30]  David Grove,et al.  Fast interprocedural class analysis , 1998, POPL '98.

[31]  Barbara G. Ryder,et al.  Points-to analysis for Java using annotated constraints , 2001, OOPSLA '01.

[32]  Ondrej Lhoták,et al.  Scaling Java Points-to Analysis Using SPARK , 2003, CC.

[33]  Edward V. Berard,et al.  Testing Object-Oriented Software , 2021, TOOLS.

[34]  Monica S. Lam,et al.  An Efficient Inclusion-Based Points-To Analysis for Strictly-Typed Languages , 2002, SAS.

[35]  David Grove,et al.  Call graph construction in object-oriented languages , 1997, OOPSLA '97.

[36]  Barbara G. Ryder,et al.  Relevant context inference , 1999, POPL '99.

[37]  Roger T. Alexander,et al.  Testing the polymorphic relationships of object-oriented programs , 2001 .

[38]  Robert V. Binder,et al.  Testing object‐oriented software: a survey , 1996 .

[39]  Barbara G. Ryder,et al.  Parameterized object sensitivity for points-to and side-effect analyses for Java , 2002, ISSTA '02.

[40]  Laurie J. Hendren,et al.  Optimizing Java Bytecode Using the Soot Framework: Is It Feasible? , 2000, CC.

[41]  Ole Agesen The Cartesian Product Algorithm: Simple and Precise Type Inference Of Parametric Polymorphism , 1995, ECOOP.

[42]  Jens Palsberg,et al.  Object-oriented type inference , 1991, OOPSLA '91.

[43]  Robert L. Glass,et al.  Science and substance: a challenge to software engineers , 1994, IEEE Software.

[44]  Barbara G. Ryder,et al.  Data-flow-based Testing of Object-Oriented Libraries , 1999 .

[45]  Frank Tip,et al.  Extracting library-based object-oriented applications , 2000, SIGSOFT '00/FSE-8.

[46]  Erik Ruf,et al.  Effective synchronization removal for Java , 2000, PLDI '00.