Designing robust Java programs with exceptions
SIGSOFT '00/FSE-8 Proceedings of the 8th ACM SIGSOFT international symposium on Foundations of software engineering: twenty-first century applications
Exception handling: issues and a proposed notation
Communications of the ACM
Journal of Systems and Software
Supporting evolution of interface exceptions
Advances in exception handling techniques
Software reliability: The role of programmed exception handling
Proceedings of an ACM conference on Language design for reliable software
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
IEEE Transactions on Software Engineering
EJFlow: taming exceptional control flows in aspect-oriented programming
Proceedings of the 7th international conference on Aspect-oriented software development
Exception analysis and points-to analysis: better together
Proceedings of the eighteenth international symposium on Software testing and analysis
Interprocedural exception analysis for C++
Proceedings of the 25th European conference on Object-oriented programming
Exception handling: a field study in Java and .NET
ECOOP'07 Proceedings of the 21st European conference on Object-Oriented Programming
Hi-index | 0.00 |
The Java programming language allows developers to specify the exception interface of a method using the throws clause. This mechanism supports static checking that is coherent with a statically-typed language. However, it is known to have limitations. In particular, throws clauses hinder understandability and maintainability due to their scattered nature and lack of information about the source of an exception, the place where it is handled, and everything in between. In this paper, we propose a simple form of exception interface specification, called Exception Propagation Channel (EPC), that provides a global view of exception flow and complements Java's exception interfaces. Our approach stems from the observation that throws clauses scale well for methods that throw exceptions to large numbers of direct callers (horizontally), but not for long chains of method calls (vertically). We present an extension to the Java language, called EPiC-Java that incorporates the proposed approach as well as a prototype compiler and a reengineering tool for that extension. Application of the proposed approach to three open-source systems resulted in a considerable reduction in the number of throws clauses and a comparatively smaller number of EPCs, thus suggesting that maintainability is improved.