2. The material used in this presentation i.e., pictures/graphs/text, etc. is solely
intended for educational/teaching purpose, offered free of cost to the students for
use under special circumstances of Online Education due to COVID-19 Lockdown
situation and may include copyrighted material - the use of which may not have
been specifically authorised by Copyright Owners. It’s application constitutes Fair
Use of any such copyrighted material as provided in globally accepted law of many
countries. The contents of presentations are intended only for the attendees of the
class being conducted by the presenter.
Fair Use Notice
4. INTRODUCTION
âť–A software architecture is developed as the first step toward designing a system that has a
collection of desired properties.
âť–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.
âť–Architecture serves as an important communication, reasoning, analysis, and growth tool for
systems.
âť–In a nutshell, if you know the requirements for a system, you can build the architecture for it.
5. INTRODUCTION
âť–Where Do Architectures Come From?
âť–An architecture is the result of a set of business and technical decisions.
âť–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.
âť–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.
7. 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).
8. 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
10. 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
11. 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.
12. 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.”
13. 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.
14. 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.
15. 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
16. It's about addressing those architecturally significant requirements (the "what") that will
drive (and constrain) the "how" (the design).
17. 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?
18. SA
âť–Provides a design plan of a system
âť– Blueprint
âť– Implies purpose
âť– Is an abstraction that helps in managing the complexity of a system
âť– Software architects are limited by
âť– Lack of standardized ways to represent architecture
âť– Lack of analysis methods to predict whether an architecture will result in an implementation that
meets the requirements
19. SA goal
âť–One should strive for a good architecture
âť– When system is implemented according to the architecture, it meets its requirements and resource
budget
âť– It is possible to implement system according to architecture
âť– Not good enough when
âť– Not explicit or not comprehensive or not consistent or not understandable
20. TERMINOLOGY
1. Architectural style/pattern:
âť–Defines element types and how they interact together with a set of constraints
âť–Sometimes defines a mapping of functionality to architectural elements
âť–An architectural style determines the vocabulary of components and connectors that can be used in
instances of that style, together with a set of constraints on how they can be combined. These can
include topological constraints on architectural descriptions (e.g., no cycles). Other constraints—say,
having to do with execution semantics—might also be part of the style definition
âť–E.g. Client Server Architectural Pattern.
21. The following table lists the major areas of focus and the corresponding architectural styles.
22. 2. Reference/domain specific architecture:
âť–Defines element types and how they interact
âť–They apply to a particular domain
âť–They define how the domain functionality is mapped to architectural(software) elements.
TERMINOLOGY
23. 3. Product line architecture:
âť–A software product line is a set of software-intensive systems that share a common, managed set of
features satisfying the specific needs of a particular market segment or mission and that are developed
from a common set of core assets in a prescribed way.
âť–Applies to a set of products within a company
âť–Defines element types, how they interact, how the product functionality is mapped to them
âť–May also define some of the instances of the architectural Elements. E.g., error-reporting components
would be common to many products of the product line
TERMINOLOGY
24. 4. Software Architecture:
âť–Applies to one system
âť–Describes element types, how they interact, how the product functionality is mapped to them
âť–Describes the instances that exist in the system
âť–Level of specificity needed to design a system
TERMINOLOGY
25.
26. QUESTION
âť–What do you think would happen if same requirements were given to two different architects
of different organizations?
27. Architecture Business Cycle
âť–Software architecture is a result of technical, business, and social influences. Its existence in
turn affects the technical, business, and social environments that subsequently influence future
architectures. We call this cycle of influences, from the environment to the architecture and
back to the environment, the ABC.
❖Organizational goals-> requirements->SA-> systems-> future new organizational goals-> …
âť– We begin building the ABC by identifying the influences to and from architectures.
âť–Architectures are influenced by:
â—¦ System Stakeholders
â—¦ Developing Organization
â—¦ Experience of Architects
â—¦ Technical Environment
29. Architecture Business Cycle
âť–Architecture affects following factors
â—¦ Structure of the developing organization
â—¦ Goals of the developing organization
â—¦ Customer requirements for the next system
◦ Architect’s experience for subsequent systems
â—¦ Technical Environment
30. Architectures Business Cycle and
Software Processes
âť–Software process is the term given to the organization and management of software development
activities.
âť–What activities are involved in creating a software architecture, using that architecture to realize a design,
and then implementing or managing the evolution of a target system or application? These activities
include the following:
âť–Creating the business case for the system
âť–Understanding the requirements
âť–Creating or selecting the architecture
âť–Documenting and communicating the architecture
âť–Analyzing or evaluating the architecture
âť–Implementing the system based on the architecture
âť–Ensuring that the implementation conforms to the architecture
âť–As indicated in the structure of the ABC, architecture activities have comprehensive feedback
relationships with each other.
31. 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.
âť–We divide our observations into two clusters:
âť–process recommendations and
âť–product (or structural) recommendations.
32. Good and Bad Architectures
âť–Process Recommendations
âť–The architecture should be the product of a single architect or a small group of architects with an identified leader.
âť–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.
33. 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.
34. 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.
35. 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.
36. 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 a transferable abstraction of a system
â–Ş Product lines share a common architecture
â–Ş Basis for training