You are on page 1of 68

SOFTWARE

MODULE-1
ARCHITECTURE
MODULE-1
PART A
• What is Software Architecture?
– What is Software Architecture?
– Other Points of View
SYL
– Architectural Patterns LAB
– Reference Models US
– Reference Architectures
– Importance of Software Architecture
– Architectural Structures and views
MODULE-1
PART B
• ENVISIONING ARCHITECTURE
– Architecture Business Cycle
– Architectures influences SYL
– Software Processes and the LAB
Architecture Business Cycle US
– Making of Good Architecture
SOFTWARE ARCHITECTURE
• Architecture serves as a blueprint for a system.

• It provides an abstraction to manage the system complexity


and establish a communication and coordination mechanism
among components. 

• Every software development process is carried out by


following some sequential steps which comes under
this Software Development Life Cycle (SDLC).
SOFTWARE ARCHITECTURE
• In the design phase of SDLC the software architecture is defined
and documented.

• Software Architecture defines fundamental organization of a


system and more simply defines a structured solution.

• It defines how components of a software system are assembled,


their relationship and communication between them.

• It serves as a blueprint for software application and development


basis for developer team.
WHAT IS SOFTWARE ARCHITECTURE?

If a project has not achieved a system architecture,


including its rationale, the project should not
proceed to full-scale system development.
Specifying the architecture as a deliverable enables
its use throughout the development and
maintenance process.

—Barry Boehm
WHAT IS SOFTWARE ARCHITECTURE?
What Software Architecture Is and What It Isn't
• Figure taken from a system description for an underwater acoustic
simulation, to describe that system's "top-level architecture" and is
precisely the kind of diagram most often displayed to help explain an
architecture. Exactly what can we tell from it?
WHAT IS SOFTWARE ARCHITECTURE?
What Software Architecture Is and What It Isn't
• Is this an architecture?

• Assuming that architecture is a set of components and


connections among them, this diagram seems to fill the bill.

• However, even if we accept the most primitive definition,


what can we not tell from the diagram?
WHAT IS SOFTWARE ARCHITECTURE?
What Software Architecture Is and What It Isn't
• What is the nature of the elements?
• What is the significance of their separation?
• Do they run on separate processors?
• What are the responsibilities of the elements?
• What is it they do?
• What is their function in the system?
• What is the significance of the connections?
• Does it call the other three elements, and are the others not
allowed to call it?
WHAT IS SOFTWARE ARCHITECTURE?
What Software Architecture Is and What It Isn't
• We must raise these questions because unless we know
precisely what the elements are and how they cooperate to
accomplish the purpose of the system, diagrams such as these
are not much help and should be regarded skeptically.

• This diagram does not show a software architecture, at least


not in any useful way.

• We now define what does constitute a software architecture?


WHAT IS SOFTWARE ARCHITECTURE?

What Software Architecture Is and What It Isn't


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.
WHAT IS SOFTWARE ARCHITECTURE?

What Software Architecture Is and What It Isn't


• First, architecture defines software elements.

• The architecture embodies information about how


the elements relate to each other.

• This means that it specifically omits certain


information about elements that does not pertain to
their interaction.
WHAT IS SOFTWARE ARCHITECTURE?
What Software Architecture Is and What It Isn't
• Second, the definition makes clear that systems can and do comprise
more than one structure and that no one structure can irrefutably claim
to be the architecture.

• Third, the definition implies that every computing system with software
has a software architecture because every system can be shown to
comprise elements and the relations among them.

• In the most trivial case, a system is itself a single element, uninteresting


and probably non-useful but an architecture nevertheless.
WHAT IS SOFTWARE ARCHITECTURE?
What Software Architecture Is and What It Isn't
• Fourth, the behavior of each element is part of the architecture in so far
as that behavior can be observed from the point of view of another
element.

• Such behavior is what allows elements to interact with each other,


which is clearly part of the architecture.

