Professional Documents
Culture Documents
LECTURE 1-3
Rabia Iftikhar Disclaimer:
presentation
The
have
contents
been
of
taken
this
from
multiple sources, i.e. Books, Research
rabia.iftikhar@faculty.muet.edu.pk articles, Thesis publications, and
websites.
Fair Use Notice
There are many influences at work in its design, and the realization of these influences will
change depending on the environment in which the architecture is required to perform.
An architect designing a system for which the real-time deadlines are believed to be tight will make one set of
design choices; the same architect, designing a similar system in which the deadlines can be easily satisfied, will
make different choices. And the same architect, designing a non-real-time system, is likely to make quite different
choices still.
Even with the same requirements, hardware, support software, and human resources available, an architect
designing a system today is likely to design a different system than might have been designed five years ago.
A SOFTWARE ARCHITECT?
Software Architecture Design
Team
Application
Architecture
Realization
Software
Architecture
STRUCTURE MATTERS
Dijkstra 1968:
◦ “…Correct arrangement of the structure of the software systems before programming…”
◦ Layered structure for easier development.
Parnas 1972:
◦ “… selected criteria for the decomposition of the system impact the structure of the programs and
several design principles must be followed to provide a good structure…”
◦ Examples: separation of concerns, hierarchical structures, program families (reuse).
EVOLUTION OF SOFTWARE
SYSTEMS
Software problems have changed in nature(algorithmic to general purpose applications)
increased complexity to millions lines of code
It has now become hard/impossible to develop system without architecture
Software Architecture Definitions
DEFINITIONS FROM THE CLASS…
Basic artifact shown to the customers and made from the requirements.
Breaking down of the system into components
And describing the interrelations between the components
A prototype of the system
Identify the components of the system along with the interaction between them
Its an abstraction of the system
Earliest artifact
SOFTWARE ARCHITECTURE- Booch
1991
“The logical and physical structure of a system, forged by all the strategic and tactical decisions
applied during development.”
Architecture is the high level structure of a system.
SOFTWARE ARCHITECTURE- Perry
and Wolf 92
Perry and Wolf distinguish between processing elements, data elements, and connecting
elements, and this taxonomy of architectural elements largely persists through most other
definitions and approaches.
SOFTWARE ARCHITECTURE- IEEE
“Software architecture is the fundamental organization of a system, embodied in its
components, their relationships to each other and their environment, and the principles
governing its design and evolution.”
SOFTWARE ARCHITECTURE –
BASS, CLEMENTS, KAZMAN
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.
WHAT IS SOFTWARE DESIGN
Software design is the process by which we create a specification of a software artifact, using a
set of primitive components and subject to constraints.
The process of defining the architecture, components, interfaces, and other characteristics of a
system or component.
DIFFERENCE
Software architecture deals with high level concepts without regard to any implementation
details. Software design on the other hand takes high level concepts and applies concrete details
so that software can be implemented.
Every architectural work is a kind of design, but the reverse is not true
It's about addressing those architecturally significant requirements (the "what") that will
drive (and constrain) the "how" (the design).
What does SA address?
Complexity of software systems increased
Developing software: hundreds/ thousands person-years
Many software systems: complex as skyscrapers
Designing software
Beyond algorithms/ data structures of the computation
New kind of problem: overall system structure
An important criteria for building complex software is: does it have a good SA, understood by
stakeholders and developers?
SA
Provides a design plan of a system
Blueprint
Implies purpose
As indicated in the structure of the ABC, architecture activities have comprehensive feedback
relationships with each other.
Good and Bad Architectures
What Makes a "Good" Architecture?
If it is true that, given the same technical requirements for a system, two different architects in different organizations
will produce different architectures, how can we determine if either one of them is the right one?
There is no such thing as an inherently good or bad architecture. Architectures are either more or less fit for some
stated purpose.
A distributed three-tier client-server architecture may be just the ticket for a large enterprise's financial management system but
completely wrong for an avionics application.
An architecture carefully crafted to achieve high modifiability does not make sense for a throw-away prototype.
The architect (or architecture team) should have the functional requirements for the system and an articulated,
prioritized list of quality attributes (such as security or modifiability) that the architecture is expected to satisfy.
The architecture should be well documented, with at least one static view and one dynamic view, using an agreed-on
notation that all stakeholders can understand with a minimum of effort.
The architecture should be circulated to the system's stakeholders, who should be actively involved in its review.
The architecture should be analyzed for applicable quantitative measures (such as maximum throughput) and
formally evaluated for quality attributes before it is too late to make changes to it.
Good and Bad Architectures
Process Recommendations
The architecture should lend itself to incremental implementation via the creation of a "skeletal" system
in which the communication paths are exercised but which at first has minimal functionality. This
skeletal system can then be used to "grow" the system incrementally, easing the integration and testing
efforts.
The architecture should result in a specific (and small) set of resource contention areas, the resolution
of which is clearly specified, circulated, and maintained.
Good and Bad Architectures
Product Recommendations
The architecture should feature well-defined modules whose functional responsibilities are allocated on
the principles of information hiding and separation of concerns.
Each module should have a well-defined interface that encapsulates or "hides" changeable aspects
(such as implementation strategies and data structure choices) from other software that uses its
facilities. These interfaces should allow their respective development teams to work largely
independently of each other.
Quality attributes should be achieved using well-known architectural tactics specific to each attribute.
The architecture should never depend on a particular version of a commercial product or tool. If it
depends upon a particular commercial product, it should be structured such that changing to a different
product is straightforward and inexpensive.
Good and Bad Architectures
Product Recommendations
Modules that produce data should be separate from modules that consume data. This tends to increase modifiability
because changes are often confined to either the production or the consumption side of data. If new data is added,
both sides will have to change, but the separation allows for a staged (incremental) upgrade.
For parallel-processing systems, the architecture should feature well-defined processes or tasks that do not
necessarily mirror the module decomposition structure.
Every task or process should be written so that its assignment to a specific processor can be easily changed, perhaps
even at runtime.
The architecture should feature a small number of simple interaction patterns. That is, the system should do the
same things in the same way throughout. This will aid in understandability, reduce development time, increase
reliability, and enhance modifiability. It will also show conceptual integrity in the architecture, which, while not
measurable, leads to smooth development.
Why is Software Architecture important?
Architecture is the vehicle for stakeholder communication
Architecture manifests the earliest set of design decisions
Constraints on implementation
Dictates organizational structure
Inhibits or enable quality attributes
Architecture is the structure, including the principles and guidelines governing their design and
evolution over time