Eiffel: the language
A syntactic approach to type soundness
Information and Computation
A behavioral notion of subtyping
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Practical Approach to Programming With Assertions
IEEE Transactions on Software Engineering
Object-oriented software construction (2nd ed.)
Object-oriented software construction (2nd ed.)
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
JML (poster session): notations and tools supporting detailed design in Java
OOPSLA '00 Addendum to the 2000 proceedings of the conference on Object-oriented programming, systems, languages, and applications (Addendum)
Behavioral contracts and behavioral subtyping
Proceedings of the 8th European software engineering conference held jointly with 9th ACM SIGSOFT international symposium on Foundations of software engineering
The Java Language Specification
The Java Language Specification
Computer
Designing an Object-Oriented Programming Language with Behavioural Subtyping
Proceedings of the REX School/Workshop on Foundations of Object-Oriented Languages
iContract - The Java(tm) Design by Contract(tm) Tool
TOOLS '98 Proceedings of the Technology of Object-Oriented Languages and Systems
Adding Contracts to Java with Handshake
Adding Contracts to Java with Handshake
Behavioral contracts and behavioral subtyping
Proceedings of the 8th European software engineering conference held jointly with 9th ACM SIGSOFT international symposium on Foundations of software engineering
An analyzable annotation language
OOPSLA '02 Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Adding Design by Contract to the Ada Language
Ada-Europe '02 Proceedings of the 7th Ada-Europe International Conference on Reliable Software Technologies
Runtime verification of .NET contracts
Journal of Systems and Software - Special issue on: Component-based software engineering
Cona: aspects for contracts and contracts for aspects
OOPSLA '04 Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Method redefinition: ensuring alternative behaviors
Information Processing Letters
How the design of JML accommodates both runtime assertion checking and formal verification
Science of Computer Programming - Formal methods for components and objects pragmatic aspects and applications
Lightweight object specification with typestates
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
Early detection of JML specification errors using ESC/Java2
Proceedings of the 2006 conference on Specification and verification of component-based systems
Design by Contract to Improve Software Vigilance
IEEE Transactions on Software Engineering
Enhancing modular OO verification with separation logic
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Crosscutting invariant and an efficient checking algorithm using program slicing
ACM SIGPLAN Notices
Contracts for aspect-oriented design
Proceedings of the 2008 AOSD workshop on Software engineering properties of languages and aspect technologies
An Experimental Evaluation of Documentation Methods and Reusability
ICSR '08 Proceedings of the 10th international conference on Software Reuse: High Confidence Software Reuse in Large Systems
Software hardening: a research agenda
Proceedings for the 1st workshop on Script to Program Evolution
Ensuring Consistency between Designs, Documentation, Formal Specifications, and Implementations
CBSE '09 Proceedings of the 12th International Symposium on Component-Based Software Engineering
Method redefinition---ensuring alternative behaviors
Information Processing Letters
Composite contract enforcement in hierarchical component systems
SC'07 Proceedings of the 6th international conference on Software composition
Contracts for first-class classes
Proceedings of the 6th symposium on Dynamic languages
Falling back on executable specifications
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Toward a unified object model for cyber-physical systems
Proceedings of the 2nd Workshop on Software Engineering for Sensor Network Applications
Contracts as pairs of projections
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
Access permission contracts for scripting languages
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
JML’s rich, inherited specifications for behavioral subtypes
ICFEM'06 Proceedings of the 8th international conference on Formal Methods and Software Engineering
The spec# programming system: an overview
CASSIS'04 Proceedings of the 2004 international conference on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices
A methodology for writing class contracts
SOFSEM'05 Proceedings of the 31st international conference on Theory and Practice of Computer Science
A contracting system for hierarchical components
CBSE'05 Proceedings of the 8th international conference on Component-Based Software Engineering
Design by contract for aspects, by aspects
Proceedings of the eleventh workshop on Foundations of Aspect-Oriented Languages
Behavioral interface specification languages
ACM Computing Surveys (CSUR)
Client-aware checking and information hiding in interface specifications with JML/ajmlc
Proceedings of the 2013 companion publication for conference on Systems, programming, & applications: software for humanity
Contracts for First-Class Classes
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
Checking pre- and post-conditions of procedures and methods at runtime helps improve software reliability. In the procedural world, pre- and post-conditions have a straightforward interpretation. If a procedure's pre-condition doesn't hold, the caller failed to establish the proper context. If a post-condition doesn't hold, the caller failed to establish the proper context. If a post-condition doesn't hold, the procedure failed to compute the expected result. In the object-oriented world, checking pre- and post-conditions for methods, often called contracts in this context, poses complex problems. Because methods may be overridden, it is not sufficient to check only pre- and post-conditions. In addition, the contract hierarchy must be checked to ensure that the contracts on overridden methods are properly related to the contracts on overriding methods. Otherwise, a class hierarchy may violate the substitution principle, that is, it may no longer be true that an instance of a class is substitutable for objects of the super-class. In this paper, we study the problem of contract enforcement in an object-oriented world from a foundational perspective. More specifically, we study contracts as refinements of types. Pushing the analogy further, we state and prove a contract soundness theorem that captures the essential properties of contract enforcement. We use the theorem to illustrate how most existing tools suffer from a fundamental flaw and how they can be improved.