Title: Software Architecture
1Software Architecture
- Most material is from
- Len Bass, Paul Clements, Rick Kazman
- Software Architecture in Practice
- Addison-Wesley, 1998
2Architecture is the Foundation for a Successful
System
- System Capabilities
- Functionality
- Performance
- Availability
- Interoperability
- Extensibility
- Longevity
- etc.
Influences
System Architecture
Constrains
3Intricate Waltz ofInfluence and Counterinfluence
Customer Organization
Compete
System Requirements
Implicit
Developer Organization and Business Model
Architect
Influence
Explicit
Architects Experience
Conflict
State of the Art
4The Waltz
- Architects must identify and actively engage the
stakeholders to solicit their needs and
expectations - Technically Correct AND Politically Correct
- A software architect must have considerable
organizational talents and negotiating skills - in addition to comprehensive technical and domain
knowledge
5Architecture in the Product Life-Cycle
Inception
Elaboration
Construction
Transition
Upgrade
Envision
Create and Analyze
Reuse
Other Products
Inception
Architectural Baseline
Inception
6Architecture pieces, parts, relations, context
- The underlying intuition behind the pattern, or
the system model - The kinds of components that are used in
developing a system according to the pattern - The connectors, or kinds of interactions among
the components - The control structure or execution discipline
From Mary Shaw, Some Patterns for Software
Architectures, Pattern Languages of Program
Design, Vol 2, John Vlissides, James Coplien,
Norman Kerth (eds), Addison-Wesley 1996, pp.
255-269.
7Implications
- Architecture is an abstraction of systems
- components and interaction
- suppresses local information component details
are not architectural - Systems have many structures (views)
- no single view can be the architecture
- more than one kind of component (e.g., module or
process), interaction (e.g., subdivision or
synchronization) and/or context (e.g., build-time
or run-time) - use whatever views are useful for analysis or
communication
8Implications, continued
- Every system has an architecture
- Is it known?
- Is it engineered?
- To be an architecture, the behavior of each
component must be able to be observed or
discerned from the point of view of another
component (not from the point of view of a person)
Software architecture is a focus on reasoning
about the structural issues of a system
9Why Architecture?
- Communication and consensus among stakeholders
- common language to address different concerns
- Early design decisions and earliest point of
analysis - constrains implementation
- dictates structure of development organization
- inhibits/enables system quality attributes
- enables analysis and reasoning about quality and
change - skeleton for evolutionary development
- Transferable abstraction of a system
- more value if reuse requirements, then
architecture, then design, then code - product lines, components, designs, interaction
templates - basis for training
10Architectural Structures
- Module/sub-module structure
- sub-module of
- Conceptual (logical, functional) structure
- shares data with
- Process and coordination structure
- synchronization and run-time dependence
- Physical (hardware, communications) structure
- communicates with
- Uses structure
- functional dependency
- Calls structure
- execution flow
- Data flow
- may send data to
- Control flow
- becomes active after
- Class structure
- inherits from or instance of
11Quality Attributes
12Every good quality is noxious if
unmixed.(Ralph Waldo Emerson)
- Functionality is the primary, but not the
exclusive, quality of a system - the mapping of a systems functionality onto
software structures determines the architectures
support for qualities - functionality and other qualities must be
designed in from the start - cannot go back and add in quality
Functional vs. Nonfunctional Dichotomy
13Two Broad Categories
- Two broad categories
- Observable via execution (run-time behavior)
- Not observable via execution (build-time
behavior) - Qualities are attributes of what?
- The system
- The business
- The architecture
- Quality must be considered during all life-cycle
phases - Different qualities manifest themselves
differently during the phases - Architecture is critical to realization of many
qualities - Not all qualities are architectural
- Some qualities are architectural and
non-architectural - Qualities are rarely independent ? trade-offs
14System Runtime Quality Attributes
- Performance
- responsiveness throughput and latency
- primarily driven by inter-component interaction
- analyzed via stochastic queueing and workload
models - historically, the primary driving factor in
architecture (but no longer alone) - Security
- denying service to unauthorized usage
- assuring service to authorized usage in spite of
unauthorized attempts at denying services - architectural solutions
- special security components that coordinate the
interaction of the other components
15System Runtime Quality Attributes(continued)
- Availability
- the proportion of time the system is up and
running - reliability (time between failures) and time to
repair - reliability fault-tolerance, error detection and
handling - repair fault isolation, ease of component
replacement or modification - Functionality
- ability to perform the task required
- non-architectural, but allocation of
functionality to structure interacts with
architectural qualities - Usability
- learnability
- efficiency
- memorability
- architecture information availability and
organization efficiency
- error avoidance
- error handling
- satisfaction
16System Build-Time Quality Attributes
- Modifiability (maintainability)
- extend or change capabilities
- delete unwanted capabilities
- adapt to new operating environments
- restructure
- architectural issue scope of change
- local component, a few components, or change in
underlying architectural style - Portability
- ability to run under different computing
hardware/software environments - approach isolate platform-specific concerns in a
portability layer
17System Build-Time Quality Attributes(continued)
- Reusability (integrate-ability, modifiability)
- system structures and/or components can be used
in other systems - architecture relatively small, loosely coupled
components - Integrability (? integrate-ability)
- ability to make components work together
- architecture
- external component complexity
- interaction mechanisms and protocols
- clean separation of concerns
- completeness of specification
- interoperability integrability of components in
one system with those in another system - Testability (controllability, observability)
- separation of concerns, information hiding,
uses structure for incremental development
18Business Qualities
- Time to market
- incorporation of existing components
- Cost
- reuse, technical maturity of organization
- System lifetime
- invest in modifiability and portability
- Targeted market
- functionality, portability, performance,
reliability, usability, product line architecture - Rollout schedule
- modifiability (flexibility, customizability,
extensibility) - Use of legacy systems
- integrability
19Architecture Qualities
- Conceptual integrity
- unifying theme or vision
- do similar things in similar ways -- patterns
- Fred Brooks
- the most important consideration in system
design. - Having a system architect is the most important
step toward conceptual integrity . - Correctness and completeness
- meet all requirements and constraints
- Buildability
- ease of construction in time and cost constraints
- depends on availability of known tools and
techniques
20Architectural Approaches
- Decomposition, reuse and modification modular
structure (static, build-time) - components are modules
- Run-time behavior and qualities architecture
style - components are processes
- Note well module structure ? process structure
- Anticipate change isolate to a few components
and incremental change steps - experience
- uncertain or ambiguous requirements
- scope reduction (hence later expansion)
21Achieving Qualities
- Achieve quality attributes in a way that is
- Easy to understand
- Measurable
- Repeatable
- Documentable
- Easy to communicate and enforce
22StylesMoving from Qualities to Architectures
- Architectural styles help software engineers
reason about architectural qualities - A style
- describes a class of architectures
- is found repeatedly in practice
- is a package of design decisions
- has known properties that permit reuse
23Architecture Styles
- A style is described by
- a set of component types (e.g., data repository,
process, object) - a set of connector types/interaction mechanisms
(e.g., subroutine call, event, pipe) - including control structure
- a topological layout of these components
- a set of constraints on topology and behavior
- an informal description of the costs and benefits
of the style - A style is named to reflect the underlying
intuition behind the pattern or the system model
24Architecture Styles
- A growing catalog of styles
- Garlan and Shaw, 1995
- No complete list
- Styles overlap
- Systems exhibit multiple styles at once
25Data-Centered Style
Shared Data
26Data Centered Style
- Goals
- integrability
- modifiability
- scalability (add new clients and data easily)
- Examples
- passive data store repository style
- active data store blackboard
- What do we know? What can we ask?
- how are clients activated?
- How is the data repository activated?
- Does the repository know the existence of the
clients? Their names? Their locations? - Do the repository and client share knowledge of
the data representation?
27Layered Architecture
User Interface
Useful System
Basic Utility
Core
28Layered Architectures
- Goals
- portability
- reuse
- separation of concerns
- Examples
- operating systems
- telecommunications networks
- almost every reasonably complex architecture
- What do we know? What can we ask?
- How are layers defined and enforced?
- Can layer elements make calls up, down, sideways?
- Can layers access non-adjacent layers?
- Do the elements of a layer share common calling
conventions and protocols?
29Data-Flow Architectures
- Description
- series of transformations on successive pieces of
input data explicit pattern of data flow - availability of data controls the computation
- Goals
- reuse
- modifiability
- Examples
- batch sequential
- pipe-and-filter
- process control
- What do we know? What can we ask?
30Batch Sequential Style
Tape
Tape
Tape
Tape
Report
Tape
- Example Classical data processing
- typically, nearly linear flow or
highly-constrained cyclic - Each step is an independent program
- Each step runs to completion before the next step
starts - Each batch of data is transmitted as a whole
between steps
31Pipe-and-Filter Style
- Examples Unix command shell, compilers, signal
processing, data-flow, functional programs - Incremental transformation of data by successive
components - enrich data, refine data, transform data
- Filter stream transducer (transformer)
- context free
- no state between instantiations
- no knowledge of upstream or downstream filters
- Pipe stateless data stream
- source end feeds filter input, sink receives
output
32Pipe-and-Filter Assessment
- Advantages
- simplicity functional composition, no function
interaction - maintenance and reuse
- filters are independent black boxes
- can represent composite of filters and pipes as
coarse-grained filter hierarchy - performance distribute filters to concurrent
processors - Disadvantages
- interactive applications are difficult (batch
mindset) - fixed filter ordering no filter cooperation
- performance
- common denominator data representation (e.g.,
ASCII) or data parse/unparse for transformation - input buffers and latency
33Batch Sequential vs. Pipe and Filter
- Both
- decompose task into fixed sequence of
computations - interact only through data passed from one to
another
Batch Sequential
Pipe and Filter
- Coarse-grained, total
- High-latency
- Random access to input is OK
- No concurrency
- Non-interactive
- Fine-grained, incremental
- Results start immediately
- Processing localized to input
- Feedback loops possible
- Often interactive
- but awkward to do so
34Control Flow vs. Data Flow
- Control Flow (e.g., procedural systems)
- focus on how center of control moves through
system - data may accompany the control, but is secondary
- reason about order of computation
- Data flow
- focus on how data moves through a collection of
computations - control is activated by availability of data
- reason about data availability, transformations,
latency, etc.
35Push vs. Pull
- What force makes the data flow?
- Push source filter pushes data downstream
- Pull sink filter pulls data from upstream
- note control request flows upstream of data
- Push/pull a filter actively pulls from upstream
and pushes downstream - combinations may need synchronization if more
than one filter is pushing/pulling - may have separate control management
36Claims
- Architecture is the development product that
gives the highest return on investment (ROI) with
respect to quality, schedule and cost - Relatively inexpensive to check and fix, upstream
- Substantial downstream consequences
- Reusable components need architectural context
- Architectures are also reusable
- Conceptual integrity is the key to sound system
design - conceptual integrity can only be had by a small
number of minds coming together to design the
systems architecture Brooks
37What Makes a Good ArchitectureProcess
Guidelines
- Single architect or small group with identified
leader - Must have system technical requirements and
articulated, prioritized qualitative properties - Architecture must be well-documented using an
agreed-upon notation that all can understand - Architecture should be actively reviewed by all
stakeholders - Analyze architecture for applicable quality
measures and formally review early in process - Architecture should allow creation of a skeletal
system on which functionality can incrementally
grow - Architecture should result in specific resource
restriction/allocation models (memory, bandwidth,
time)
38What Makes a Good ArchitectureProduct
(Structural) Guidelines
- Well-defined functional modules using information
hiding, separation of concerns, and well-defined
interfaces - Module separation of concerns should allow
concurrent, relatively independent development by
separate teams - Modules should hide idiosyncrasies of the
computing infrastructure and platform - Never depend on a particular version of a
commercial product or tool make change
straightforward and inexpensive - Separate data producers from data consumers
- Parallel processing well-defined processes and
tasks that may not mirror module structure - Process or task assignment to processors must be
easily changed, even at run-time - Consistently use a small number of simple
interaction patterns
39Software Architect Role(from Hofmeister et al.,
Applied Software Architecture)
- The software architect creates a vision
- keeps up with innovations and technologies
- understands global requirements and constraints
- creates a vision (global view) of the system
- communicates the vision effectively
- provides requirements and inputs to the system
architect - The software architect is the key technical
consultant - organizes the development team around the design
- manages dependencies
- reviews and negotiates requirements
- provides inputs regarding technical capabilities
of staff - motivates the team
- recommends technology, training, tools
- tracks the quality of the design
- ensures architecture meets its design goals
40Software Architect Role (continued)
- The software architect makes decisions
- leads the design team
- makes early design decisions (key global ones)
- knows when to end discussion and make a decision
- identifies and manages risk
- The software architect coaches
- establishes dialog with each team member
- teaches the team the design and gets their buy-in
- listens to feedback
- knows when to yield to design changes
- knows when to let others take over detailed
design - The software architect coordinates
- coordinates activities of tasks that influence or
are influenced by the architecture - maintains integrity of the design
- ensures that the architecture is followed
41Software Architect Role (continued)
- The software architect implements
- considers the design implications of introducing
a new technology - may look at low-level details to validate initial
concepts - may prototype to explore and evaluate design
decisions - may implement a thin vertical slice to minimize
implementation risk - may implement components as an implementation
model for developers - The software architect advocates
- advocates investment in software architecture
- works to incorporate software architecture into
the software process - continues to assess and advocate new software
architecture technologies - advocates architecture reuse
42Career Path(from Hofmeister et al., Applied
Software Architecture)
- Set your sights on becoming an expert in software
engineering - gather broad experience
- develop technical, leadership, communication and
people skills - Apprentice (hang out) with an experienced
architect
Senior Software Engineer
Individual Contributor
Software Engineer
Team Leader
Architect
Increasing responsibility, scope and challenge