Vous êtes sur la page 1sur 23

Software Architecture

SYED FEROZ ZAINVI

Writing from:

http://www.computer-science-notes.blogspot.com
Agenda

Software Architecture – Warm Up


Software Architecture
 Definition
 Elaboration
Architectural Styles/Patterns – Overview
Architecture & Technologies
Before We Start …

The last decade has seen a tremendous rise in this


prominence of a software engineering sub-discipline
called Software Architecture
HOWEVER,
“Architecture” is one of the most overused and least
understood terms in professional software
development circles.
Regularly misused in project reviews and
discussions, academic paper presentations at
conferences and product pitches.
Software Architecture - Definitions

Easy to understand but no widely accepted definition


Trying to define a term such as software architecture is always a
potentially dangerous activity
Difficult to draw a sharp line between design and architecture
 Architecture is one aspect of design that concentrates on some specific features
 Software architecture is a level of design concerned with issues
To understand the diversity in views, have a browse through the
list maintained by the Software Engineering Institute at:
http://www.sei.cmu.edu/architecture/definitions.html
Software Architecture – IEEE Definition

“Architecture is defined by the recommended practice as


the fundamental organization of a system, embodied in
its components, their relationships to each other and the
environment, and the principles governing its design
and evolution.”

[ANSI/IEEE Std 1471-2000, Recommended Practice for


Architectural Description of Software-Intensive
Systems]
Software Architecture – Kazman Definition

“The software architecture of a program or computing


system is the structure or structures of the system, which
comprise software elements, the externally visible
properties of those elements, and the relationships
among them.”

[L.Bass, P.Clements, R.Kazman, Software Architecture in


Practice (2nd edition), Addison-Wesley 2003]
Software Architecture – RUP Version

Architecture of a software system (at a given point) is


the organization or structure of the system's
significant components interacting through
interfaces, with components composed of
successively smaller components and interfaces
Software Architecture – Shaw & Garlan Definition

“[Software architecture goes] beyond the algorithms and data


structures of the computation; designing and specifying the
overall system structure emerges as a new kind of problem.
Structural issues include gross organization and global control
structure; protocols for communication, synchronization, and
data access; assignment of functionality to design elements;
physical distribution; composition of design elements; scaling
and performance; and selection among design alternatives.”

[D. Garlan, M. Shaw, An Introduction to Software Architecture,


Advances in Software Engineering and Knowledge Engineering,
Volume I, World Scientific, 1993]
Architecture Defines Structure

Issue is how to sensibly partition an application into a set


of inter-related components
An architecture must be designed to meet the specific
requirements and constraints of the application it is
intended for
A key structural concern for nearly all applications is
minimizing dependencies between components, creating
a loosely coupled architecture from a set of highly
cohesive components.
Responsibility Driven Design is a technique
Architecture Specifies Component Communication

Issue: How divided components communicate data


and control information
Some examples:
 Within same address space: Method Calls
 If in different threads or processes: Synchronization
Mechanisms
 Multiple components to be simultaneously informed about an
event occurrence in application environment
 MANY POSSIBILITIES
Rescue: Architectural Patterns/Styles
Architecture Specifies Component Communication

Issue: How divided components communicate data


and control information
Some examples:
 Within same address space: Method Calls
 If in different threads or processes: Synchronization
Mechanisms
 Multiple components to be simultaneously informed about an
event occurrence in application environment
 MANY POSSIBILITIES
Rescue: Architectural Patterns/Styles
Overview of Patterns

Essentially reusable architectural blueprints that describe the


structure and interaction between collections of participating
components.
Has well-known characteristics that make it appropriate to use
to satisfy particular types of requirements.
Patterns are quite useful, and convey design information.
Proven to work. If used appropriately in an architecture, you
leverage existing design knowledge by using patterns.
Large systems tend to use multiple patterns, combined in ways
that satisfy the architecture requirements.
Architecture Addresses Non-Functional Requirements

Three distinct areas of non-functional requirements:


Technical constraints:
 Design constraints by specifying certain technologies
 Usually non-negotiable.
Business constraints:
 Design constraints due to business, not technical reasons.

Quality attributes:
 Requirements in terms of scalability, availability, ease of change,
portability, usability, performance,
 Address issues of concern to application users & stakeholders
Architecture Is An Abstraction

Marketecture: 1 pg informal depiction of system


structure & interactions
In easy to understand way for team members &
stakeholders
Unnecessary details are suppressed or ignored
Focus is on salient architectural issues
Components as black boxes; specifying only externally
visible properties
Hierarchal decomposition is one such mechanism
Architecture partitions team responsibilities &
dependencies
Describing An Architecture Hierarchicallly
Architecture Views

Software Architecture is a complex design artifact


There are number of ways of looking at and
understanding an architecture
Philip Krutchen’s 4+1 View Model (IEEE, 1995)
 Logical View: Architecturally significant elements
 Process View: Concurreny & Communication elements
 Physical View: Mapping of processes/components on to
application’s hardware
 Development View: Internal organization of software
components
Krutchen's 4+1 … Contd…

Views are tied together by the architecturally


significant use cases (UC often called scenarios)
UC basically capture the requirements for the
architecture, and hence are related to more than one
particular view
By working through the steps in a particular use
case, the architecture can be “tested”, by explaining
how the design elements in the architecture respond
to the behavior required in the use case.
SEI's Views & Beyond

Recommends capturing architecture model using 3


different views:
Module: Structural View – code modules, decomposition,
inheritance, association, aggregation
Components & Connectors: Behavioral Aspects
- Components: Objects, Threads, Processe
- Connectors: Shared Memory, Sockets, Middleware
Allocation: Process mapping to hardware,
communication using network/database, source code
view in configuration management, dev. responsibility
Uses terminology of Architecture Description Language
(ADL)
Architectures & Technologies

Architectural decisions to be made in early project


life-cycle
Difficult to validate & test until system is built
Judicious prototyping of key components can help
Still sometimes hard to ascertain success of
particular design choice in given application context
Risks can be reduced by using tried & tested
approaches for solving certain classes of problems
 Architectural Patterns
Patterns - Revisited

Patterns are an abstract representation of an architecture, in the


sense that they can be realized in multiple concrete forms.
Abstract architectures must be reified by software engineers as
concrete software implementations.
Software products vendors have come to the rescue. Widely
utilized architectural patterns are supported in a variety of
commercial offthe-shelf (COTS) technologies
Architectural Patterns & Concrete Technologies
 Software technologies provide reusable,
application-independent software
infrastructures that implement proven
architectural approaches
 Competing commercial and open source
products exist (BLESSING)
 Superficially similar
 Differs in features, implementations,
constraints, cost
 Selecting a product that has quality
attributes that satisfy the application
requirements is difficult (CURSE)
 No one-size-fits-all product available
 Identifying strengths & weaknesses of
a particular choice is difficult in early
stages
 Poor Choices  Failed Projects
References

Ian Gorton, Essential Software Architecture, Springer


Shaw & Garlan, Software Architecture – Perspectives On
An Emerging Discipline, PHI
R. Pressman, Software Engineering – A Practitioner’s
Approach, McGraw Hill
Pankaj Jalote, Integrated Software Engineering, Narosa
Publishing
Special Issue on Software Architecture, CSI
Communication, 2008
Notes from RMCS (UK)
Rational Suite – Online Help
More computer science
notes available at:
http://www.computer-science-notes.blogspot.com

Also linked through:


http://www.crossroadsbyzainvi.blogspot.com

Vous aimerez peut-être aussi