Quality Attribute Design Primitives
AcknowledgementsWe have discussed these ideas with a large number of our colleagues. We would like to thank Bob Ellison, Peter Feiler, Bonnie E. John, Rick Kazman, Judy Stafford, Nick Graham, John Lehoczky, Andy Moore, Robert Nord, Linda Northrop, Greg Phillips, and Bill Wood for their contributions to the evolution of these ideas.
Preface
This technical note presents a snapshot of work in progress. In making it available, we are looking to the software community for support. Your reaction and input will help us advance the concepts in this paper. In the future, we will publish similar snapshots as this work evolves.
[Top] [Abstract] [Figures]
1 Introduction
Over the last 30 years, a number of researchers and practitioners have examined how systems achieve software quality attributes. Boehm and the International Organization for Standardization (ISO) introduced taxonomies of quality attributes [Boehm 78], [ISO 91]. Bass, Bergey, Klein, and others have analyzed the relationship between software architecture and quality attributes [Bass 98], [Bergey 01], [Klein 99a], [Klein 99b]. Various attribute communities have mathematically explored the meaning of their particular attributes [Kleinrock 76], [Lyu 96]. The patterns community has codified recurring and useful patterns in practice [Gamma 95]. However, no one has systematically and completely documented the relationship between software architecture and quality attributes. The lack of documentation stems from several causes:
- 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 have generally accepted 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.
- 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.
- Analysis techniques are specific to a particular attribute. Therefore, it is difficult to understand how the various attribute-specific analyses interact.
The staff members of the Software Engineering Institute (SEI) documented the relationship between architecture and quality attributes through their work with attribute-based architecture styles (ABASs) [Klein 99a]. However, this effort did not treat the third bullet in the above list.
Notwithstanding the difficulties, systematically codifying the relationship between architecture and quality attributes has several obvious benefits:
- a greatly enhanced architectural design process – for both generation and analysis. During design generation, an architect could reuse existing analyses and determine tradeoffs explicitly rather than on an ad hoc basis. Experienced architects do this intuitively but even they would benefit from codified experience. For example during analysis, architects could recognize a codified structure and know its impact on quality attributes.
- a method for manually or dynamically reconfiguring architectures to provide specified levels of a quality attribute. Understanding the impact of quality attributes on architectural mechanisms will enable architects to replace one set of mechanisms for another when necessary.
- the potential for third-party certification of components and component frameworks. Once the relationship between architecture and quality attributes is codified, it is possible to construct a testing protocol that will enable third party certification.
For all these reasons, the idea of documenting the relationship between architecture and quality attributes is a worthy goal. This technical note takes another step toward achieving this goal by looking for the quality attribute design primitives that comprise ABASs and architectures.
[Top] [Abstract] [Figures]
2 Background
A widely held premise of the software architecture community is that architecture determines quality attributes. This raises several questions:
- Is this premise true and why do we believe that quality attribute behavior and architecture are so intrinsically related?
- Can we pinpoint key architectural decisions that affect specific quality attributes?
- Can we understand how architectural decisions serve as focal points for tradeoffs between several quality attributes?
To address these questions, we will build on the concept of an architectural mechanism introduced by Booch [Booch 96]. By definition, an architectural mechanism is a "structure whereby objects collaborate to provide some behavior that satisfies a requirement of the problem." We are specifically interested in those mechanisms that significantly affect quality attribute behavior and have sufficient content for analysis.
For example, encapsulation is a mechanism for achieving modifiability. Replication is a mechanism for achieving reliability. We contend that these architectural mechanisms allow architects to explore and document the relationship between software architectural styles and quality attributes and perhaps allow for a more methodical use of the ABAS notion.
By codifying mechanisms, architects can identify the choices necessary to achieve quality attribute goals. This, in turn, will set a foundation for further software architecture design and analysis. In fact, this work was motivated by the need for such foundations for the Architecture Tradeoff Analysis MethodSM (ATAM SM) and the Attribute-Driven Design (ADD) method [Kazman 00], [Bachmann 00].
Of course, there are many challenges. One challenge is to identify the correct collection of mechanisms at the proper level of abstraction. Another challenge is to understand how to combine mechanisms into styles and styles into systems, while combining the analyses associated with each. We hope that the reader’s input will help us to overcome these challenges and reach our goals in a timely manner.
[Top] [Abstract] [Figures]
3 The Relationship Between Software Architecture and Quality Attributes
In essence, software architectural design, like any other design process, consists of making decisions. These decisions involve
- separating one set of responsibilities from another
- duplicating responsibilities
- allocating responsibilities to processors
- determining how discrete elements of responsibilities cooperate and coordinate
By examining these decisions and their results, we can clarify the relationship between quality attributes and software architecture. Even now, however, we can draw two conclusions:
- At this level of design, much can be said about many quality attributes.
- Very little, if anything, must be known about functionality in order to draw quality attribute conclusions.
Let’s consider various attributes at a high level. Performance depends on processes, their allocation to processors, communication paths between them, and other factors. Reliability implies redundancy strategies. Modifiability requires dependency chains. In each case, architectural design decisions are necessary to achieve the respective attribute. These decisions require very little knowledge of functionality.
Now let’s consider a software architectural decision. Suppose we separate one collection of responsibilities from another. As a result of this decision, we can ask a number of quality attribute questions: What is the impact on modifiability? What are the performance implications? Does this separation have any effect on availability, security, or usability?
All of these questions (couched in a more precise fashion) can be asked and, in some cases, answered as a result of the decision. Thus, every decision embodied in a software architecture can potentially affect quality attributes. At the very least, each decision raises questions about its affect on the attributes. Often these questions cannot be answered by examining the decision, but are answered in the context of additional decisions.
We originally separated the collections of responsibilities for a reason. For example, we might have wanted to support later modifications or to allocate separate portions to different processors to increase performance. We might have wanted to separate computations to improve reliability. Our decision could have been for other reasons. In each case, we can argue how the decision supports some goal. Frequently, that goal is a particular quality attribute. Thus, whenever we make a software architectural decision that affects quality attributes, there are two consequences:
- A rationale is formed to explain why the decision helps achieve one (or more) quality attributes.
- Questions are raised about the impact of the decision on the other attributes—questions that often must be answered in the context of other decisions.
A rationale is important not only because it provides the reasoning for why the decision helps to achieve the attribute, but it will be helpful in understanding the consequences of changing the decision. We call these questions about other attributes "side effects." Before we can analyze the total system for all of the qualities, we must understand these side effects. Applying this to architectural mechanisms, we say that the mechanism achieves some facet of a quality attribute based on a specified reason, while raising questions as side effects of its use.
To summarize, software architecture is closely coupled to how well a system achieves various quality attributes. We can examine portions of the software architecture and either substantiate how each portion achieves a particular quality attribute or generate specific questions it raises about other attributes.
In the next section, we’ll look at quality attributes and discuss representing them through the concept of a general scenario.
[Top] [Abstract] [Figures]
4 Quality Attributes and General Scenarios
Attribute communities have a natural tendency to expand. This is not surprising because many of the attributes are intertwined. However, at this point, we are not trying to define an attribute by deciding what is within its purview. For example, we do not care whether portability is an aspect of modifiability or whether reliability is an aspect of security. Rather, we want to articulate what it means to achieve an attribute by identifying the yardsticks by which it is measured or observed. To do this, we introduce the concept of a "general scenario." Each general scenario consists of
- the stimuli that requires the architecture to respond
- the type of system elements involved in the response
- the measures used to characterize the architecture’s response
For example, a performance general scenario is: "Periodic messages arrive at a system. On the average, the system must respond to the message within a specified time interval." This general scenario describes "events arriving" and being serviced with some "latency." A general scenario for modifiability states "changes arriving" and the "propagation of the change through the system." A security general scenario combines "threats" with a response of "repulsion, detection, or recovery." A usability general scenario ties "the user" together with a response of "the system performs some action."
If an architect or community wants to characterize a particular attribute, a general scenario can be developed to describe it. This addresses the first two problems that we claimed inhibited codifying the relationship between architecture and quality attributes; that is, attribute definitions and their relationships.1
General scenarios can apply to any system. For example, we can discuss a change to system platform without any knowledge of the system, because every system has a platform. We also can discuss a change to the representation of a data producer (in a producer/consumer relationship) without knowing anything about the type of data or the functions carried out by the producer. This is not the same as saying that every general scenario applies to every system.
For example, "the user desires to cancel an operation" is one usability general scenario stimulus. This is not the case for every system. For some systems, cancellation is not appropriate. Thus, when applying general scenarios to a particular system, the first step is filtering the universe of general scenarios to determine those of relevance. This is essentially the process of determining attribute-specific requirements.
Controlling (or at least significantly affecting) at least one measure of an attribute is the task of an architectural mechanism.
[Top] [Abstract] [Figures]
5 Architectural Mechanisms
Earlier we stated that architectural mechanisms directly contribute to quality attributes. Examples of architectural mechanisms are the data router, caching, and fixed priority scheduling. These mechanisms help achieve specific quality attribute goals as defined by the general scenarios.
- The data router protects producers from additions and changes to consumers and vice versa by limiting the knowledge that producers and consumers have of each other. This affects or contributes to modifiability.
- Caching reduces response time by providing a copy of the data close to the function that needs it. This contributes to performance.
- Fixed priority scheduling interleaves multiple tasks to control response time. This contributes to performance.
Each mechanism is targeted at one or more quality attributes. Also, each mechanism implements a more fundamental strategy to achieve the quality attribute. For example, the data router uses indirection to achieve modifiability. Caching uses replication to achieve performance. Fixed priority scheduling uses pre-emptive scheduling to achieve performance.
We can also extend the list of mechanisms and general scenarios to address a wide range of situations. If we introduce a new general scenario, we may need to introduce new mechanisms that contribute to it. Alternatively, we may discover new mechanisms for dealing with existing general scenarios. In either case, we can describe the new mechanism(s) without affecting any other mechanism.
We believe that architectural mechanisms are, in essence, the design primitives for achieving system quality attribute behavior. The goal of our work is to identify the specific design primitives that elicit quality attributes, then analyze those primitives from the point of view of multiple quality attributes.
5.1 Levels of Abstraction for Mechanisms
Mechanisms exist in a hierarchy of abstraction levels. For example, separation is a mechanism that divides two coherent entities. This represents a high level of abstraction. A more concrete mechanism, and lower level of abstraction, would specify entities, such as separating data from function, function from function, or data from data. In this case, each level has meaning and utility with respect to modifiability.
Increasing detail increases the precision of our analysis. However, because our goal is establishing design primitives, we want to determine the highest level of abstraction that still supports some reasoning.
What qualifies as an analysis? Earlier we stated that, by definition, an architectural mechanism helps achieve quality attribute goals. There must be a reason why the mechanism supports those goals. Articulating the reason becomes our analysis. If we cannot state why a particular mechanism supports a quality attribute goal, then it does not qualify as a mechanism. Choosing the correct level of granularity allows us to examine a property at its most fundamental level.
5.2 Desired Attribute and Side Effects
Earlier we also stated that mechanisms have two consequences. They help general scenarios achieve attributes and they can influence other general scenarios as side effects. Given these two consequences, we need two types of analysis. The first analysis will explain how the architectural mechanism helps the intended general scenario achieve its result.
The second analysis will describe how to refine the general scenario in light of the information provided by the mechanism. This analysis reveals side effects that the mechanism has on the other general scenarios. By referring to the specific mechanism that directly affects an attribute, we can perform a more detailed analysis of the side effect.
Let’s use encapsulation again as our example. We will analyze the modifiability general scenarios that reflect changes in function, environment, or platform. Our analysis states that as long as changes occur inside the encapsulated function (that is, hidden by an interface), the effect of these changes will be limited. If the expected changes cross the encapsulation boundary, the effect of the changes is not limited.
The analysis/refinement for performance general scenarios seeks to determine whether encapsulation significantly affects resource usage of the encapsulated component.
The analysis/refinement for reliability/availability general scenarios asks whether encapsulation significantly affects the probability of failure of the encapsulated component. A more detailed description of the performance or reliability analyses would be found in appropriate performance or reliability mechanism write-ups.
Table 1 shows the relationship between mechanisms and general scenarios. If mechanisms are across the top, and general scenarios are down the left side, then each cell has one of three possibilities.
- the mechanism contributes to this general scenario
- the mechanism has no affect on the general scenario
- the mechanism introduces side effects—questions to be answered by other mechanisms
Later in this note, we will describe mechanism write-ups for one column of this matrix. That is, each write-up will describe the impact of a mechanism on all of the general scenarios. This doesn’t mean that each mechanism will always need a separate section for each general scenario. Rather, we should be able to reason about general scenarios in groups rather than individually.
Table 1. Relationship between Mechanisms and General Scenarios
|
Mechanism 1 |
Mechanism N |
|||||
|
General Scenario 1 |
Analysis |
Side effect |
Does not apply |
Side effect |
Analysis |
Does not apply |
|
N/A |
||||||
|
N/A |
||||||
|
Side effect |
||||||
|
Side effect |
||||||
|
N/A |
||||||
|
N/A |
||||||
|
General Scenario N |
Side effect |
N/A |
N/A |
Analysis |
When describing the analyses to be performed, we group the general scenarios into attribute headings. Thus, in the mechanism template there are sections on modifiability, reliability/ availability, performance, security, and usability. One or more of these is the mechanism’s intended attribute. These attributes are presented prior to the attributes that are side effects of the mechanism.
5.3 Mechanisms vis-à-vis ABASs
Attribute-based architectural styles (ABASs) associate classes of architectures with attribute-specific analysis frameworks [Klein 99a], [Klein 99b]. Because architectural mechanisms are quality attribute design primitives, we should be able to discuss ABASs using these terms. Consider the following examples:
- The publish/subscribe modifiability ABAS consists of the router and registration mechanisms.
- The tri-modular redundancy (TMR) reliability ABAS consists of the (functional) redundancy and (majority) voting mechanisms.
- The SimplexSM reliability ABAS consists of the (analytic) redundancy and (rule-based) voting mechanisms.
While we intend to explore the relationship between ABASs and mechanisms in the future, we can make several observations right now. Both mechanisms and ABASs are attribute-specific design building blocks containing architectural as well as analysis information.
However, ABASs are "bigger" and more concrete than mechanisms. In the above examples, ABASs comprise more than one mechanism. Yet the type of redundancy and voting mechanisms used by TMR are different from those used by Simplex. Mechanisms, by comparison, are intended to be design primitives and should be indivisible. Moreover, our conjecture is that there are relatively fewer mechanisms than ABASs since there are many ways in which mechanisms can be combined into ABASs. Also, it is our sense from performing architecture evaluations using the ATAM that practicing architects are more familiar with commonly used mechanisms than ABASs. Terms like "redundancy," "voting," and "router" already tend to be in the practitioner’s vocabulary.
[Top] [Abstract] [Figures]
6 Work Product Templates
So far, we have described two concepts in this note:
- general scenarios that characterize quality attributes
- architectural mechanisms
In this section, we present the templates to document attribute stories and mechanisms and indicate the data that each template section should contain.
To understand how architectural mechanisms achieve quality goals, we must first truly understand quality attributes themselves. An attribute story helps us do just that. It creates operational definitions for quality attributes.
6.1 Attribute Story Template
An attribute story presents the issues associated with an attribute and the mechanisms that could help achieve it. We assume that the architect already knows the material in the attribute story. The story simply acts as a checklist for the designer.
In Section 7, we will present attribute stories for modifiability and performance. Attribute stories for reliability/availability, security, and usability will appear in subsequent versions of this note.
Concepts of <the attribute>
This section describes the attribute including relevant stimuli and typical response measures.
General <attribute> scenarios
This section presents a number of system-independent or general scenarios. General scenarios describe the attributes. These high-level scenarios could apply to any system. Depending on the general scenario, the system can be characterized by mechanisms, modules, or descriptions of the hardware platform.
Strategies for achieving <attribute>
This section describes the basic strategies used to achieve the general scenarios. This sets the foundation for the next section of the template.
Enumeration of mechanisms for achieving <attribute>
This section lists the names and describes the mechanisms used to achieve the attribute. Each mechanism will have its own description. The brief descriptions here serve as a checklist for architects.
6.2 Mechanism Template
A mechanism template provides information the architect needs to reason about a specific mechanism for the five attributes under discussion.
Description of this mechanism
This section describes a particular mechanism.
Analysis of this mechanism
This section describes the strategy that the mechanism used to achieve attribute goals. It also presents an argument that the mechanism does, in fact, support one or more general scenarios. The following sections apply to the attributes whose properties exist as side effects to the mechanism.
Modifiability general scenarios
This section interprets modifiability general scenarios through the prism of the mechanism.
Performance general scenarios
This section interprets performance general scenarios through the prism of the mechanism.
Reliability/Availability general scenarios
This section interprets reliability/availability general scenarios through the prism of the mechanism.
Security general scenarios
This section interprets security general scenarios through the prism of the mechanism.
Usability general scenarios
This section interprets usability general scenarios through the prism of the mechanism.
[Top] [Abstract] [Figures]
7 Attribute Stories
In this section, we present attribute stories for two of the five attributes under discussion.
7.1 The Modifiability StoryConcepts of modifiability
Modifiability is the ability of a system to be changed after it has been deployed. In this case, the stimulus is the arrival of a change request and the response is the time necessary to implement the change. Requests can reflect changes in functions, platform, or operating environment. A request could also modify how the system achieves its quality attributes. These changes can involve the source code or data files. They can be made at compile time or run time.
General modifiability scenarios2
A request arrives to change the functionality of the system. The change can be to add new functionality, to modify existing functionality, or to delete a particular functionality.
The general form for modifiability scenarios is
Time of modification ::= Compile time | run time
Type of modification ::= Add | modify | delete
Target of modification ::= Functionality | platform (hardware, OS, middleware) | environment (interoperate, disconnect, #users), quality attribute
Strategies that achieve modifiability
At compile time, modifiability is achieved through three basic strategies.
- Indirection – Indirection involves inserting a mediator, such as a data router, to allow variation within a particular area of concern. For example, when producers and consumers of data communicate via a mediator, they typically have no direct knowledge of each other. This means that additional producers or consumers could be added without change to the consumers or producers. A virtual device or machine can also serve as a mediator in the indirection strategy.
- Separation – This strategy separates data and function that address different concerns. Since the concerns are separate, we can modify one concern independently of another. Isolating common function is another example of a separation strategy.
- Encoding function into data meta-data and language interpreters – By encoding some function into data and providing a mechanism for interpreting that data, we can simplify modifications that affect the parameters of that data.
At run time, modifiability is achieved using a strategy of dynamic discovery and reconfiguration. This strategy involves discovering the resources or functions that become dynamically available as the system’s environment changes, negotiating for access to those resources, then accessing the resource.
Mechanisms that achieve modifiability
- data router (Also called a data bus or a data distributor) – This intermediary mechanism directs (and possibly transforms) data from producers to consumers. It requires a supporting mechanism to identify producers and consumers.
- data repository – This mechanism stores data for later use.
- virtual machine – This mechanism places an intermediary between function users and producer(s).
- independence of interface from implementation – This mechanism allows architects to substitute different implementations for the same functionality. Interface definition languages (IDLs) are an example of this mechanism.
- interpreter – This mechanism involves encoding function into parameters and more abstract descriptions to allows architects to easily modify them.
- client-server – This mechanism involves providing a collection of services from a central process and allowing other processes to use these services through a fixed protocol.
Concepts of performance
Performance involves adjusting and allocating resources to meet system timing requirements. The stimulus can be any event that requires a response, such as the arrival of a message, the expiration of an interval of time (as signaled by a timer interrupt), the detection of a significant change in the system’s environment, a user input event, etc.
In this situation, the system consists of a collection of processors connected by a network, involving "schedulable entities" such as processes, threads, and messages. Important response measures include
- latency – the amount of time that passes from the event occurrence until the completed response. Average-case latency matters and worst-case latency are variants of latency measures
- throughput – the number of events responded to per unit of time
- precedence – preserving ordering constraints on the responses to events
- jitter – variance in the time interval between response completions
- growth capacity – ability to add load while meeting timing requirements
At a higher level, performance concerns the ability to predictably provide various levels of service (measured in the above terms) under varying circumstances. Performance depends upon the load to the system and the resources available to process the load.
General performance scenarios
The general form of general performance scenarios is
<Events arrive periodically, sporadically or randomly> and must be completed <in the worst-case or on the average> <within a time interval and/or subjected to data loss constraints and/or subjected to throughput constraints and/or constrained by order relative to other event responses and/or adhering to jitter constraints>
A sample of general performance scenarios assuming unchanging resource requirements follows:
We can extend the above general performance scenario template to include cases where the resource requirements change. These cases include
The most general form for a performance scenario considers many or all of the following aspects:
Strategies that achieve performance
Performance is achieved by managing resources (such as CPUs, buses, networks, memory, data, etc.) that affect system response. That is, timing behavior is determined by allocating resources to resource demands, choosing between conflicting requests for resources, and managing resource usage. Therefore, there are three key techniques for managing performance:
Each of these aspects affects the completion time of the response. As a result, each aspect can be viewed as a category of mechanism Mechanisms that achieve performance2
In general, performance can be achieved through resource allocation, resource arbitration, and resource use.
Resource allocation
Resource arbitration Exclusive use
Resource use
8
Sample Mechanisms
In this section, we present two sample mechanisms.
Description of this mechanism
The data router (also called a data bus or a data
distributor) mechanism implements the strategy of data indirection. It inserts a mediator between a data item producer and consumer. By providing a mediator, the data producer has embedded knowledge that it must send the data item to the mediator. The mechanism that the data router uses to recognize consumers for a data item is discussed separately (see data registration). Figure 1 describes this mechanism.
Producers are components that generate messages. Consumers are components that receive messages. It is possible for a component to both produce and consume different types of messages. The router directs messages of particular type to consumers of that type. We do not show the registration mechanism that the data router uses to identify producers and consumers.
Sometimes the data router also converts data. For example, suppose the data producer of a speed measurement supplies it in kilometers per hour and the consumer wishes to receive it in miles per hour. To perform the conversion, the data router must know the units in which the data item is produced and the units that the consumer desires.
Purpose of this mechanism
The data router mechanism reduces the coupling between the data producer and consumer. This simplifies the process of adding new consumers or producers of a single type of data.
The stimulus in the following general scenarios changes function, platform, or environment:
Performance general scenarios
Security general scenarios
Availability/reliability general scenarios
Usability general scenarios
Description of this mechanism
Process scheduling is a common mechanism provided by most operating systems. It automatically interleaves execution of units of concurrency (such as processes and/or threads). Fixed priority scheduling is a uni-processor scheduling policy that prioritizes each process/thread in the system. The scheduler uses this priority to decide which process to execute. It assigns the processor to the highest priority process/thread that is not currently blocked.
Figure 2 presents a module view of a fixed priority scheduler and Figure 3 presents a sequence diagram of a fixed priority scheduler with two tasks. The high-priority task executes until it blocks. The next priority task then executes until the high-priority task is ready to execute again.
Purpose of this mechanism
The purpose of any scheduling mechanism is two-fold:
Fixed priority scheduling allows for a level of predictability that corresponds to the timing estimates associated with the various processing scenarios. This predictability is due to scheduling analysis techniques (such as rate monotonic analysis).
The set of general scenarios addressed by this mechanism are:
<Events arrive periodically or sporadically> and must be completed <in the worst-case > <within a time interval and/or subjected to data loss constraints> <while executing on a uniprocessor>.
We will make two assumptions for this analysis:
Simplest case: As you can see, only two factors affect the latency of a process, (1) its own execution time and (2) preemption due to higher priority processes. Latency can be computed by determining the fixed point of the following expression where,
Ci is the execution time of process
i, the process whose latency is being computed, and
the term with the summation computes the effects of preemption:
Other factors: How are non-preemptable sections accounted for? How are interrupts accounted for? How is operating system overhead accounted for? If the overhead occurs as part of dispatching a process, this extra execution time can be added to the execution of the process. If, in this case, the overhead executes at a higher priority, it can be treated like a new process in a pipeline.
If the overhead occurs semi-regularly and is totally independent of scheduling a specific process, then treat it as an additional periodic process.
What if the operating system doesn’t support a sufficient number of priority levels? Performance considerations
The following questions are specifically relevant to fixed priority scheduling:
Modifiability considerations
In general, any of the performance parameters mentioned in the preceding section might change. Therefore, the following questions could be asked:
Reliability considerations
Security considerations
Usability considerations
9
Future Work
Over the next several months, we hope to complete the attribute stories and mechanism write-ups. In addition, we plan to continue codifying the relationship between architecture and quality attributes. Specifically, we want to address the following tasks:
Bachmann, F.; Bass, L.; Chastek, G.; Donohoe, P. & Peruzzi, F. The Architecture Based Design Method (CMU/SEI-2000-TR-001 ADA375851). Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 2000. Bass, L.; Clements, P. & Kazman, R. Software Architecture in Practice. Reading, MA: Addison Wesley Longman, 1998. Bergey, J.; Barbacci, M. & Wood, W. Using Quality Attribute Workshops to Evaluate Architectural Design Approaches in a Major System Acquisition: A Case Study (CMU/SEI-2000-TN-010). Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 2001. Boehm, B. et al. Characteristics of Software Quality. New York: Elsevier North-Holland Publishing Company, Inc., 1978. Booch, G. Object Solutions: Managing the Object-Oriented Project. Reading, MA: Addison Wesley Longman, 1996. Gamma, E.; Helm, R.; Johnson, R. & Vlissides, J. Design Patterns. Reading, MA: Addison Wesley Longman, 1995. International Organization for Standardization (ISO), "Information Technology – Software Product Evaluation – Quality Characteristics and Guidelines for Their Use," ISO/IEC 9126, 1996 Kazman, R.; Klein, M. & Clements, P. ATAM: Method for Architecture Evaluation CMU/SEI-2000-TR-004 ADA382629. Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 2000. Klein, M.; Kazman, R.; Bass, L.; Carriere, S.J.; Barbacci, M. & Lipson, H. "Attribute-Based Architectural Styles," 225-243. Proceedings of the First Working IFIP Conference on Software Architecture (WICSA1). San Antonio, TX: February 1999.
Klein, M. & Kazman, R. Attribute-Based Architectural Styles (CMU/SEI-99-TR-022 ADA371802). Pittsburgh, PA: Software Engineering Institute, Carnegie Mellon University, 1999. Kleinrock, L; Queuing Systems; NY: Wiley, 1976. Lyu, M. R., editor in chief; Handbook of Software Reliability Engineering, New York: McGraw Hill; Los Alamitos, Calif.: IEEE Computer Society Press, c1996.
REPORT DOCUMENTATION PAGE
Form Approved
OMB No. 0704-0188
Public reporting burden for this collection of information is estimated to average 1 hour per response, including the time for reviewing instructions, searching existing data sources, gathering and maintaining the data needed, and completing and reviewing the collection of information. Send comments regarding this burden estimate or any other aspect of this collection of information, including suggestions for reducing this burden, to Washington Headquarters Services, Directorate for information Operations and Reports, 1215 Jefferson Davis Highway, Suite 1204, Arlington, VA 22202-4302, and to the Office of Management and Budget, Paperwork Reduction Project (0704-0188), Washington, DC 20503. 1. agency use only 2. report date
December 2000
3. report type and dates covered
Final
4. title and subtitle
Quality Attribute Design Primitives
5. funding numbers
C — F19628-00-C-0003
6. author(s)
Len Bass, Mark Klein, Felix Bachmann
7. performing organization name(s) and address(es)
Software Engineering Institute
8. performing organization
CMU/SEI-2000-TN-017
9. sponsoring/monitoring agency name(s) and address(es)
HQ ESC/XPK
10. sponsoring/monitoring
ESC-TR-99-024
11. supplementary notes
12.a distribution/availability statement
Unclassified/Unlimited, DTIC, NTIS
12.b distribution code 13. abstract
This report focuses on the quality attribute aspects of architectural mechanisms. An architectural mechanism is "a structure whereby objects collaborate to provide some behavior that satisfies a requirement of the problem" [Booch 96]. This report addresses mechanisms that significantly affect quality attribute behavior and have sufficient content for analysis. Codifying such mechanisms will enable architects to identify the choices necessary to achieve quality attribute goals. This, in turn, will set a foundation for further software architectural design and analysis.
14. subject terms
15. number of pages
16. Price Code
17. security classification
UNCLASSIFIED
18. security classification
UNCLASSIFIED
19. security classification
UNCLASSIFIED
20. limitation of abstract
UL
NSN 7540-01-280-5500
Preemptive
[Top] [Abstract]
[Figures]
Figure 1. Data Router
Figures in this file are displayed in a separate browser
window. This window will remain open to display figures in this file,
although it might be hidden behind other browser windows.
8.2
Fixed Priority Scheduling
Figure 2. Fixed Priority Scheduler
Figures in this file are displayed in a separate browser
window. This window will remain open to display figures in this file,
although it might be hidden behind other browser windows.
Figure 3. Sequence Diagram for a Fixed Priority Scheduler
Figures in this file are displayed in a separate browser
window. This window will remain open to display figures in this file,
although it might be hidden behind other browser windows.
In this simple case, the processes are the only sources of execution time, the processes are preemptable by higher priority processes, and no pipelines exist in the topology.
How are pipelines analyzed?
A pipeline is an ordered sequence of schedulable entities. That is, the nth element in the sequence is blocked until the n-1st element has been completely executed. The key to analyzing a pipeline (assume it is the ith pipeline) is to identify the lowest priority process (LowPi) in the pipeline. Other pipelines are then placed into sets depending whether they have processes whose priorities are greater than or equal to LowPi and whether the higher priority processes are at the beginning of the pipeline or not. Each pipeline in which all processes have priorities greater than LowPi can preempt more than once. (Call this the H set.) Each pipeline that starts at a higher priority and then decreases to a lower priority can preempt once. (Call this the HL set) Of all of the pipelines that start at a lower priority than LowPi and then increase to a higher priority than LowPi, only one can have a delaying effect. (Call this the LH set.)
Add a term in the above equation which is equal to the execution time of the longest non-preemptable section.
Depending on when the interrupt is reenabled, treat it either as a high-priority process (reenabled at the end of the interrupt service routine) or as an HL pipeline (reenabled after some lower priority execution takes place).
This depends on whether the overhead is directly associated with the scheduling of a process, whether it is associated with handling some other OS function, and whether the overhead occurs at a higher priority (for example, in a non-preemptable section).
When a process is assigned the same priority as another process (which would have been assigned a lower priority if there were sufficient priority levels), assume that this now-equal priority process can preempt it.
[Top] [Abstract]
[Figures]
[Top] [Abstract]
[Figures]
10 References
1
Note that even though we advocate defining attributes through general
scenarios, attribute names convey meaning and we use them, as appropriate, to
define useful categories.
2
Note that while our ultimate goal is to be relatively comprehensive, we make
no claim of being close to comprehensive in this paper.
[Top] [Abstract]
[Figures]
Carnegie Mellon University
Pittsburgh, PA 15213
report number
5 Eglin Street
Hanscom AFB, MA 01731-2116
agency report number
42
of report
of this page
of abstract
Standard Form 298 (Rev. 2-89)
Prescribed by ANSI Std. Z39-18 298-102
[Top] [Abstract]
[Figures]