2. THE GOALS OF THIS MODULE
OVERALL GOAL
The goal is to teach you how to design
software architecture in a systematic,
predictable, repeatable, and cost-effective
way.
To teach you using a practical model to develop a
good software architecture design, to reason about
the system, which comprise software elements,
relations among them, and properties of both.
3. Insert Your Creative Idea
Objectives
ā¢ To explain what design is and how various types
of design deal with different aspects of a product
ā¢ To present design as problem solving and outline
the roles of abstraction and modeling in design
ā¢ To place design in the software life cycle
ā¢ To survey software engineering design methods
ā¢ To focus on Agile Framework
4. INTRODUCTION TO SOFTWARE DESIGN
TOPICS COVERED
1. Software products and software design
2. Abstraction and modeling
3. Varieties of design
4. Software design in the life cycle
5. Software engineering design method -
AGILE
6. What Is Software
Design?
Software Design is also a process to plan or convert the software requirements
into a step that are needed to be carried out to develop a software system.
There are several principles that are used to organize and arrange the structural
components of Software design. Software Designs in which these principles are
applied affect the content and the working process of the software from the
beginning.
7. 7
Importance of Software Design
ā¢ We live in a designed world.
ā¢ Design is economically important and effects our quality of life.
ā¢ The quality of software design has important consequences
that software designers should be aware of and take seriously.
8. Objective of Software Design
Correctness:
A good design should be correct i.e. it should correctly
implement all the functionalities of the system.
Efficiency:
A good software design should address the resources, time, and
cost optimization issues.
Understandability:
A good design should be easily understandable, for which it
should be modular and all the modules are arranged in layers.
Completeness:
The design should have all the components like data structures,
modules, and external interfaces, etc.
Maintainability:
A good software design should be easily amenable to change
whenever a change request is made from the customer side.
9. 9
Software Products
A software product is an entity comprised of
one or more programs, data, and supporting
materials and services that satisfies client needs
and desires either as an independent artifact or
as essential ingredient in some other artifact.
10. 10
Software Design Defined
Software design is the activity of
specifying the nature and composition of
software products that satisfy client needs
and desire, subject to constraints.
Software designers do what designers in other
disciplines do, except they do it for software
products.
11. 11
Design as Problem Solving
ā¢ An especially fruitful way to think about design is as problem solving.
ā¢ Advantages
ļ¼ Suggests partitioning information between problem and solution
ļ¼ Emphasizes that there may be more than one good solution (design)
ļ¼ Suggests techniques such as changing the problem, trial and error,
brainstorming, etc.
12. Software Design Process
ā¢ A Process is a set of related and (sequenced) tasks that
transforms a set of input to a set of output.
Inputs Outputs
Design
Process
requirements
specifications
design
specifications
sequence of tasks
Is this diagram very clear? What does the rectangle, arrow, or the circle mean?
------ What about the coloring and the lables?
14. Different Levels of Software Design
1. Architectural Design:
The architecture of a system can be viewed as the overall structure of the system & the way
in which structure provides conceptual integrity of the system. The architectural design
identifies the software as a system with many components interacting with each other. At this
level, the designers get the idea of the proposed solution domain.
2. Preliminary or high-level design:
Here the problem is decomposed into a set of modules, the control relationship among
various modules identified, and also the interfaces among various modules are identified.
The outcome of this stage is called the program architecture. Design representation
techniques used in this stage are structure chart and UML.
3. Detailed design:
Once the high-level design is complete, a detailed design is undertaken. In detailed design,
each module is examined carefully to design the data structure and algorithms. The stage
outcome is documented in the form of a module specification document.
16. 16
Abstraction
Abstraction is an important problem-solving
technique, especially in software design.
Abstraction is suppressing or ignoring
some properties of objects, events, or
situations in favor of others.
17. 17
Importance of Abstraction
ā¢ Problem simplification
ā¢ Abstracting allows us to focus on the most important
aspects of a problem in (partially) solving it.
ā¢ Structuring problem solving
ā¢ Top-down strategy: Solve an abstract version of the problem,
then add details (refinement)
ā¢ Bottom-up strategy: Solve parts of a problem and connect
them for a complete solution
18. 18
Modeling
A model represents a target by having model parts
corresponding to target parts, with relationships between
model parts corresponding to relationships between target
parts.
Target Model
19. 19
Modeling in Design
ā¢ Modeling is used for the following purposes:
ā¢ Problem understanding
ā¢ Design creation
ā¢ Design investigation
ā¢ Documentation
ā¢ Modeling work because models abstract details of the target.
ā¢ Models can fail if important and relevant details are left out.
21. 21
Static and Dynamic Models
A static design model represents aspects of programs that do
not change during program execution.
A dynamic model represents what happens during program
execution.
ā¢ Static model examples include class and object
models.
ā¢ Dynamic model examples of include state diagrams
and sequence diagrams.
22. 22
Product vs. Engineering Design
ā¢ Product designers are concerned with styling and aesthetics,
function and usability, manufacturability and manageability.
ā¢ Industrial designers, (building) architects, interior designers,
graphic designers, etc.
ā¢ Engineering designers are concerned with technical mechanisms
and workings.
ā¢ Structural, mechanical, chemical, and electrical engineers
ā¢ Design teams often include both product and engineering
designers.
23. 23
Software Product Design
Requires skills in user interface and interaction
design, communications, industrial design, and
marketing
Software product design is the
activity of specifying software product
features, capabilities, and interfaces to
satisfy client needs and desires.
24. 24
Software Engineering Design
Requires skills in programming, algorithms,
data structures, software design principles,
practices, processes, techniques, architectures,
and patterns
Software engineering design is
the activity of specifying programs
and sub-systems, and their
constituent parts and workings, to
meet software product specifications.
25. 25
Waterfall Life Cycle Model
Requirements
Specification
Design
Implementation
Testing
Maintenance
Software Product Life Cycle
The waterfall model
captures the logical,
but not the temporal,
relationships
between software
development
activities.
26. 26
Design Across the Life Cycle
Engineering Design
Product Redesign and
Engineering Redesign
Product Design
Requirements
Specification
Design
Implementation
Testing
Maintenance
Software Product Life Cycle
28. 28
Summary
ā¢ Software design is important.
ā¢ Software design is best thought of as problem solving.
ā¢ Abstraction is a fundamental design technique.
ā¢ Modeling (which relies on abstraction) is a basic design tool.
ā¢ Software design comprises both product and engineering design.
ā¢ Product design occurs mainly in the requirements specification phase;
engineering design mainly in the design and implementation phases.
ā¢ OO analysis and design methods are now dominant.
30. 30
Software Design Method
A software design method/tool
is an orderly procedure for
generating a precise and complete
software design solution that meets
clients needs and constraints.
31. 31
Design Method Components
ā¢ Design ProcessāA collection of related tasks that transforms a set of
inputs into a set of outputs
ā¢ Design NotationsāA symbolic representational system
ā¢ Design HeuristicsāRules providing guidance, but no guarantee, for
achieving some end
ā¢ Design methods also use design principles stating characteristics of design
that make them better or worse.
32. 32
Design Method Timeline
1971 Niklaus Wirth introduces stepwise refinement.
1974 Stevens, Myers, Constantine introduce structured design.
Late 1970s to early 1980s Structured analysis and design methods are
dominant.
Late 1980s Object-oriented analysis and design methods rise to
prominence.
1995 UML 0.8 is released.
2004 UML 2.0 is releasedā¦
34. What Is Agile?
Agile is an iterative and
responsive software
development methodology.
Features of Agile development
include high levels of
communication and
collaboration, fast and effective
responses to change, adaptive
planning, and continuous
improvement.
35. What Is Agile?
Agile is a project management
methodology that breaks down
larger projects into smaller,
manageable chunks known as
iterations. At the end of every
iteration (which typically takes
places over a consistent time
interval), something of value is
produced; which is placed into
the world to receive feedback
from stakeholders or users.
43. Look and feel where Software Design is
Software design provides a design plan that describes the elements of a system, how they fit, and work together to fulfill the requirement
of the system.
The objectives of having a design plan are as follows:
ā¢ To negotiate system requirements, and to set expectations with customers, marketing and management personnel.
ā¢ Act as a blueprint during the development process.
ā¢ Guide the implementation tasks, including detailed design, coding, integration, and testing.
ā¢ It comes before the detailed design, coding, integration, and testing and after the domain analysis, requirements analysis, and risk
analysis.