Software Architecture: Some Insights

SOFTWARE ARCHITECTURE OVERVIEW
(selected sections from Software Architecture in Practice, by Len Bass, Paul Clements, and Rick Kazman)

Systems are built to satisfy an organization's requirements (or assumed requirements in the case of shrink-wrapped products), and these requirements determine the extent to which a system must meet performance targets, be highly available, interoperate with other systems, or be designed for long lifetimes. These properties of a system are constrained by the system's software architecture; or, to put it anther way, the desire to achieve these properties influences the design choices made by a software architect.

A software architecture is the development product that gives the highest return on investment with respect to quality, schedule, and cost. This is because an architecture appears early in a product's lifetime. Getting it right sets the stage for everything to come in the system's life: development, integration, testing, and modification. Getting it wrong means that the fabric of the system is wrong, and it cannot be fixed by weaving in a few new threads or pulling out a few existing ones, which often causes the entire fabric to unravel. Also, analyzing architectures is inexpensive, compared with other development activities. Thus, architectures give a high return on investment partially because decisions made for the architecture have substantial downstream consequences and because checking and fixing an architecture is relatively inexpensive.

The architectural view of a system is an abstract view that distills away details of implementation, algorithm, and data representation and concentrates on the behavior and interaction of "black-box" components. A software architecture is developed as the first step toward designing a system that has a collection of desired properties.

The software architecture of a program or computing system is the structure or structures of the system, which comprise software components, the externally visible properties of those components, and the relationships among them.

"Externally visible" properties refers to those assumptions other components can make of a component, such as its provided services, performance characteristics, fault handling, shared resource usage, and so on. The architecture must abstract away some information from the system (otherwise there is no point looking at the architecture; we are simply viewing the entire system) and yet provide enough information to be a basiss for analysis, decision making, and hence risk reduction.

The architecture embodies information about how the components interact with each other. This means that architecture specifically omits certain information about components that does not pertain to their interaction. Thus, an architecture is foremost an abstraction of a system that suppresses details of components that do not affect how they use, are used by relate to, or interact with other components.

The software architecture of a system is the earliest artifact that enables the priorities among competing concerns to be analyzed, and it is the artifact that manifests the concerns as the system qualities. The trade-offs between performance and security, between maintainability and reliability, and between the cost of the current development effort and the cost of future developments are all manifested in the architecture.

Almost never are the properties required by the business and enterprise goals consciously understood, let alone fully articulated. Indeed, even customer requirements are seldom documented completely. However, it is important for architects to know and understand the kinds of constraints on the project as early as possible. Therefore, architects must identify and actively engage the stakeholders to solicit their needs and expectations. Without such active engagement, the stakeholders will, at some point, engage the architects to explain why each proposed architecture is unacceptable, thus delaying the project and idling workers. Early engagement allows the architects to understand the constraints of the task, to manage expectations, and to negotiate priorities. It is important that the architects understand the nature, source, and priority of these constraints. This places the architects in a better position to make trade-offs when conflicts among competing constraints arise, as they inevitably will. It should be apparent that the architects need more than just technical skills. Continual explanations to one stakeholder or another will be required to explain the chosen priorities of different properties and why particular stakeholders are not having all of their expectations satisfied. Thus, for an effective architect, diplomacy, negotiation, and communication skills are essential.

ARCHITECTURE-BASED PROCESS STEPS

The activities involved in creating a software architecture, using that architecture to realize a design, and then implementing or managing the evolution of a target system or application:

WHAT MAKES A "GOOD" ARCHITECTURE

There is no such thing as an inherently good or bad architecture. Architectures are either more or less fit for some stated purpose. Architectures can in fact be evaluated, but only in the context of specific goals.

Structural Recommendations

Process Recommendations

ARCHITECTURES AND QUALITY ATTRIBUTES

There are two broad categories of quality attributes against which a system can be measured (and, in particular, can be measured at the architectural level):

Quality must be considered at all phases of design, implementation, and deployment, but different qualities manifest themselves differently during these phases. For example, many aspects of the quality of Usability are not architectural; making the user interface clear and easy to use is primarily a matter of getting the details correct. Should you provide a radio button or a check box? What screen layout is most intuitive? What typeface is most clear? Although these details matter tremendously to the end user and influence Usability, they are not architectural because they are almost always encapsulated within a single component. This localization affects Modifiability but not Usability.
System Quality Attribute Architectural in Nature? Architectural Issues
Performance Yes Intercomponent communication; dividing functionality so as to exploit parallelism
Security Yes Specialized components, such as secure kernels or authentication servers
Availability Yes Fault tolerance with decundant components, controlling component interaction
Functionality No Interaction with other quality attributes
Usability Yes (No) Modifiability helps to achieve; achievingproper information flow; efficiency related to performance
Modifiability Yes Modularized, encapsulating components
Portability Yes Portability layer
Reusability Yes Loose coupling amount components
Integrability Yes Compatible interconnection mechanisms; consistent component interfaces; uses relation allows incremental builds
Testability Yes Modularized, encapsulating components; uses relation allows incremental builds

The message is:

There are there classes of quality attributes:


Conceptual Integrity (a la Fred Brooks)

"I will contend that conceptual integrity is the most important consideration in system design. It is better to have a system omit certain anomalous features and improvement, but to reflect one set of design ideas, than to have one that contains many good but independent and uncoordinated ideas."
"I will contend that conceptual integrity is the most important consideration in system design. It is better to have a system omit certain anomalous features and improvement, but to reflect one set of design ideas, than to have one that contains many good but independent and uncoordinated ideas."

ARCHITECTURAL MEANS FOR ACHIEVING QUALITIES

When developers ask, "What architecture shall I choose?" they are seeking the answer to the following questions:


lloyd.madden@dynamix.com
glenw@uswest.net
johnfl@cs.uoregon.edu