• Finally, the definition is indifferent as to whether the architecture for a


system is a good one or a bad one, meaning that it will allow or prevent
the system from meeting its behavioral, performance, and life-cycle
requirements.
OTHER POINTS OF VIEW
• Software architecture is a growing but still young discipline;
hence, it has no single, accepted definition.

• The study of software architecture has evolved by observation


of the design principles that designers follow and the actions
that they take when working on real systems.

• It is an attempt to abstract the commonalities inherent in


system design, and as such it must account for a wide range of
activities, concepts, methods, approaches and results.
OTHER POINTS OF VIEW
A few of the most often heard definitions are as follows
Architecture is high-level design
• Other tasks associated with design are not architectural,
such as deciding on important data structures that will be
encapsulated.

• The interface to those data structures is decidedly an


architectural concern, but their actual choice is not.
OTHER POINTS OF VIEW
Architecture is the overall structure of the system.
• This common refrain implies (incorrectly) that systems have
but one structure.

• We know this to be false, and, if someone takes this position,


it is usually entertaining to ask which structure they mean.

• The multiplicity of structures in an architecture lies at the


heart of the concept.
OTHER POINTS OF VIEW
Architecture is the structure of the components of a program
or system, their inter-relationships, and the principles and
guidelines governing their design and evolution over time.
• Many people claim that architecture includes a statement of
stakeholder needs and a rationale for how those needs are
met.

• Any system has an architecture that can be discovered and


analyzed independently of any knowledge of the process by
which the architecture was designed or evolved.
OTHER POINTS OF VIEW
Architecture is components and connectors
• Connectors imply a runtime mechanism for transferring
control and data around a system.

• This makes the non-runtime architectural structures such as


the static division into responsible units of implementation
second-class citizens.

• When we speak of "relationships" among elements, we


intend to capture both runtime and non-runtime
relationships.
ARCHITECTURAL PATTERNS, REFERENCE
MODELS AND REFERENCE ARCHITECTURES
ARCHITECTURAL PATTERN
An architectural pattern is a description of element and
relation types together with a set of constraints on how they
may be used.

• A pattern can be thought of as a set of constraints on an


architecture, on the element types and their patterns of
interaction and these constraints define a set or family of
architectures that satisfy them.
ARCHITECTURAL PATTERNS, REFERENCE
MODELS AND REFERENCE ARCHITECTURES
ARCHITECTURAL PATTERN contd.,
• For example, client-server is a common architectural pattern.

• Client and server are two element types, and their


coordination is described in terms of the protocol that the
server uses to communicate with each of its clients.

• Use of the term client-server implies only that multiple clients


exist and there is no discussion of what functionality, other
than implementation of the protocols, has been assigned to
any of the clients or to the server.
ARCHITECTURAL PATTERNS, REFERENCE
MODELS AND REFERENCE ARCHITECTURES
ARCHITECTURAL PATTERN contd.,
• An architectural pattern is not an architecture, then,
but it still conveys a useful image of the system it
imposes, useful constraints on the architecture and
in turn, on the system.

• Choosing an architectural pattern is often the


architect's first major design choice.
ARCHITECTURAL PATTERNS, REFERENCE
MODELS AND REFERENCE ARCHITECTURES
REFERENCE MODEL
A reference model is a division of functionality
together with data flow between the pieces.
• A reference model is a standard decomposition of a
known problem into parts that cooperatively solve
the problem.

• Arising from experience, reference models are a


characteristic of mature domains.
ARCHITECTURAL PATTERNS, REFERENCE
MODELS AND REFERENCE ARCHITECTURES
REFERENCE MODEL
• Can you name the standard parts of a compiler or a
database management system?

• Can you explain in broad terms how the parts work


together to accomplish their collective purpose?

• If so, it is because you have been taught a reference


