A contract is a general concept for characterizing and regulating cooperation in the architecture. A contract is an agreement that governs the cooperation and embodies the obligation and expectation associated with cooperation. Needless to say, agreement by members of the distributed system to a contract, enables cooperation to take place.
The contract based approach to software development includes two pieces. The contract first specifies what the consumer must do and secondly, the contract specifies what the supplier will provide. The contract does not specify how the supplier and consumer will fulfill the contract. There is not much support from commercial programming languages for contract concepts with Eiffel [#!Eiffel:1992!#] being one of the few exceptions.
The contract is an abstraction of the behavior of the system, the interactions under constraints, and the interface. The contract defines the obligations, permissions, and prohibitions of the elements in the system.
A contract can be placed on many different kinds of elements. These include dagents, connections, conversations, interface, services, servers, resources, the environment, functions, and procedures.
A contract might include constraints on the bandwidth and latency. Traditionally, these are measurements associated with data through a channel, but these metrics can be used to measure how many times per second a service can be evoked (the generalized bandwidth) and the time it takes before the first service returns an answer (the generalized latency). These constraints might include minimum, maximum, and average expectations.