Composition Assessment Metrics for CBSE

M. Goulao, F. Brito e Abreu
31st EUROMICRO Conference on Software Engineering and Advanced Applications  
Objective: Formal definition of composition assessment metrics for CBSE, using an extension of the CORBA Component Model metamodel as the ontology for describing component assemblies. Method: Representation of a component assembly as an instantiation of the extended CORBA Component Model metamodel. The resulting meta-objects diagram can then be traversed using Object Constraint Language clauses. These clauses are a formal and executable definition of the metrics that can be used to assess
more » ... y attributes from the assembly and its constituent components. Results: Formal definition of context-dependent metrics that cover the different composition mechanisms provided by the CORBA Component Model and can be used to compare alternative component assemblies; a metamodel extension to capture the topology of component assemblies. Conclusion: Providing a formal and executable definition of metrics for CORBA component assemblies is an enabling precondition to allow for independent scrutiny of such metrics which is, in turn, essential to increase practitioners confidence on predictable quality attributes. ComponentInstanceDef ProvidedInterfacesUsed(): Set(InterfaceDef) = self.facetConnector.facetPort.providesDef. provides->asSet() PActual(): Integer = self.ProvidedInterfacesUsed()->size() ProvidedInterfaces(): Set(InterfaceDef) = self.componentDef.facet.provides->asSet() PTotal(): Integer = self.ProvidedInterfaces()->size() PSU(): Real = self.PActual()/self.PTotal() RequiredInterfacesAvailable(): Set(InterfaceDef) = self.receptacleConnector.receptaclePort. usesDef.uses->asSet() RActual(): Integer = self.RequiredInterfacesAvailable()->size() RequiredInterfaces(): Set(InterfaceDef) = self.componentDef.receptacle.uses->asSet() RTotal(): Integer = self.RequiredInterfaces()->size() RSU(): Real = self.RActual()/self.RTotal() ComponentInstanceDef EmittedEventsConsumed(): Set(EmitsDef) = self.emitterConnector.emitsPort. emitsDef->asSet() EmittedEventsConsumedCount(): Integer = self.EmittedEventsConsumed()->size() EmittedEvents(): Set (EmitsDef)= self.componentDef.emits EmittedEventsCount(): Integer = self.EmittedEvents()->size() PublishedEventsConsumed(): Set (PublishesDef)= self.publisherConnector.publishesPort. publishesDef->asSet() PublishedEventsConsumedCount(): Integer = self.PublishedEventsConsumed()->size() PublishedEvents(): Set (PublishesDef)= self.componentDef.publishes PublishedEventsCount(): Integer = self.PublishedEvents()->size() FedConsumedEvents(): Set(ConsumesDef) = self.emitConsumerConnector.consumesPort. consumesDef->union( self.publishConsumerConnector. consumesPort.consumesDef)->asSet() FedConsumedEventsCount(): Integer = self.FedConsumedEvents()->size() ConsumedEvents(): Set(ConsumesDef) = self.componentDef.consumes ConsumedEventsCount(): Integer = self.ConsumedEvents()->size()
doi:10.1109/euromicro.2005.19 fatcat:wmnbq3wkwrgobc24l5ch2aslnu