SDA-VideoLectures-LecThree-v2.pptx

Download Report

Transcript SDA-VideoLectures-LecThree-v2.pptx

CSE 303 – Software Design and
Architecture
LECTURE 03
Previous Lecture
• Design phase in SDLC – architecture and
detailed design
• Factors that affect design
• Quality Models
Outline
•
•
•
•
Good design
Quality attributes of software design
Software design principles
Concepts in design
GOOD DESIGN
Efficiency
• Efficiency refers to the responsiveness of
the system,
– i.e. the time required to respond to stimuli
(events),
– or the number of events processed in some
interval of time.
Efficiency
• The time to process a sequence of events can be
divided into three parts.
• First, time is needed to communicate between
different software components that collaborate to
process an event.
• Second, the computation times that components
executed may have overlaps or gaps between them.
• Third, the times are needed for each component to
complete its computation.
Correctness
• Correctness is the property that software
implements the specified users’
requirements.
• It is impossible that a design at any level
that does not correctly implement the
specified requirements would lead to a
correct implementation.
Reliability
• Reliability can be defined as the probability
that a system performs user required
functionality correctly
– at a specified environment in a given period of
time.
Portability
• Portability is the property of a software
system that can be easily transported from
one hardware/software platform to
another,
– for example, from a PC/Windows environment
to a Sun/Unix environment or a Macintosh
environment.
Maintainability
• Maintainability refers to the easiness of
maintaining a software system.
• There are two types of software maintenance
operations.
– corrective maintenance.
– adaptive maintenance.
• Well-structured design helps software
engineers to understand the system.
Reusability
• Reusability is the property of a software
system that its components can be easily
reused in the development of other
software systems.
– Reusability depends on the generality of the
components in a given application domain
and the extent to which the components are
parameterised and configurable.
Interoperability
• Interoperability is the property of how easy a
software system can be used with other
software systems.
• Interoperability mostly depends on the
interface between a software system and its
environment.
• It requires that the implementation of the
software follow certain standard interface and
coding conventions.
QUALITY ATTRIBUTES OF
SOFTWARE DESIGN
Quality Attributes – Design Objectives
• Modularity:
– The design should be composed of replaceable, selfcontained assemblies of elementary parts,
– thereby aiding both the initial development and the
later maintenance.
• Portability:
– The designed product should be able to be moved
unchanged
• from
test
environments
to
operational
environments and
• from one operational environment to another.
Quality Attributes – Design Objectives
• Flexibility or modifiability:
– The design should facilitate adaptation to changing enduser requirements,
• changes based on new problems in the end users’
world
• Conceptual integrity:
– The design should exhibit harmony, symmetry and
predictability.
• Well structured:
– The design should be consistent with chosen design
principles, such as information hiding, to organise the
structure of the design.
Quality Attributes – Design Objectives
• Simple:
– The design should be ‘as simple as possible, but
no simpler’.
• Efficient:
– The functions provided by the design should be
computable by using the available resources.
• Adequate:
– The design should meet the stated requirements.
Quality Attributes – Design Objectives
• Flexible:
– The design should be able to accommodate likely changes
in the requirements, however these might arise.
• Implementable:
– The functions offered by the design should be theoretically
computable with the information available and achievable
using currently available software and hardware
technology.
• Standardised:
– The design should be represented using standard or well
defined and familiar notation for any documentation.
Quality Attributes – Design Objectives
• Feasibility:
– The designed process of bringing about the product should
be executable.
• Simplicity:
– The production (i.e. the development) of the designed
software should be as simple and straightforward as
possible without unnecessary complication.
• Reliability:
– The designed development process should with high
probability be successful rather than fail to achieve its
goal.
SOFTWARE DESIGN PRINCIPLES
Software Design Principles
• Always consider alternative approaches
• The design should be traceable to the analysis
model
• The design should not reinvent the wheel
• The design should minimise intellectual distance
between the software and the problem as it exists in
the real world.
Software Design Principles contd…
• The design should exhibit uniformity and integration
– A design is uniform if it appears that one person
developed the whole thing.
– A design is integrated if care is taken in defining
interfaces between design components.
• The design should be reviewed to minimize
conceptual (semantic) errors
Software Design Principles contd…
• Design is not coding, coding is not design
– Even when detailed designs are created for program
components, the level of abstraction of the design
model is higher than source code.
• The design should be structured to accommodate
change
• The design should be assessed for quality as it is
being created
CONCEPTS IN DESIGN
23
Concepts in Software Design Process
• Abstraction
– Concentrate on a problem at some level of generalization
without regard to irrelevant low level details.
• Modularity
– Divide the software into separately named and
addressable components, that are integrated to satisfy the
problem requirements.
• Refinement
– Top down design strategy that successively refines the
levels of procedural details.
– Every refinement step involves Design Decisions.
Modular Design
•
•
•
•
•
•
•
•
Easier to manage
Easier to understand
Reduces complexity
Delegation / division of work
Fault isolation
Independent development
Separation of concerns
Reuse
Effective Modular Design
• How to decompose a software system into
best set of modules?
– Information hiding
– Cohesion
– Coupling
– Functional independence
Information Hiding
• Design the modules in such a way that information
(data & procedures) contained in one module is
inaccessible to other modules that have no need for
such information.
• Independent modules.
• Benefits:
– when modifications are required, it reduces the
chances of propagating to other modules.
Cohesion
• “A module should ideally do one thing.”
• Each module performs a single task requiring little
interaction with other modules.
• A cohesive module since accomplished neatly
defined single task so it can be re-used in other
projects
• High cohesion is good
– Changes are likely to be local to a module
– Easier to understand a module in isolation
Coupling
• A measure of interconnection among modules in a
software structure
• Depends on the interface complexity between the
modules
• High coupling causes problems
– Change propagation- ripple effect
– Difficulty in understanding
– Difficult reuse
Functional Independence
• A module having high cohesion and low coupling is said to
be functionally independent of other modules.
• Each module addresses a specific sub function of
requirements and is easier to maintain or modify
• Benefits:
– Error isolation
– Scope of Re-use
– Understandability
Summary
•
•
•
•
Good design
Quality attributes of software design
Software design principles
A few concepts in design