model of these applications.
Components of a Compiler
Components of a DBMS
ARCHITECTURAL PATTERNS, REFERENCE
MODELS AND REFERENCE ARCHITECTURES
REFERENCE ARCHITECTURE
A reference architecture is a reference model mapped
onto software elements that cooperatively implement
the functionality defined in the reference model and the
data flows between them.
ARCHITECTURAL PATTERNS, REFERENCE
MODELS AND REFERENCE ARCHITECTURES
REFERENCE ARCHITECTURE contd.,
• Whereas a Reference Model divides the functionality, a
Reference Architecture is the mapping of that functionality
onto a system decomposition.

• The mapping may be, but by no means necessarily is, one to


one.

• A software element may implement part of a function or


several functions.
ARCHITECTURAL PATTERNS, REFERENCE
MODELS AND REFERENCE ARCHITECTURES
• Reference models, architectural patterns, and reference
architectures are not architectures; they are useful concepts
that capture elements of an architecture.

• Each is the outcome of early design decisions.

• The relationship among these design elements is shown in


Figure
IMPORTANCE OF SOFTWARE ARCHITECTURE

• From a technical perspective, there are


fundamentally three reasons for software
architecture's importance.
– Communication among stakeholders

– Early design decisions

– Transferable abstraction of a system


IMPORTANCE OF SOFTWARE ARCHITECTURE

COMMUNICATION AMONG STAKEHOLDERS


• Software architecture represents a common
abstraction of a system that most if not all of the
system's stakeholders can use as a basis for
– mutual understanding
– negotiation
– consensus
– communication
IMPORTANCE OF SOFTWARE ARCHITECTURE

EARLY DESIGN DECISIONS


• Software architecture manifests the earliest design
decisions about a system, and these early bindings
carry weight with respect to the system's remaining
development, its deployment, and its maintenance
life.

• It is also the earliest point at which design decisions


governing the system to be built can be analyzed.
IMPORTANCE OF SOFTWARE ARCHITECTURE

TRANSFERABLE ABSTRACTION OF A SYSTEM


• Software architecture constitutes a relatively small,
intellectually graspable model for how a system is
structured and how its elements work together, and
this model is transferable across systems.

• In particular, it can be applied to other systems


exhibiting similar quality attribute and functional
requirements and can promote large-scale re-use.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture is the vehicle for stakeholders communication

• Each stakeholder of a software system customer,


user, project manager, coder, tester and so on is
concerned with different system characteristics that
are affected by the architecture.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture is the vehicle for stakeholders communication


• For example, the user is concerned that the system is reliable and
available when needed.

• The customer is concerned that the architecture can be implemented


on schedule and to budget.

• The manager is worried that the architecture will allow teams to work
largely independently, interacting in disciplined and controlled ways.

• The architect is worried about strategies to achieve all of those goals.


IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture is the vehicle for stakeholders communication


• Architecture provides a common language in which different concerns
can be expressed, negotiated, and resolved at a level that is
intellectually manageable even for large, complex systems.

• Without such a language, it is difficult to understand large systems


sufficiently to make the early decisions that influence both quality and
usefulness.

• Architectural analysis depends on level of communication and


enhances it.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture manifests the earliest set of design decisions


• Software architecture represents a system's earliest set of
design decisions.

• These early decisions are the most difficult to get correct and
the hardest to change later in the development process, and
they have the most far-reaching effects.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture defines constraints on implementation


• The implementation must be divided into the prescribed
elements, the elements must interact with each other in the
prescribed fashion, and each element must fulfill its
responsibility to the others as dictated by the architecture.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture dictates organizational structure


• Not only does architecture prescribe the structure of the
system being developed, but that structure becomes
engraved in the structure of the development project.

• The normal method for dividing up the labor in a large


system is to assign different groups different portions of the
system to construct.

• This is called the work breakdown structure of a system.


IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture inhibits or enables a system’s quality attributes


• Whether a system will be able to exhibit its desired quality
attributes is substantially determined by its architecture.

• If your system requires high performance, you need to manage the


