Sample Selection From Guide to the Software Engineering Body of Knowledge (2004 Edition)
Excerpt from Chapter 3: Software Design
3. Software Structure and Architecture
In its strict sense, a software architecture is "a description of the subsystems and components of a software system and the relationships between them." (Bus96:c6) Architecture thus attempts to define the internal structure -- according to the Oxford English Dictionary, "the way in which something is constructed or organized" -- of the resulting software. During the mid-1990s, however, software architecture started to emerge as a broader discipline involving the study of software structures and architectures in a more generic way [Sha96]. This gave rise to a number of interesting ideas about software design at different levels of abstraction. Some of these concepts can be useful during the architectural design (for example, architectural style) of specific software, as well as during its detailed design (for example, lower-level design patterns). But they can also be useful for designing generic systems, leading to the design of families of programs (also known as product lines). Interestingly, most of these concepts can be seen as attempts to describe, and thus reuse, generic design knowledge.
3.1. Architectural Structures and Viewpoints
Different high-level facets of a software design can and should be described and documented. These facets are often called views: "A view represents a partial aspect of a software architecture that shows specific properties of a software system" [Bus96:c6]. These distinct views pertain to distinct issues associated with software design -- for example, the logical view (satisfying the functional requirements) vs. the process view (concurrency issues) vs. the physical view (distribution issues) vs. the development view (how the design is broken down into implementation units). Other authors use different terminologies, like behavioral vs. functional vs. structural vs. data modeling views. In summary, a software design is a multi-faceted artifact produced by the design process and generally composed of relatively independent and orthogonal views. [Bas03:c2; Boo99:c31; Bud04:c5; Bus96:c6; IEEE1016-98; IEEE1471-00] Architectural Styles (macroarchitectural patterns)
An architectural style is "a set of constraints on an architecture [that] defines a set or family of architectures that satisfies them" [Bas03:c2]. An architectural style can thus be seen as a meta-model which can provide software's high-level organization (its macroarchitecture). Various authors have identified a number of major architectural styles. [Bas03:c5; Boo99:c28; Bos00:c6; Bus96:c1,c6; Pfl01:c5]
- General structure (for example, layers, pipes, and filters, blackboard)
- Distributed systems (for example, client-server, threetiers, broker)
- Interactive systems (for example, Model-View-Controller, Presentation-Abstraction-Control)
- Adaptable systems (for example, micro-kernel, reflection)
- Others (for example, batch, interpreters, process control, rule-based).
Purchase, Product Information, Author Bios, Table of Contents
