Chapter 1 - Introduction
Chapter 1 - Introduction
(Seng 6122)
1
Content
Introduction
Software Design
As per the IBM report, “31% of the project get cancelled before they are
completed, 53% overrun their cost estimates by an average of 189% and for every
100 projects, there are 94 restarts”.
Reasons
Projects running over-budget and over-time.
Software was very inefficient and of low quality
…
4
Introduction…
Software Architecture has role to reduce software project failure rate by
Tackling complexity
Enabling achievement of
quality requirements
etc.
However, …
5
Define Software Architecture
Software Engineers have always employed software architectures
Very often without realizing it!
Define Software Architecture…
What is your definition of software architecture?
More than150 definitions – “ What Is Your Definition of Software Architecture“
Definition
• The software architecture of a system is the set of structures needed to
reason about the system, which comprise software elements, relations
among them, and properties of both.
• Allocation structures
• mapping from software structures to the system’s organizational,
developmental, installation, and execution environments
• E.g. Work Assignment, Deployment, Implementation
8
Define Software Architecture…
Implications of the definition ….
Architecture Is an abstraction
• information that has no effects outside of a single element is omitted
• i.e. focuses on public aspects of interfaces
Architecture is not:
• system’s “early” or “major” design decisions
• About development
• About algorithms
• About data structures
11
Analogy with Building Architecture
Parallels
Satisfaction of customers’ needs
Specialization of labor
Multiple perspectives of the final product
Intermediate points where plans and progress are reviewed
Properties of structures are induced by the design of the architecture
The architect has a distinctive role and character
Architecture has matured over time into a discipline
Differences
We know a lot about buildings, much less about software
The nature of software is different from that of building architecture
Software is much more malleable than physical materials
The two “construction industries” are very different
Software deployment has no counterpart in building architecture
Software is a machine; a building is not 12
Architectural Structures and Views
• ….
Structure
The set of elements itself, as they
exist in software or hardware
14
Architectural Structures and Views…
• …..
15
Architectural Structures and Views…
Relating Structures to Each Other
Each of these structures provides a different perspective and each is valid
But they are not independent
Conflict of Quality-requirements
17
Why Is Software Architecture Important?...
2. Reasoning About and Managing Change
About 80 %of a typical software system’s total cost occurs after initial deployment
• accommodate new features, adapt to new environments, fix bugs, and so forth.
Every architecture partitions possible changes into three categories
Change Type The change Difficulty
local can be accomplished by modifying a single element. Easy and the most
desirable
Nonlocal requires multiple element modifications and Medium
underlying architectural approach remains intact
Architectural affects the fundamental ways in which the elements Difficult
interact with each other and will probably require
changes all over the system
Obviously, local changes are A good architecture is the one in which the most common changes
are local, and hence easy to make. 18
Why Is Software Architecture Important?...
3. Predicting System Qualities
Predicting system qualities is possible as we know that certain
kinds of architectural decisions lead to certain
quality attributes in a system,
The earlier you can find a problem in your design,
the cheaper, easier, and less disruptive it will be to fix.
19
Why Is Software Architecture Important?...
5. Early design decisions
SA is a manifestation of the earliest design decisions about a system
Each decision constrains the many decisions that follow.
20
Why Is Software Architecture Important?...
6. Defining Constraints on an Implementation
An implementation must exhibits an architecture
• Implementation must be implemented as the set of prescribed elements
• These elements must interact with each other in the prescribed fashion
• Each element must fulfill its responsibility to the other elements as dictated by the
architecture.
Each of these prescriptions is a constraint on the implementer.
Element builders may not be aware of the architectural tradeoffs—the architecture (or
architect) simply constrains them in such a way as to meet the tradeoffs.
• Example: an architect assigns performance budget to the pieces of software involved in some
larger piece of functionality.
• If each software unit stays within its budget, the overall transaction will meet its performance
requirement.
• Implementers of each of the constituent pieces may not know the overall budget, only their
own. 21
Why Is Software Architecture Important?...
7. Influencing the Organizational Structure
Architecture prescribes the structure of the system being developed or being
maintained
That structure becomes engraved in the structure of the development project (and
sometimes the structure of the entire organization).
The architecture is typically used as the basis for the work-breakdown structure.
The work-breakdown structure in turn dictates
• units of planning, scheduling, and budget
• interteam communication channels
• configuration control and file-system organization
• integration and test plans and procedures;
• much more
22
Why Is Software Architecture Important?...
8. Enabling Evolutionary Prototyping
Once an architecture has been defined, it can be analyzed and
prototyped as a skeletal system.
A software product line or family is a set of software systems that are all built using
the same set of reusable assets.
• Chief among these assets is the architecture that was designed to handle the
needs of the entire family.
• The architecture defines what is fixed for all members of the product line and
what is variable.
25
Why Is Software Architecture Important?...
11. Using Independently Developed Components
Architecture-based development often focuses on components that are likely to
have been developed separately, even independently, from each other.
The architecture defines the elements that can be incorporated into the system.
• COTS components,
• Open source software
• Publicly available apps
• Networked services
The payoff can be
• Decreased time to market
• Increased reliability
• Lower cost
• Flexibility
26
Why Is Software Architecture Important?...
12. Restricting Design Vocabulary
As useful architectural patterns are collected, we see the
benefit in voluntarily restricting ourselves to a relatively
small number of choices of elements and their interactions.
• We minimize the design complexity of the system we are building
• Enhanced reuse
• More regular and simpler designs that are more easily understood and
communicated
• More capable analysis
• Shorter selection time
• Greater interoperability.
Architectural patterns guide the architect and focus the architect on the quality
attributes of interest in large part by restricting the vocabulary of design.
• Properties of software design follow from the choice of an architectural pattern.
27
Why Is Software Architecture Important?...
13. Basis for Training
The architecture can serve as the first introduction to the system for new project
members.
Module views are excellent for showing someone the structure of a project
• Who does what, which teams are assigned to which parts of the system, and so
forth.
Component-and-connector views are excellent for explaining how the system is
expected to work and accomplish its job.
28
The Many Contexts of Software Architecture
Sometimes we consider software architecture the center of the universe!
• Project life cycle. How does a software architecture relate to the other phases of a
software development life cycle?
30
Project Life-cycle Context
Software development processes are standard approaches for developing
software systems.
They impose a discipline on software engineers and, more important, teams of
software engineers.
They tell the members of the team what to do next.
32
Business Context
Architectures serve some business purposes - the purposes may change over
time.
Development organizations want to make a profit, or capture market, ….
Customers want to make their lives easier or more productive.
Subcontractors or others, have their own goals dealing with the system.
Architects need to understand who the vested organizations are and what their
goals are.
Many of these goals will have a profound influence on the architecture.
Every quality attribute originate from some higher purpose that can be described
in terms of added value.
• “Why do you want this system to have a really fast response time?”
• This differentiate the product from its competition and let the developing organization
capture market share. 33
Business Context…
Some business goals will not show up in the form of requirements.
34
Professional Context
You will perform many duties beyond directly producing an architecture. Architects need
more than just technical skills.
Architects need to explain to one stakeholder or another the chosen priorities of different
properties, and why particular stakeholders are not having all of their expectations fulfilled.
Architects need diplomatic, negotiation, and communication skills.
Architects need the ability to communicate ideas clearly
You will need to manage a diverse workload and be able to switch contexts frequently.
You will need to be a leader in the eyes of developers and management.
35
Stakeholders
Know your stakeholders
as early as possible
37
What Do Architectures Influence?
Technical context
The architecture can affect stakeholder requirements for the next system
A customer may in fact be willing to relax some of their requirements to gain
advantages on reliability, schedule and economy.
Shrinkwrapped software has clearly affected people’s requirements by providing
solutions that are not tailored to any individual’s precise needs but are instead
inexpensive and of high quality.
Project context
The architecture affects the structure of the developing organization.
Teams are formed for individual software units; and the development, test, and
integration activities all revolve around the units.
Teams become embedded in the organization’s structure.
38
What Do Architectures Influence?...
Business context
The architecture can affect the business goals of the developing organization.
• A successful system built from an architecture can enable a company to establish
a foothold in a particular market segment.
Professional context
The process of system building will affect the architect’s experience with subsequent.
• A technical approach that enables to build successful system will be used again
and again in the subsequent system development
• Architectures that fail are less likely to be chosen for future projects.
39
Software Design
Definition: Design is a problem-solving process whose objective is to find
and describe a way:
To implement the system’s functional requirements...
while respecting the constraints imposed by non-functional requirements...
• Such as performance, maintainability, security, persistence, cost, reliability,
portability, etc…..(long list)
• including also the budget, technologies, environment, legal issues, deadlines, ...
and while adhering to general principles of good quality
40
Software Design Process
The system interfaces may be designed after the data structures have been specified.
42
Software Design Vs. Software Architecture
Software
Design
Architectural Detailed
Design Design
43
Possible Research Areas and Papers for presentation
1. Possible research problem
1. Software Architecture based
• software cost and schedule Estimation
• Software Development Effort estimation
2. Addressing quality-requirement conflicts (using Game Theory)
2. Paper Presentation
1. Identifying quality-requirement conflicts, by B.Boehm and H.In, 1996
• Assigned to: Abdirahman Ali , 18-Mar-2020
2. Identifying Requirements Conflicts and Cooperation: How Quality Attributes and
Automated Traceability Can Help, by Alexander Egyed and Paul Grunbacher, 2016
• Assigned to: Amsalu Tessema, 18-Mar-2020
3. Software Architectural Design in Agile Environments, by Mehdi Mekni et al., 2017
• Assigned to: Minasie Lemma and Yibeltal Alemu, 25-Mar-2020
44