This document provides an introduction to software design principles and methods. It discusses the overall goal of teaching a systematic and repeatable approach to software architecture design. Key topics covered include software products and design, abstraction and modeling, different types of design, the role of design in the software lifecycle, and an introduction to the Agile software engineering design method. The document provides definitions and explanations of important software design concepts.
Introduction to software design, goals to teach systematic architecture and practical models.
Discusses software design principles, importance, objectives like correctness, efficiency, and maintainability. Explores design as problem solving, defining levels of architectural, high-level, and detailed design.
Focuses on abstraction in problem-solving and modeling as tools for design understanding and documentation.
Explains static and dynamic models, differences between product vs engineering design, and skills required.
Discusses software product life cycle using Waterfall model and design problem solutions.
Highlights importance of software design, categorized methods, and evolution timeline of design techniques.
Introduction to Agile focusing on iterative methods, team structure, and design principles for effective delivery.
Thank you note and tutorial session announcement with additional reading materials related to Agile.
THE GOALS OFTHIS 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 CreativeIdea
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 SOFTWAREDESIGN
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
What Is Software
Design?
SoftwareDesign 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 SoftwareDesign
• 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 SoftwareDesign
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 softwareproduct 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
Softwaredesign 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 ProblemSolving
• 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?
Different Levels ofSoftware 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
Abstraction
Abstraction is animportant 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 representsa 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
Static and DynamicModels
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. EngineeringDesign
• 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
Requiresskills 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
Requiresskills 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 CycleModel
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 theLife Cycle
Engineering Design
Product Redesign and
Engineering Redesign
Product Design
Requirements
Specification
Design
Implementation
Testing
Maintenance
Software Product Life Cycle
28
Summary
• Software designis 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
Software Design Method
Asoftware 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
1971Niklaus 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…
What Is Agile?
Agileis 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?
Agileis 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.
Look and feelwhere 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.