Swebok - Software Design
Swebok - Software Design
SOFTWARE DESIGN
2-1
2-2 SWEBOK® Guide V3.0
• Architectural design (also referred to as high- software is divided into a number of smaller
level design and top-level design) describes named components having well-defined
how software is organized into components. interfaces that describe component interac-
• Detailed design describes the desired behav- tions. Usually the goal is to place different
ior of these components. functionalities and responsibilities in differ-
ent components.
The output of these two processes is a set of • Encapsulation and information hiding means
models and artifacts that record the major deci- grouping and packaging the internal details
sions that have been taken, along with an explana- of an abstraction and making those details
tion of the rationale for each nontrivial decision. inaccessible to external entities.
By recording the rationale, long-term maintain- • Separation of interface and implementation.
ability of the software product is enhanced. Separating interface and implementation
involves defining a component by specify-
1.4. Software Design Principles ing a public interface (known to the clients)
[4*] [5*, c6, c7, c21] [6*, c1, c8, c9] that is separate from the details of how the
component is realized (see encapsulation and
A principle is “a comprehensive and fundamen- information hiding above).
tal law, doctrine, or assumption” [7]. Software • Sufficiency, completeness, and primitiveness.
design principles are key notions that provide Achieving sufficiency and completeness
the basis for many different software design means ensuring that a software component
approaches and concepts. Software design princi- captures all the important characteristics of
ples include abstraction; coupling and cohesion; an abstraction and nothing more. Primitive-
decomposition and modularization; encapsula- ness means the design should be based on
tion/information hiding; separation of interface patterns that are easy to implement.
and implementation; sufficiency, completeness, • Separation of concerns. A concern is an
and primitiveness; and separation of concerns. “area of interest with respect to a software
design” [8]. A design concern is an area of
• Abstraction is “a view of an object that design that is relevant to one or more of its
focuses on the information relevant to a stakeholders. Each architecture view frames
particular purpose and ignores the remain- one or more concerns. Separating concerns
der of the information” [1] (see Abstraction by views allows interested stakeholders to
in the Computing Foundations KA). In the focus on a few things at a time and offers a
context of software design, two key abstrac- means of managing complexity [9].
tion mechanisms are parameterization and
specification. Abstraction by parameteriza- 2. Key Issues in Software Design
tion abstracts from the details of data repre-
sentations by representing the data as named A number of key issues must be dealt with when
parameters. Abstraction by specification designing software. Some are quality concerns
leads to three major kinds of abstraction: that all software must address—for example,
procedural abstraction, data abstraction, and performance, security, reliability, usability, etc.
control (iteration) abstraction. Another important issue is how to decompose,
• Coupling and Cohesion. Coupling is defined organize, and package software components.
as “a measure of the interdependence among This is so fundamental that all design approaches
modules in a computer program,” whereas address it in one way or another (see section 1.4,
cohesion is defined as “a measure of the Software Design Principles, and topic 7, Soft-
strength of association of the elements within ware Design Strategies and Methods). In contrast,
a module” [1]. other issues “deal with some aspect of software’s
• Decomposition and modularization. Decom- behavior that is not in the application domain,
posing and modularizing means that large but which addresses some of the supporting
2-4 SWEBOK® Guide V3.0
domains” [10]. Such issues, which often crosscut 2.6. Interaction and Presentation
the system’s functionality, have been referred to [5*, c16]
as aspects, which “tend not to be units of soft-
ware’s functional decomposition, but rather to be This design issue is concerned with how to struc-
properties that affect the performance or seman- ture and organize interactions with users as well
tics of the components in systemic ways” [11]. as the presentation of information (for example,
A number of these key, crosscutting issues are separation of presentation and business logic
discussed in the following sections (presented in using the Model-View-Controller approach).
alphabetical order). Note that this topic does not specify user interface
details, which is the task of user interface design
2.1. Concurrency (see topic 4, User Interface Design).
[5*, c18]
2.7. Security
Design for concurrency is concerned with decom- [5*, c12, c18] [13*, c4]
posing software into processes, tasks, and threads
and dealing with related issues of efficiency, Design for security is concerned with how to pre-
atomicity, synchronization, and scheduling. vent unauthorized disclosure, creation, change,
deletion, or denial of access to information and
2.2. Control and Handling of Events other resources. It is also concerned with how to
[5*, c21] tolerate security-related attacks or violations by
limiting damage, continuing service, speeding
This design issue is concerned with how to repair and recovery, and failing and recovering
organize data and control flow as well as how securely. Access control is a fundamental con-
to handle reactive and temporal events through cept of security, and one should also ensure the
various mechanisms such as implicit invocation proper use of cryptology.
and call-backs.
3. Software Structure and Architecture
2.3. Data Persistence
[12*, c9] In its strict sense, a software architecture is
“the set of structures needed to reason about
This design issue is concerned with how to han- the system, which comprise software elements,
dle long-lived data. relations among them, and properties of both”
[14*]. During the mid-1990s, however, soft-
2.4. Distribution of Components ware architecture started to emerge as a broader
[5*, c18] discipline that involved the study of software
structures and architectures in a more generic
This design issue is concerned with how to dis- way. This gave rise to a number of interesting
tribute the software across the hardware (includ- concepts about software design at different lev-
ing computer hardware and network hardware), els of abstraction. Some of these concepts can
how the components communicate, and how be useful during the architectural design (for
middleware can be used to deal with heteroge- example, architectural styles) as well as during
neous software. the detailed design (for example, design pat-
terns). These design concepts can also be used
2.5. Error and Exception Handling and Fault to design families of programs (also known as
Tolerance product lines). Interestingly, most of these con-
[5*, c18] cepts can be seen as attempts to describe, and
thus reuse, design knowledge.
This design issue is concerned with how to pre-
vent, tolerate, and process errors and deal with
exceptional conditions.
Software Design 2-5
3.1. Architectural Structures and Viewpoints patterns describing the high-level organization
[14*, c1] of software, other design patterns can be used
to describe details at a lower level. These lower
Different high-level facets of a software design level design patterns include the following:
can be described and documented. These facets
are often called views: “A view represents a partial • Creational patterns (for example, builder,
aspect of a software architecture that shows spe- factory, prototype, singleton)
cific properties of a software system” [14*]. Views • Structural patterns (for example, adapter,
pertain to distinct issues associated with software bridge, composite, decorator, façade, fly-
design—for example, the logical view (satisfying weight, proxy)
the functional requirements) vs. the process view • Behavioral patterns (for example, command,
(concurrency issues) vs. the physical view (distri- interpreter, iterator, mediator, memento,
bution issues) vs. the development view (how the observer, state, strategy, template, visitor).
design is broken down into implementation units
with explicit representation of the dependencies 3.4. Architecture Design Decisions
among the units). Various authors use different [5*, c6]
terminologies—like behavioral vs. functional vs.
structural vs. data modeling views. In summary, a Architectural design is a creative process. Dur-
software design is a multifaceted artifact produced ing the design process, software designers have
by the design process and generally composed of to make a number of fundamental decisions that
relatively independent and orthogonal views. profoundly affect the software and the develop-
ment process. It is useful to think of the archi-
3.2. Architectural Styles tectural design process from a decision-making
[14*, c1, c2, c3, c4, c5] perspective rather than from an activity perspec-
tive. Often, the impact on quality attributes and
An architectural style is “a specialization of ele- tradeoffs among competing quality attributes are
ment and relation types, together with a set of the basis for design decisions.
constraints on how they can be used” [14*]. An
architectural style can thus be seen as providing 3.5. Families of Programs and Frameworks
the software’s high-level organization. Various [5*, c6, c7, c16]
authors have identified a number of major archi-
tectural styles: One approach to providing for reuse of software
designs and components is to design families of
• General structures (for example, layers, pipes programs, also known as software product lines.
and filters, blackboard) This can be done by identifying the commonalities
• Distributed systems (for example, client- among members of such families and by designing
server, three-tiers, broker) reusable and customizable components to account
• Interactive systems (for example, Model-View- for the variability among family members.
Controller, Presentation-Abstraction-Control) In object-oriented (OO) programming, a key
• Adaptable systems (for example, microker- related notion is that of a framework: a partially
nel, reflection) completed software system that can be extended
• Others (for example, batch, interpreters, pro- by appropriately instantiating specific extensions
cess control, rule-based). (such as plug-ins).
and control of the machine. For software to and presentation for the software, the background
achieve its full potential, the user interface should and experience of the software users, and the
be designed to match the skills, experience, and available devices.
expectations of its anticipated users.
4.3. The Design of User Interaction Modalities
4.1. General User Interface Design Principles [5*, c29-web] [17*, c2]
[5*, c29-web] [17*, c2]1
User interaction involves issuing commands and
• Learnability. The software should be easy to providing associated data to the software. User
learn so that the user can rapidly start work- interaction styles can be classified into the fol-
ing with the software. lowing primary styles:
• User familiarity. The interface should use
terms and concepts drawn from the experi- • Question-answer. The interaction is essen-
ences of the people who will use the software. tially restricted to a single question-answer
• Consistency. The interface should be consis- exchange between the user and the software.
tent so that comparable operations are acti- The user issues a question to the software,
vated in the same way. and the software returns the answer to the
• Minimal surprise. The behavior of software question.
should not surprise users. • Direct manipulation. Users interact with
• Recoverability. The interface should provide objects on the computer screen. Direct
mechanisms allowing users to recover from manipulation often includes a pointing
errors. device (such as a mouse, trackball, or a fin-
• User guidance. The interface should give ger on touch screens) that manipulates an
meaningful feedback when errors occur and object and invokes actions that specify what
provide context-related help to users. is to be done with that object.
• User diversity. The interface should pro- • Menu selection. The user selects a command
vide appropriate interaction mechanisms from a menu list of commands.
for diverse types of users and for users with • Form fill-in. The user fills in the fields of a
different capabilities (blind, poor eyesight, form. Sometimes fields include menus, in
deaf, colorblind, etc.). which case the form has action buttons for
the user to initiate action.
4.2. User Interface Design Issues • Command language. The user issues a com-
[5*, c29-web] [17*, c2] mand and provides related parameters to
direct the software what to do.
User interface design should solve two key issues: • Natural language. The user issues a com-
mand in natural language. That is, the natural
• How should the user interact with the language is a front end to a command lan-
software? guage and is parsed and translated into soft-
• How should information from the software ware commands.
be presented to the user?
4.4. The Design of Information Presentation
User interface design must integrate user [5*, c29-web] [17*, c2]
interaction and information presentation. User
interface design should consider a compromise Information presentation may be textual or graphi-
between the most appropriate styles of interaction cal in nature. A good design keeps the information
presentation separate from the information itself.
The MVC (Model-View-Controller) approach is
1 Chapter 29 is a web-based chapter available an effective way to keep information presentation
at http://ifs.host.cs.st-andrews.ac.uk/Books/SE9/
separating from the information being presented.
WebChapters/.
Software Design 2-7
5.2. Quality Analysis and Evaluation Techniques • Function-based (structured) design mea-
[4*, c4] [5*, c24] sures: measures obtained by analyzing func-
tional decomposition; generally represented
Various tools and techniques can help in analyz- using a structure chart (sometimes called a
ing and evaluating software design quality. hierarchical diagram) on which various mea-
sures can be computed.
• Software design reviews: informal and for- • Object-oriented design measures: the design
malized techniques to determine the quality structure is typically represented as a class
of design artifacts (for example, architecture diagram, on which various measures can be
reviews, design reviews, and inspections; computed. Measures on the properties of the
scenario-based techniques; requirements internal content of each class can also be
tracing). Software design reviews can also computed.
evaluate security. Aids for installation, oper-
ation, and usage (for example, manuals and 6. Software Design Notations
help files) can be reviewed.
• Static analysis: formal or semiformal static Many notations exist to represent software design
(nonexecutable) analysis that can be used artifacts. Some are used to describe the structural
to evaluate a design (for example, fault- organization of a design, others to represent soft-
tree analysis or automated cross-checking). ware behavior. Certain notations are used mostly
Design vulnerability analysis (for example, during architectural design and others mainly
static analysis for security weaknesses) can during detailed design, although some nota-
be performed if security is a concern. Formal tions can be used for both purposes. In addition,
design analysis uses mathematical models some notations are used mostly in the context of
that allow designers to predicate the behavior specific design methods (see topic 7, Software
and validate the performance of the software Design Strategies and Methods). Please note that
instead of having to rely entirely on testing. software design is often accomplished using mul-
Formal design analysis can be used to detect tiple notations. Here, they are categorized into
residual specification and design errors (per- notations for describing the structural (static)
haps caused by imprecision, ambiguity, and view vs. the behavioral (dynamic) view.
sometimes other kinds of mistakes). (See
also the Software Engineering Models and 6.1. Structural Descriptions (Static View)
Methods KA.) [4*, c7] [5*, c6, c7] [6*, c4, c5, c6, c7]
• Simulation and prototyping: dynamic tech- [12*, c7] [14*, c7]
niques to evaluate a design (for example,
performance simulation or feasibility The following notations, mostly but not always
prototypes). graphical, describe and represent the structural
aspects of a software design—that is, they are
Software Design 2-9
used to describe the major components and how • Activity diagrams: used to show control flow
they are interconnected (static view): from activity to activity. Can be used to rep-
resent concurrent activities.
• Architecture description languages (ADLs): • Communication diagrams: used to show
textual, often formal, languages used to the interactions that occur among a group
describe software architecture in terms of of objects; emphasis is on the objects, their
components and connectors. links, and the messages they exchange on
• Class and object diagrams: used to repre- those links.
sent a set of classes (and objects) and their • Data flow diagrams (DFDs): used to show
interrelationships. data flow among elements. A data flow dia-
• Component diagrams: used to represent a gram provides “a description based on model-
set of components (“physical and replace- ing the flow of information around a network
able part[s] of a system that [conform] to of operational elements, with each element
and [provide] the realization of a set of inter- making use of or modifying the information
faces” [18]) and their interrelationships. flowing into that element” [4*]. Data flows
• Class responsibility collaborator cards (and therefore data flow diagrams) can be
(CRCs): used to denote the names of compo- used for security analysis, as they offer iden-
nents (class), their responsibilities, and their tification of possible paths for attack and dis-
collaborating components’ names. closure of confidential information.
• Deployment diagrams: used to represent a • Decision tables and diagrams: used to rep-
set of (physical) nodes and their interrela- resent complex combinations of conditions
tionships, and, thus, to model the physical and actions.
aspects of software. • Flowcharts: used to represent the flow of
• Entity-relationship diagrams (ERDs): used control and the associated actions to be
to represent conceptual models of data stored performed.
in information repositories. • Sequence diagrams: used to show the inter-
• Interface description languages (IDLs): actions among a group of objects, with
programming-like languages used to define emphasis on the time ordering of messages
the interfaces (names and types of exported passed between objects.
operations) of software components. • State transition and state chart diagrams:
• Structure charts: used to describe the calling used to show the control flow from state to
structure of programs (which modules call, state and how the behavior of a component
and are called by, which other modules). changes based on its current state in a state
machine.
6.2. Behavioral Descriptions (Dynamic View) • Formal specification languages: textual lan-
[4*, c7, c13] [5*, c6, c7] [6*, c4, c5, c6, c7] guages that use basic notions from math-
[14*, c8] ematics (for example, logic, set, sequence)
to rigorously and abstractly define software
The following notations and languages, some component interfaces and behavior, often in
graphical and some textual, are used to describe terms of pre- and postconditions. (See also
the dynamic behavior of software systems and the Software Engineering Models and Meth-
components. Many of these notations are use- ods KA.)
ful mostly, but not exclusively, during detailed • Pseudo code and program design languages
design. Moreover, behavioral descriptions can (PDLs): structured programming-like lan-
include a rationale for design decision such as guages used to describe, generally at the
how a design will meet security requirements. detailed design stage, the behavior of a pro-
cedure or method.
2-10 SWEBOK® Guide V3.0
7. Software Design Strategies and Methods design of the mid-1980s (noun = object; verb
= method; adjective = attribute), where inheri-
There exist various general strategies to help tance and polymorphism play a key role, to the
guide the design process. In contrast with general field of component-based design, where metain-
strategies, methods are more specific in that they formation can be defined and accessed (through
generally provide a set of notations to be used reflection, for example). Although OO design’s
with the method, a description of the process to roots stem from the concept of data abstraction,
be used when following the method, and a set of responsibility-driven design has been proposed
guidelines for using the method. Such methods as an alternative approach to OO design.
are useful as a common framework for teams of
software engineers. (See also the Software Engi- 7.4. Data Structure-Centered Design
neering Models and Methods KA). [4*, c14, c15]
7.1. General Strategies Data structure-centered design starts from the data
[4*, c8, c9, c10] [12*, c7] structures a program manipulates rather than from
the function it performs. The software engineer
Some often-cited examples of general strategies first describes the input and output data structures
useful in the design process include the divide- and then develops the program’s control structure
and-conquer and stepwise refinement strategies, based on these data structure diagrams. Various
top-down vs. bottom-up strategies, and strategies heuristics have been proposed to deal with special
making use of heuristics, use of patterns and pat- cases—for example, when there is a mismatch
tern languages, and use of an iterative and incre- between the input and output structures.
mental approach.
7.5. Component-Based Design (CBD)
7.2. Function-Oriented (Structured) Design [4*, c17]
[4*, c13]
A software component is an independent unit,
This is one of the classical methods of software having well-defined interfaces and dependen-
design, where decomposition centers on identify- cies that can be composed and deployed inde-
ing the major software functions and then elab- pendently. Component-based design addresses
orating and refining them in a hierarchical top- issues related to providing, developing, and
down manner. Structured design is generally used integrating such components in order to improve
after structured analysis, thus producing (among reuse. Reused and off-the-shelf software com-
other things) data flow diagrams and associated ponents should meet the same security require-
process descriptions. Researchers have proposed ments as new software. Trust management is
various strategies (for example, transformation a design concern; components treated as hav-
analysis, transaction analysis) and heuristics (for ing a certain degree of trustworthiness should
example, fan-in/fan-out, scope of effect vs. scope not depend on less trustworthy components or
of control) to transform a DFD into a software services.
architecture generally represented as a structure
chart. 7.6. Other Methods
[5*, c19, c21]
7.3. Object-Oriented Design
[4*, c16] Other interesting approaches also exist (see the
Software Engineering Models and Methods
Numerous software design methods based KA). Iterative and adaptive methods imple-
on objects have been proposed. The field has ment software increments and reduce emphasis
evolved from the early object-oriented (OO) on rigorous software requirement and design.
Software Design 2-11
Brookshear 2008
Page-Jones 1999
Budgen 2003
Nielsen 1993
Allen 2008
[12*]
[13*]
[15*]
[17*]
[14*]
[5*]
[4*]
[6*]
1. Software Design
Fundamentals
1.1. General Design
c1
Concepts
1.2. The Context of
c3
Software Design
1.3. The Software
c2
Design Process
1.4. Software Design c6, c7, c1, c8,
c1
Principles c21 c9
2. Key Issues in
Software Design
2.1. Concurrency c18
2.2. Control and
c21
Handling of Events
2.3. Data Persistence c9
2.4. Distribution of
c18
Components
2.5. Error and
Exception Handling c18
and Fault Tolerance
2.6. Interaction and
c16
Presentation
c12,
2.7. Security c4
c18
3. Software Structure
and Architecture
3.1. Architectural
Structures and c1
Viewpoints
c1, c2,
3.2. Architectural
c3, c4,
Styles
c5
c3, c4,
3.3. Design Patterns
c5
Software Design 2-13
Brookshear 2008
Page-Jones 1999
Budgen 2003
Nielsen 1993
Allen 2008
[12*]
[13*]
[15*]
[17*]
[14*]
[5*]
[4*]
[6*]
3.4. Architecture
c6
Design Decisions
3.5. Families of
c6, c7,
Programs and
c16
Frameworks
4. User Interface
Design
4.1. General User
c29-
Interface Design c2
web
Principle
4.2. User Interface c29-
Design Issues web
4.3. The Design of
c29-
User Interaction
web
Modalities
4.4. The Design
c29-
of Information
web
Presentation
4.5. User Interface c29-
Design Process web
4.6. Localization and
c8, c9
Internationalization
4.7. Metaphors and
c5
Conceptual Models
5. Software Design
Quality Analysis and
Evaluation
5.1. Quality
c4
Attributes
5.2. Quality
Analysis and
c4 c24
Evaluation
Techniques
5.3. Measures c4 c24
2-14 SWEBOK® Guide V3.0
Brookshear 2008
Page-Jones 1999
Budgen 2003
Nielsen 1993
Allen 2008
[12*]
[13*]
[15*]
[17*]
[14*]
[5*]
[4*]
[6*]
6. Software Design
Notations
6.1. Structural
c4, c5,
Descriptions (Static c7 c6, c7 c7 c7
c6, c7
View)
6.2. Behavioral
c7, c13, c4, c5,
Descriptions c6, c7 c8
c18 c6, c7
(Dynamic View)
7. Software Design
Strategies and
Methods
7.1. General c8, c9,
c7
Strategies c10
7.2. Function-
Oriented c13
(Structured) Design
7.3. Object-Oriented
c16
Design
7.4. Data Structure- c14,
Centered Design c15
7.5. Component-
c17
Based Design (CBD)
c19,
7.6. Other Methods
c21
8. Software Design c10,
Tools App. A
Software Design 2-15
For roughly three decades, Roger Pressman’s [2] IEEE Std. 12207-2008 (a.k.a. ISO/IEC
Software Engineering: A Practitioner’s Approach 12207:2008) Standard for Systems and
has been one of the world’s leading textbooks in Software Engineering—Software Life Cycle
software engineering. Notably, this complemen- Processes, IEEE, 2008.
tary textbook to [5*] comprehensively presents
software design—including design concepts, [3] T. DeMarco, “The Paradox of Software
architectural design, component-level design, Architecture and Design,” Stevens Prize
user interface design, pattern-based design, and Lecture, 1999.
web application design.
[4*] D. Budgen, Software Design, 2nd ed.,
“The 4+1 View Model of Architecture” [20]. Addison-Wesley, 2003.
The seminal paper “The 4+1 View Model” orga- [5*] I. Sommerville, Software Engineering, 9th
nizes a description of a software architecture ed., Addison-Wesley, 2011.
using five concurrent views. The four views of
the model are the logical view, the development [6*] M. Page-Jones, Fundamentals of Object-
view, the process view, and the physical view. Oriented Design in UML, 1st ed., Addison-
In addition, selected use cases or scenarios are Wesley, 1999.
utilized to illustrate the architecture. Hence, the
model contains 4+1 views. The views are used to [7] Merriam-Webster’s Collegiate Dictionary,
describe the software as envisioned by different 11th ed., 2003.
stakeholders—such as end-users, developers, and
project managers. [8] IEEE Std. 1069-2009 Standard for
Information Technology—Systems
Len Bass, Paul Clements, and Rick Kazman, Design—Software Design Descriptions,
Software Architecture in Practice [21]. IEEE, 2009.
This book introduces the concepts and best prac- [9] ISO/IEC 42010:2011 Systems and Software
tices of software architecture, meaning how soft- Engineering—Recommended Practice for
ware is structured and how the software’s compo- Architectural Description of Software-
nents interact. Drawing on their own experience, Intensive Systems, ISO/IEC, 2011.
the authors cover the essential technical topics
for designing, specifying, and validating software [10] J. Bosch, Design and Use of Software
architectures. They also emphasize the impor- Architectures: Adopting and Evolving a
tance of the business context in which large soft- Product-Line Approach, ACM Press, 2000.
ware is designed. Their aim is to present software
architecture in a real-world setting, reflecting [11] G. Kiczales et al., “Aspect-Oriented
both the opportunities and constraints that orga- Programming,” Proc. 11th European Conf.
nizations encounter. This is one of the best books Object-Oriented Programming (ECOOP
currently available on software architecture. 97), Springer, 1997.
2-16 SWEBOK® Guide V3.0
[12*] J.G. Brookshear, Computer Science: An [17*] J. Nielsen, Usability Engineering, Morgan
Overview, 10th ed., Addison-Wesley, 2008. Kaufmann, 1993.
[13*] J.H. Allen et al., Software Security [18] G. Booch, J. Rumbaugh, and I. Jacobson,
Engineering: A Guide for Project The Unified Modeling Language User
Managers, Addison-Wesley, 2008. Guide, Addison-Wesley, 1999.
[14*] P. Clements et al., Documenting Software [19] R.S. Pressman, Software Engineering: A
Architectures: Views and Beyond, 2nd ed., Practitioner’s Approach, 7th ed., McGraw-
Pearson Education, 2010. Hill, 2010.
[15*] E. Gamma et al., Design Patterns: [20] P.B. Kruchten, “The 4+1 View Model of
Elements of Reusable Object-Oriented Architecture,” IEEE Software, vol. 12, no.
Software, 1st ed., Addison-Wesley 6, 1995, pp. 42–55.
Professional, 1994.
[21] L. Bass, P. Clements, and R. Kazman,
[16] I. Jacobson, G. Booch, and J. Rumbaugh, Software Architecture in Practice, 3rd ed.,
The Unified Software Development Addison-Wesley Professional, 2013.
Process, Addison-Wesley Professional,
1999.