Chapter written by J.-M. Jézéquel,
Univ. Rennes I & INRIA, France
In domains such as automotive or avionics, real-time and embedded systems are getting ever more software intensive. The software cannot any longer be produced as a single chunk, and engineers are contemplating the possibility of componentizing it. Various definitions exist for the notion of software component. We focus here on Szyperski's [SZY 02]: “a software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can he deployed independently and is subject to composition by third-party”. In this vision, any composite application is viewed as a particular configuration of components, selected at build-time and configured or re-configured at run-time. A software component only exhibits its provided or required interfaces. This defines basic contracts between components allowing one to properly wire them.
In real-time and embedded systems' however, we have to take into account many extra-functional aspects, such as timeliness, memory consumption, power dissipation, reliability, performances, and generally speaking Quality of Service (QoS). These aspects can also be seen as contracts between the system, its environment and its users. These contracts must obviously be propagated down to the component level. One of the key desiderata in component-based development for embedded ...