Abstract

Current advances in software engineering practice involve the adoption of a component- based approach in developing large-scale, complex systems. The component-based paradigm provides better structuring of systems and facilitates systematic software reuse. However, complex interactions between components, especially in concurrent and distributed applications, pose greater challenges. This thesis provides a formal framework for managing the dependencies between components, in terms of their interactions in a concurrent setting. In our approach, composites and single components are represented by a component signature, which identifies a component, and a vector language, also called component language, which describes the behaviour of a component. This language-based representation of component behaviour makes it possible to capture concurrency at both the individual component level and the composition level. The interpretation of concurrency is that of a non-interleaving model, with the notion of causal independence lifted to vectors. We describe how component languages are obtained from scenario-based specifications, typically used in an industrial context. Based on the order structure of a component language, we identify implicit or missing interactions which represent potentially faulty or simply unthought scenarios. This excludes pathological behaviour, the source of which can be traced back to inconsistencies in the sequence diagrams of the scenario specification such as race conditions, and this gives a characterisation of well-behaved components. Components are put together in our approach by matching required and provided interfaces in terms of the respective sequences of events. This builds on the concept of parallel composition in process algebras. We show that the properties that define well-behaved components are preserved under composition in the resulting composite. Well-behaved components give rise to discrete behavioural presentations which can capture concurrency and simultaneity between event occurrences on component interfaces. Well-behaved components are also associated with automata whose transition structure reflects the concurrency in the corresponding component language. This state-based description of component behaviour is graphically represented using state diagrams. This formal framework for components has been related to more conventional approaches to software design, as exemplified by strong connections to UML. It can aid designers in determining the complete set of intended behaviours before generating state models of the scenario-based specifications.