Robustness testing of Java server applications

This paper presents a new compile-time analysis that enables a testing methodology for white-box coverage testing of error recovery code (i.e., exception handlers) of server applications written in Java, using compiler-directed fault injection. The analysis allows compiler-generated instrumentation to guide the fault injection and to record the recovery code exercised. (An injected fault is experienced as a Java exception.) The analysis 1) identifies the exception-flow "def-uses" to be tested in this manner, 2) determines the kind of fault to be requested at a program point, and 3) finds appropriate locations for code instrumentation. The analysis incorporates refinements that establish sufficient context sensitivity to ensure relatively precise def-use links and to eliminate some spurious def-uses due to demonstrably infeasible control flow. A runtime test harness calculates test coverage of these links using an exception def-catch metric. Experiments with the methodology demonstrate the utility of the increased precision in obtaining good test coverage on a set of moderately sized server benchmarks.

[1]  Farnam Jahanian,et al.  ORCHESTRA: A Fault Injection Environment for Distributed Systems , 1996 .

[2]  David E. Culler,et al.  SEDA: an architecture for well-conditioned, scalable internet services , 2001, SOSP.

[3]  W. C. Carter,et al.  Reliability modeling techniques for self-repairing computer systems , 1969, ACM '69.

[4]  Ken Arnold,et al.  The Java Programming Language, Second Edition , 1999 .

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

[6]  Richard G. Hamlet,et al.  Foundations of software testing: dependability theory , 1994, SIGSOFT '94.

[7]  Saurabh Sinha,et al.  Analysis and Testing of Programs with Exception Handling Constructs , 2000, IEEE Trans. Software Eng..

[8]  Elaine J. Weyuker,et al.  An Applicable Family of Data Flow Testing Criteria , 1988, IEEE Trans. Software Eng..

[9]  Martin P. Robillard,et al.  Static analysis to support the evolution of exception structure in object-oriented systems , 2003, TSEM.

[10]  Barbara G. Ryder,et al.  Precise and practical flow analysis of object-oriented software , 2003 .

[11]  Rajiv Gupta,et al.  Refining data flow information using infeasible paths , 1997, ESEC '97/FSE-5.

[12]  Jong-Deok Choi,et al.  Efficient and precise modeling of exceptions for the analysis of Java programs , 1999, PASTE '99.

[13]  Glenford J. Myers,et al.  Art of Software Testing , 1979 .

[14]  Ravishankar K. Iyer,et al.  Analysis and Modeling of Correlated Failures in Multicomputer Systems , 1992, IEEE Trans. Computers.

[15]  James M. Stichnoth,et al.  Practicing JUDO: Java under dynamic optimizations , 2000, PLDI '00.

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

[17]  Nevin Heintze,et al.  Set-based analysis of ML programs , 1994, LFP '94.

[18]  Richard P. Martin,et al.  Mendosis: A SAN-based Fault Injection Test-bed for the Construction of Highly Available Network Services , 2001 .

[19]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

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

[21]  Ken Arnold,et al.  The Java Programming Language , 1996 .

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

[23]  Barbara G. Ryder Dimensions of Precision in Reference Analysis of Object-Oriented Programming Languages , 2003, CC.

[24]  Barbara G. Ryder,et al.  Parameterized object sensitivity for points-to analysis for Java , 2005, TSEM.

[25]  Lori L. Pollock,et al.  Characterization and automatic identification of type infeasible call chains , 2002, Inf. Softw. Technol..

[26]  Claude Caci,et al.  Testing object-oriented systems , 2000, SOEN.

[27]  Jean Arlat,et al.  Fault Injection and Dependability Evaluation of Fault-Tolerant Systems , 1993, IEEE Trans. Computers.

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

[29]  Kang G. Shin,et al.  DOCTOR: an integrated software fault injection environment for distributed real-time systems , 1995, Proceedings of 1995 IEEE International Computer Performance and Dependability Symposium.

[30]  Richard G. Hamlet,et al.  Testing Programs with the Aid of a Compiler , 1977, IEEE Transactions on Software Engineering.

[31]  Richard P. Martin,et al.  Compiler-directed program-fault coverage for highly available Java internet services , 2003, 2003 International Conference on Dependable Systems and Networks, 2003. Proceedings..

[32]  Dong Tang,et al.  An approach to measuring and assessing dependability for critical software systems , 1997, Proceedings The Eighth International Symposium on Software Reliability Engineering.

[33]  James Goodwill Apache Jakarta Tomcat , 2002, Apress.

[34]  William H. Sanders,et al.  Fault injection based on a partial view of the global state of a distributed system , 1999, Proceedings of the 18th IEEE Symposium on Reliable Distributed Systems.

[35]  Soo-Mook Moon,et al.  Efficient Java exception handling in just‐in‐time compilation , 2004, Softw. Pract. Exp..

[36]  Saurabh Sinha,et al.  Criteria for testing exception-handling constructs in Java programs , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[37]  Alessandro Orso,et al.  Automated support for development, maintenance, and testing in the presence of implicit flow control , 2004, Proceedings. 26th International Conference on Software Engineering.

[38]  Erik R. Altman,et al.  Efficient Java exception handling in just-in-time compilation , 2000, JAVA '00.

[39]  Robert O'Callahan,et al.  Generalized aliasing as a basis for program analysis tools , 2001 .

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

[41]  J WeyukerElaine,et al.  Selecting Software Test Data Using Data Flow Information , 1985 .

[42]  Jacob A. Abraham,et al.  FERRARI: a tool for the validation of system dependability properties , 1992, [1992] Digest of Papers. FTCS-22: The Twenty-Second International Symposium on Fault-Tolerant Computing.

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

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

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

[46]  Elaine J. Weyuker,et al.  Selecting Software Test Data Using Data Flow Information , 1985, IEEE Transactions on Software Engineering.

[47]  Atanas Rountev,et al.  Static and dynamic analysis of call chains in java , 2004, ISSTA '04.

[48]  Daniel P. Siewiorek,et al.  FIAT-fault injection based automated testing environment , 1988, [1988] The Eighteenth International Symposium on Fault-Tolerant Computing. Digest of Papers.

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

[50]  Richard P. Martin,et al.  Using Fault Injection and Modeling to Evaluate the Performability of Cluster-Based Services , 2003, USENIX Symposium on Internet Technologies and Systems.

[51]  Farnam Jahanian,et al.  Testing of fault-tolerant and real-time distributed systems via protocol fault injection , 1996, Proceedings of Annual Symposium on Fault Tolerant Computing.

[52]  Chen Fu,et al.  Testing of java web services for robustness , 2004, ISSTA '04.

[53]  Lori L. Pollock,et al.  Type infeasible call chains , 2001, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation.

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

[55]  Laurie Hendren,et al.  Soot---a java optimization framework , 1999 .

[56]  Kwangkeun Yi,et al.  An uncaught exception analysis for Java , 2004, J. Syst. Softw..

[57]  Toshio Nakatani,et al.  A study of exception handling and its dynamic optimization in Java , 2001, OOPSLA '01.

[58]  Hong Zhao,et al.  Stress-Based and Path-Based Fault Injection , 1999, IEEE Trans. Computers.

[59]  James M. Bieman,et al.  Using fault injection to increase software test coverage , 1996, Proceedings of ISSRE '96: 7th International Symposium on Software Reliability Engineering.

[60]  Richard P. Martin,et al.  Using fault injection to evaluate the performability of cluster-based services , 2002 .

[61]  Alessandro Orso,et al.  Automated Support for Development, Maintenance, and Testing in the Presence of Implicit Control Flow , 2004, ICSE.