The tendency towards faster and more cost-efficient software development of growing complexity increases the appeal of reusable software components. The assembly of existing components to large software systems, however, is only economic and easy as long as a flawless integration of pre-developed components can be presumed. Due to the insufficient expressive power of current component description languages, today this cannot be taken for granted, yet.
In fact, current component repositories usually contain information limited to the syntactical nature of component interfaces, but hardly including the semantics of the services offered, or the application context of the component usage observed so far. This lack of crucial information makes it impossible to discover or timely remove during component integration such incompatibilities as may result from discrepancies between the components or between a component and its new application context.
The main objective of this project is the development of a technique supporting the automatic and fault-free integration of software components. Up to now, the following tasks were concluded:
Classification of potential inconsistencies:
To determine type and amount of data to be included into an extended description language, inconsistencies occurring at component interfaces were analyzed and classified. The results of this task were published at the international conference PSAM7/ESREL'04.
Definition of the extended description language: The identified inconsistency classes were analyzed with respect to the information required to detect and tolerate them. The language UML 2.0 was extended such as to allow the description of components by way of the functions they offer at their interface resp. require from other components, as well as by their internal behavior. An UML-profile named CCI (Consistent Component Integration) was defined for this purpose. In addition, in order to ensure desired properties of the application planned, legal system executions may be described by appropriate constraints, for instance in terms of component states or of message flows between components. A tool was implemented checking given component descriptions for compliance with the defined CCI profile.
Handling inconsistencies in the integrated system:
A tool was developed enabling the automatic detection of pre-defined inconsistency classes for a given set of components and an application to be implemented. If required, the tool generates component wrappers triggering different fault tolerance measures, depending on the inconsistency class detected, e. g. dynamic conversion of parameters at the interfaces or delay of temporarily illegal messages.
Subproject A: "Traceability and verifiability of non-functional requirements in component-based software systems" (in cooperation with Continental TEMIC)
This subproject examined the extent to which selected non-functional requirements may be verified by information transfer from application level to component level. The approach developed was implemented and applied for a real application of the automotive industrial sector.
Subproject B: "Recording and analysis of functional and non-functional meta-data by means of a repository"
In order to capture existing components as comprehensively as possible, in this subproject a concept was derived for describing functional (e.g. procedures and parameters) and non-functional (e.g. timing behaviour, operational experience, test coverage) component aspects and integrated into the existing component description language. In accordance with the identified meta-data, search functions were implemented enabling a systematic search for appropriate, reusable components in repositories.
Subproject C: "Configuration and development of component-based software systems on the basis of repositories"
This subproject dealt with the development and the implementation of a technique for describing the configuration of component-based software systems and for automatically generating programme code (so-called glue-code) needed to link components. Different linking strategies were examined (e.g. Broker, direct linking or hybrid forms) and analyzed with regard to the resulting system properties, especially performance and failure probability.
The subprojects mentioned above resulted in the following overall concept for reliable integration, which is based on own or commercially available tools and model converters:
1. Application of a tool for modelling components and systems in UML: by means of the modelling tool Poseidon all stereotypes necessary for CCI models are provided by use of a generic template project.
2. Import of the descriptions and conversion into CCI meta-model: via the implemented tools the models created with Poseidon are imported, interpreted as instances of the CCI meta-model and stored in a meta-data repository (MDR).
3. Check of application descriptions and creation of tolerance mechanisms: The CCI model of components and application, stored in the MDR, is checked for inconsistencies arisen during integration. In case inconsistencies are detected, individual wrappers are generated for specific components as well as for central application-specific elements supervising the state of the whole system as well as the interaction of all system components.
4. Creation of complete application from component code and protective mechanisms: the protective mechanisms generated in step 3 are glued together with the component codes, thus resulting in a complete application, ready for delivery and execution.
A promising evolution of present research will address the automated localisation of suitable pre-developed components via functional and non-functional properties, ideally on the basis of semantic pattern recognition. Functionally equivalent, yet different components identified in such a way might be applied for the purpose of systematic supporting fault tolerance, as well.