In this context, we focus on the design and implementation of dependable quality requirements, and their incorporation in the description of a software architecture in an explicit and structured manner. In our proposed software architecture, we are primarily concerned with the provision of features that would facilitate the design of collaborations that are expected to cope with faults. For instance, in complex concurrent dependable applications it is interesting to incorporate explicitly in the description of their software architecture the notion of coordination to support error handling and coordinated recovery between multiple interacting components.
More specifically, we propose three architectural styles for developing dependable collaboration-based software designs based on three notions: (i) the idealized fault-tolerant component model, (ii) the collaboration/role interaction model, and (iii) computational reflection together with a set of design patterns that focus on providing design solutions for implementing fault tolerance techniques, namely, error handling, coordinated recovery and software redundancy. Computational reflection defines a meta-level architecture that is composed of a base level where the application's logic is implemented and a meta level where meta components are responsible for implementing the application's quality requirements in a way that it is transparent to application designers. Application designers can apply the notion of separation of concerns and concentrate their attention on the functional requirements, abstracting from the quality requirements.