Abstract:
This paper discusses the understanding of quality attributes and their application to the design of a software architecture. We present an approach to characterizing quality attributes and capturing architectural patterns that are used to achieve these attributes. For each pattern, it is important not only how the pattern achieves a quality attribute goal but also what impact the pattern has on other attributes. We embody this investigation of quality into the Attribute Driven Design Method for designing software architecture.
Introduction:
The software architecture community generally believes that quality attributes (such as performance, usability, security, reliability and modifiability) of a software system are primarily achieved through attention to software architecture. This means that the design decisions embodied by a software architecture are strongly influenced by the need to achieve quality attribute goals. We have embarked on an effort to identify and codify architectural patterns that are primitive with respect to the achievement of quality attributes. We call this set of architectural patterns attribute primitives. We embody this relationship in a design method for software architecture. In this paper, we provide a status report of this work. In brief, the status is that we have a characterization for six important attributes, we have a list and an organization for attribute primitives to achieve these attributes, and we have modified the Attribute Driven Design method (ADD) to utilize both the attribute characterizations and the attribute primitives. What we have yet to accomplish is to document the attribute primitives in a consistent fashion. Product lines exist in all domains. Each domain has its own requirements for availability, modifiability, performance, security, or usability. The requirement that there be a product line adds additional complexity to the design task but does not remove the necessity for designing to achieve all of the normal quality attributes for a domain.
This work is a natural extension of the work of various communities:
The patterns community believes that there are fundamental architectural patterns that underlie the design of most systems.
Attribute communities have explored the meaning of their particular attribute and come up with standard techniques for achieving their desired attribute.
This work is also similar in spirit and was motivated by the work we have previously reported on Attribute Based Architecture Styles (ABASs) [10]. We believe that architectural styles are compositions of the architectural patterns we are discussing here. By understanding these patterns primitives we believe that we will be better able to understand ABASs and to make the generation of ABASs an easier process.
Codifying a sufficiently rich set of attribute primitives requires a systematic and relatively complete description of the relationship between software architecture and quality attributes. However, this is difficult because:
Ambiguous definitions. The lack of a precise definition for many quality attributes inhibits the exploration process. Attributes such as reliability, availability, and performance have been studied for years and have generally accepted definitions. Other attributes, such as modifiability, security, and usability, do not.
Overlapping definitions. Attributes are not discrete or isolated. For example, availability is an attribute in its own right. However, it is also a subset of security (because denial of service attack could limit availability) and usability (because users require maximum uptime). Is portability a subset of modifiability or an attribute in its own right? Both relationships exist in quality attribute taxonomies.
Granularity. Attribute analysis does not lend itself to standardization. There are hundreds of patterns at different levels of granularity, with different relationships among them. As a result, it is difficult to decide which situations or patterns to analyze for what quality, much less to categorize and store that information for reuse.
Attribute specificity. Analysis techniques are specific to a particular attribute. Therefore, it is difficult to understand how the various attribute-specific analyses interact.
Whole books have been written on individual attributes such as performance and reliability. Clearly, it is not our goal to simply reproduce this work. It is our goal to develop some unifying principles that are general to all attributes and codify these principles in a way that empowers architects to perform informed architecture design and analysis. In order to achieve our goal three fundamental questions must be answered:
How are quality attributes characterized so that we will know whether the attribute primitives achieve them, and
What are the attribute primitives?
How are attribute primitives realized in a design process?
We begin the paper by briefing reviewing similar work, and then we discuss the philosophy of our characterization of quality attributes and the particular set of architectural patterns that we choose. We close by presenting the current state of the ADD method as a method for realizing quality attributes within software architectures.
Conclusion:
We have presented our vision of a characterization of quality attributes, a characterization of attribute primitives to achieve qualities and a design method that is based on these characterizations. Our basic premise is that architectural design is driven by quality requirements.
As we have said, this is work in progress. Our current status is that we have a list of general scenarios for six attributes, we have a provisional list of attribute primitives and we have the ADD method. We have been validated through comparison with scenarios generated independently. We have documented several attribute primitives and are currently engaged in documenting additional ones.