time-based behavior of elements and the frequency and volume
of inter-element communication.

• If modifiability is important, you need to assign


responsibilities to elements such that changes to the system
do not have far-reaching consequences.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture inhibits or enables a system’s quality attributes


• If your system must be highly secure, you need to manage
and protect inter-element communication and which
elements are allowed to access which information.

• You may also need to introduce specialized elements (such


as a trusted kernel) into the architecture.

• If you believe scalability will be needed in your system, you


have to carefully localize the use of resources to facilitate
the introduction of higher-capacity replacements.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture helps in Evolutionary Prototyping


• Once an architecture has been defined, it can be analyzed and
prototyped as a skeletal system.

• This aids the development process in two ways.


1. The system is executable early in the product's life cycle.

– Its fidelity increases as prototype parts are replaced by complete


versions of the software.

– These prototype parts can be a lower-fidelity version of the final


functionality or they can be surrogates that consume and produce
data at the appropriate rates.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture helps in Evolutionary Prototyping


2. A special case of having the system executable early is that
potential performance problems can be identified early in
the product's life cycle.

• Each of these benefits reduces the risk in the project.

• If the architecture is part of a family of related systems, the


cost of creating a framework for prototyping can be
distributed over the development of many systems.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture enables more accurate cost and schedule


estimates
• Cost and schedule estimates are an important management
tool to enable the manager to acquire the necessary
resources and to understand whether a project is in trouble.

• Cost estimations based on an understanding of the system


pieces are, inherently, more accurate than those based on
overall system knowledge.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture as a transferable, re-usable model


• The earlier in the life cycle re-use is applied, the greater the
benefit that can be achieved.

• While code re-use is beneficial, re-use at the architectural


level provides tremendous leverage for systems with similar
requirements.

• Not only code can be re-used but so can the requirements


that led to the architecture in the first place.
IMPORTANCE OF SOFTWARE ARCHITECTURE

Architecture can be the basis for training


• The architecture, including a description of how elements
interact to carry out the required behavior, can serve as the
introduction to the system for new project members.

• This reinforces our point that one of the important uses of


software architecture is to support and encourage
communication among the various stakeholders.

• The architecture is a common reference point.


ARCHITECTURAL STRUCTURES AND VIEWS

• Modern systems are more than complex enough to make it


difficult to grasp them all at once.

• Instead, we restrict our attention at any one of the software


system's structures.

• To communicate meaningfully about an architecture, we


must make clear which structure or structures we are
discussing at the moment i.e., which view we are taking of
the architecture.
ARCHITECTURAL STRUCTURES AND VIEWS

• A view is a representation of a coherent set of architectural


elements, as written by and read by system stakeholders.

• A structure is the set of elements itself, as they exist in


software or hardware.

• For example, a module structure is the set of the system's


modules and their organization.

• A module view is the representation of that structure, as


documented by and used by some system stakeholders.
ARCHITECTURAL STRUCTURES AND VIEWS

• Architectural structures can be divided into three


groups, depending on the broad nature of the
elements they show.
– Module Structures

– Component-and-Connector Structures

– Allocation Structure
ARCHITECTURAL STRUCTURES AND VIEWS

Module Structures
• Here the elements are modules, which are units of
implementation.

• Module structures allow us to answer questions such as


– What is the primary functional responsibility assigned to each
module?
– What other software elements is a module allowed to use?
– What other software does it actually use?
– What modules are related to other modules by generalization or
specialization (i.e., inheritance) relationships?
ARCHITECTURAL STRUCTURES AND VIEWS

Component-and-Connector Structures
Here the elements are
• Runtime Components
– which are the principal units of computation

• Connectors
– which are the communication vehicles among
components
ARCHITECTURAL STRUCTURES AND VIEWS

Component and Connector Structures


