Chapter 1 of the textbook for this course, Software
Architecture: Perspectives on an Emerging Discipline by Mary
Shaw and David Garland (Prentice Hall, 1996).
Thanks to Wen Wen Xu for entering my handwritten slides as HTML so
that I could prepare these notes more quickly.
What is Engineering?
- Many definitions include a phrase similar to:
- creating cost-effective solutions
- to practical problems
- by applying scientific knowledge
- building things
- in the service of mankind
- Key approach:
- codify scientific knowledge about a problem domain in a form
directly useful to practitioners
(and hence extend the capability of the ordinary design talent)
- Is software development an engineering discipline?
| familiar problems
|| unfamiliar problems
| reuse prior solutions
|| novel solutions
| (handbooks, manuals)
- What is the situation with software design?
Reuse of software
Problems in reuse:
- identifying reusable entities
- expressing them in useful form
- making them accessible
- adapting them to variants of the problem
- overcoming cultural tradition
- educating designers/programmers in reuse
- convincing management to invest in reuse
Figures from the Shaw and Garlan Textbook
Examine Figure 1.2, Evolution of an Engineering Discipline.
Examine Figure 1.3, Codification Cycle for Science and
Examine Figure 1.4, Evolution of Software Engineering.
Codification through Abstraction
- emphasizing the essentials, ignoring the details
Computer science has progressed by increasing the level of
abstraction---moving to larger conceptual building blocks.
(The following dates are approximate.)
simple compilers (e.g., early Fortran)
data typing (Algol)
theory of abstract data types
early OOP ideas
module interconnection languages (MIL)
. . .
. . .
Aspects of the Emerging Science
- programming language abstraction (previous section)
- algorithm analysis
- language theory
What is Software Architecture?
It involves description of:
- elements from which systems are constructed
- interactions among those elements
- patterns that guide their composition
- constraints on those patterns
Systems are defined in terms of:
- collection of components
- interactions among those components (connectors)
- clients and servers
- layers in hierarchical system
- procedure calls
- shared variables
- piped streams
- client-server protocols
- database transactions
- event multicast
There are many levels of design, each with own concerns.
Each level consists of:
- components (vocabulary)
- rules of composition (syntax)
- rules of behavior (semantics)
-- involves composing modules to form systems
- high-level system capability
-- involves composing primitive language features to form modules
- algorithms and data structures
-- involves composing bit patterns to form language features
- allocation of code and data to machine
Research Areas in Software Architecture
- architectural description languages
- codification of architectural expertise
- architectural frameworks for specific domains
- formal foundations
- architecture design/analysis selection methods
- support tools
- architecture extraction, recovery, and reengineering
(for legacy systems)