The availability, modifiability, performance, and security requirements
for a system are difficult both to capture and achieve. Use cases
are well recognized as a means for capturing functional requirements
but are not appropriate for the specification of non-functional
requirements. Achieving a design that satisfies these requirements
is even more difficult In this tutorial, we present recent work
in both of these areas. We present a characterization of non-functional
requirements for the four quality attributes listed. We also present
architectural patterns that are used to achieve these qualities.
Our characterization is based on the concept of "quality scenario"
where each scenario includes a stimulus and an expected response
to that stimulus. We present a set of quality scenarios that have
been validated against scenarios seen in the "wild" and
discuss the concepts behind these scenarios. Explanations of how
particular architectural patterns achieve these requirements will
also be given.