• Component-and-connector structures help answer questions
such as
– What are the major executing components and how do
they interact?
– What are the major shared data stores?
– Which parts of the system are replicated?
– How does data progress through the system?
– What parts of the system can run in parallel?
– How can the system's structure change as it executes?
ARCHITECTURAL STRUCTURES AND VIEWS

Allocation Structures
• Allocation structures show the relationship between the software
elements and the elements in one or more external environments in
which the software is created and executed.

They answer questions such as


• What processor does each software element execute on?

• In what files is each element stored during development, testing and


system building?

• What is the assignment of software elements to development teams?


ARCHITECTURAL STRUCTURES AND VIEWS

These three structures correspond to the three broad types of


decision that architectural design involves:
• How is the system to be structured as a set of code units
(modules)?

• How is the system to be structured as a set of elements that have


runtime behavior (components) and interactions (connectors)?

• How is the system to relate to non-software structures in its


environment (i.e., CPUs, file systems, networks, development
teams, etc.)?
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES - MODULES


• Module-based structures include the following
– Decomposition

– Uses

– Layered

– Class or generalization
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – MODULES


Decomposition
• The units are modules related to each other by the "is a sub-
module of" relation, showing how larger modules are
decomposed into smaller ones recursively until they are small
enough to be easily understood.

• Modules in this structure represent a common starting point for


design, as the architect enumerates what the units of software
will have to do and assigns each item to a module for
subsequent more detailed design and eventual implementation.
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – MODULES


Uses
• The units are related by the uses relation.

• One unit uses another if the correctness of the first requires


the presence of a correct version of the second.

• The uses structure is used to engineer systems that can be


easily extended to add functionality or from which useful
functional subsets can be easily extracted.
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – MODULES


Layered
• When the uses relations in this structure are carefully
controlled in a particular way, a system of layers emerges, in
which a layer is a coherent set of related functionality.

• In a strictly layered structure, layer n may only use the


services of layer n – 1.
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – MODULES


Class or Generalization
• The module units in this structure are called classes.

• The relation is "inherits-from" or "is-an-instance-of“.

• The class structure allows us to reason about re-use and the


incremental addition of functionality.
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES - COMPONENT-AND-CONNECTOR


• Component and Connector structures include the following
– Process or Communicating Processes

– Concurrency

– Shared data or Repository

– Client-Server
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – COMPONENT-AND-CONNECTOR


Process or Communicating Processes
• Like all component-and-connector structures, this one is
orthogonal to the module-based structures and deals with
the dynamic aspects of a running system.

• The units here are processes or threads that are connected


with each other by communication, synchronization, and/or
exclusion operations.
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – COMPONENT-AND-CONNECTOR


Process or Communicating Processes
• The relation is attachment, showing how the components
and connectors are hooked together.

• The process structure is important in helping to engineer a


system's execution performance and availability.
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – COMPONENT-AND-CONNECTOR


Concurrency
• This component-and-connector structure allows the
architect to determine opportunities for parallelism
and the locations where resource contention may
occur.

• The units are components and the connectors are


"logical threads."
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – COMPONENT-AND-CONNECTOR


Concurrency
• A logical thread is a sequence of computation that can be
allocated to a separate physical thread later in the design
process.

• The concurrency structure is used early in design to identify


the requirements for managing the issues associated with
concurrent execution.
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – COMPONENT-AND-CONNECTOR


Shared Data or Repository
• This structure comprises components and connectors that
create, store, and access persistent data.

• If the system is in fact structured around one or more shared


data repositories, this structure is a good one to illuminate.

• It shows how data is produced and consumed by runtime


software elements, and it can be used to ensure good
performance and data integrity.
ARCHITECTURAL STRUCTURES AND VIEWS

SOFTWARE STRUCTURES – COMPONENT-AND-CONNECTOR


Client-Server
• The components are the clients and servers, and the
connectors are protocols and messages they share to carry
out the system's work.

• This is useful for separation of concerns (supporting


modifiability), for physical distribution, and for load
balancing (supporting runtime performance).

You might also like