The Turing programming language
Communications of the ACM
Eiffel: the language
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
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
Forcing behavioral subtyping through specification inheritance
Proceedings of the 18th international conference on Software engineering
Object-oriented software construction (2nd ed.)
Object-oriented software construction (2nd ed.)
A technique for software module specification with examples
Communications of the ACM
Contract Soundness for object-oriented languages
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
The Java Language Specification
The Java Language Specification
Making Components Contract Aware
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
Contracts: From Analysis to C++ Implementation
TOOLS '99 Proceedings of the Technology of Object-Oriented Languages and Systems
A Framework for Detecting Interface Violations in Component-Based Software
ICSR '98 Proceedings of the 5th International Conference on Software Reuse
Adding Contracts to Java with Handshake
Adding Contracts to Java with Handshake
Contract Soundness for object-oriented languages
OOPSLA '01 Proceedings of the 16th 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
Interface Compatibility Checking for Software Modules
CAV '02 Proceedings of the 14th International Conference on Computer Aided Verification
Contract-Checking Wrappers for C++ Classes
IEEE Transactions on Software Engineering
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
Enhancing component specification by behavior description: the SOFA experience
WISICT '05 Proceedings of the 4th international symposium on Information and communication technologies
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
A historical perspective on runtime assertion checking in software development
ACM SIGSOFT Software Engineering Notes
Relationally-parametric polymorphic contracts
Proceedings of the 2007 symposium on Dynamic languages
Enhancing modular OO verification with separation logic
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Contracts for aspect-oriented design
Proceedings of the 2008 AOSD workshop on Software engineering properties of languages and aspect technologies
A Lightweight Container Architecture for Runtime Verification
Runtime Verification
Enhancing Semantic Web Services with Inheritance
ISWC '08 Proceedings of the 7th International Conference on The Semantic Web
A behavioural notion of subtyping for object-oriented programming in SPARK95
Ada-Europe'03 Proceedings of the 8th Ada-Europe international conference on Reliable software technologies
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Always-available static and dynamic feedback
Proceedings of the 33rd International Conference on Software Engineering
On contract satisfaction in a higher-order world
ACM Transactions on Programming Languages and Systems (TOPLAS)
Contracts as pairs of projections
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
Hi-index | 0.00 |
Component-based software manufacturing has the potential to bring division-of-labor benefits to the world of software engineering. In order to make a market of software components viable, however, producers and consumers must agree on enforceable software contracts. In this paper, we show how to enforce contracts if components are manufactured from class and interface hierarchies. In particular, we focus on one style of contract: pre- and post-conditions. Programmers annotate class and interface methods with pre- and post-conditions and the run-time system checks these conditions during evaluation. These contracts guarantee that methods are called properly and provide appropriate results. In procedural languages, the use of pre- and post-condition contracts is well-established and studies have demonstrated its value. In object-oriented languages, however, assigning blame for pre- and post-condition failures poses subtle and complex problems. Specifically, assigning blame for malformed class and interface hierarchies is so difficult that none of the existing contract monitoring tools correctly assign blame for these failures. In this paper, we show how to overcome these problems in the context of Java. Our work is based on the notion of behavioral subtyping.