Exceptional situations and program reliability
Open Access
- 14 March 2008
- journal article
- research article
- Published by Association for Computing Machinery (ACM) in ACM Transactions on Programming Languages and Systems
- Vol. 30 (2), 1-51
- https://doi.org/10.1145/1330017.1330019
Abstract
It is difficult to write programs that behave correctly in the presence of run-time errors. Proper behavior in the face of exceptional situations is important to the reliability of long-running programs. Existing programming language features often provide poor support for executing clean-up code and for restoring invariants. We present a data-flow analysis for finding a certain class of exception-handling defects: those related to a failure to release resources or to clean up properly along all paths. Many real-world programs violate such resource usage rules because of incorrect exception handling. Our flow-sensitive analysis keeps track of outstanding obligations along program paths and does a precise modeling of control flow in the presence of exceptions. Using it, we have found over 1,300 exception handling defects in over 5 million lines of Java code. Based on those defects we propose a programming language feature, the compensation stack, that keeps track of obligations at run time and ensures that they are discharged. We present a type system for compensation stacks that tracks collections of obligations. Finally, we present case studies to demonstrate that this feature is natural, efficient, and can improve reliability.Keywords
Funding Information
- National Science Foundation (CCR-9875171CCR-0085949CCR-0081588CCR-0234689CCR-0326577CCR-00225610)
This publication has 44 references indexed in Scilit:
- SABERACM SIGSOFT Software Engineering Notes, 2004
- ESPACM SIGPLAN Notices, 2002
- Complexity of points-to analysis of Java in the presence of exceptionsIEEE Transactions on Software Engineering, 2001
- Enforcing high-level protocols in low-level softwareACM SIGPLAN Notices, 2001
- Analysis and testing of programs with exception handling constructsIEEE Transactions on Software Engineering, 2000
- Service combinators for Web computingIEEE Transactions on Software Engineering, 1999
- Memory management with explicit regionsACM SIGPLAN Notices, 1998
- Fault tolerance under UNIXACM Transactions on Computer Systems, 1989
- Guardians and Actions: Linguistic Support for Robust, Distributed ProgramsACM Transactions on Programming Languages and Systems, 1983
- Exception handlingCommunications of the ACM, 1975