In this paper we argue that taking QoS into account during the design of distributed object systems significantly influences design and implementation decisions. Late consideration of QoS aspects will often lead to increased development and maintenance costs as well as systems that fail to meet user expectations.
We have proposed a language, called QML, that will allow developers to explicitly deal with QoS as they specify interfaces. In this paper we show how QML can be used for QoS specification in class model and interface designs of distributed object systems. QML allows QoS specifications to be separated from interfaces but associated with uses and implementations of services. We propose a refinement mechanism that allows reuse and customization of QoS contracts. This refinement mechanism also allows us to deal with the interaction between QoS specification and interface inheritance; thus we truly support object-oriented design. We have also described how we can determine whether one specification satisfies and other with conformance checking. Finally, QML allows QoS specification at a fine-grained level---operation arguments and return values---that we believe is necessary in many applications and for many QoS dimensions.
Although this paper focused on the usage of QML in the context of software design, we intend to use it for the management of QoS in general. As an example, based on defined contracts and profiles, we intend to emit programming language definitions that can be used to construct concrete QoS parameters. Such parameters are used to offer and require QoS characteristics at the application programming interface level.
Our experience suggests that the concepts and language proposed in this paper will provide a sound foundation for future QoS specification languages and integration of such languages with general object-oriented specification and design languages.