|About the Book|
More applications are designed as server programs, many of which are expected to run 24x7. Ensuring the quality of error handling code is vital to the high availability that are expected from them. However, error handling code is hard to explore,MoreMore applications are designed as server programs, many of which are expected to run 24x7. Ensuring the quality of error handling code is vital to the high availability that are expected from them. However, error handling code is hard to explore, review and test, for the reason that (1) it is scattered all over the system, often not at all organized- (2) it is impossible to trigger during runtime by simply manipulating the program inputs or configurations.-The goal of our research is to provide tools that helps programmers explore, review and test error handling code in a structured way to boost the system availability and maintainability.-The contributions of this thesis are the following: (1) Definition of the problem of white box robustness testing for Java-based server applications, including an exception def-catch coverage metric and testing frame-work. (2) A new program analysis that enables the above mentioned testing methodology, which 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 (i) identifies the exception-flow def-uses to be tested in this manner, (ii) determines the kind of fault to be requested at a program point, and (iii) finds appropriate locations for code instrumentation. (3) Empirical studies of several variants of the analysis algorithms, which demonstrate increased precision in obtaining good test coverage on a set of server benchmarks. These studies include aggregate accuracy and timing information, with discussions of cases in which static analysis is difficult. (4) A program understanding tool that visualizes discovered exception-flow def-use links. (5) A novel program analysis that discovers semantic relations between the exception-flow def-uses links and combines them into chains, in order to reveal the propagation path of an exception from its original to its final handler. (6) An initial case study of testing exception propagation chains.