Vous êtes sur la page 1sur 42

Instructor: Ms.

Sonia Rafaqat
 Introduction to the discipline of design, generic design processes, and

design management; software product design, including analysis

activities such as needs elicitation and documentation, requirements

development activities such as requirements specification and

validation, prototyping, and use case modeling; engineering design

analysis, including conceptual modeling and both architectural and

detailed design; survey of patterns in software design, including

architectural styles and common mid-level design patterns.


1. Software Architecture and Design Illuminated, Kai Qian, Xiang Fu, Lixin Tao,
Chong-Wei Xu, Jorge L. Diaz-Herrera, Jones and Bartlett Publishers, 1st Edition,
2009 (or Latest Edition).
2. Introduction to Software Engineering Design: Processes, Principles and Patterns
with UML2, Christopher Fox, Addison-Wesley Professional, 2006 (or Latest
Edition).
3. Software Engineering Design: Theory and Practice, Carlos Otero, CRC Press, 2012
(or Latest Edition).
4. Software Engineering Techniques: Design for Quality, Krzysztof Sacha, Springer,
2006 (or Latest Edition).
Marks

1. Assignments (04) : 10
2. Quiz (04) : 10
3. Presentation : 05
4. Mid Term : 25
5. Final Term : 50

Total : 100

Passing Marks : 50
 Fundamental organization of a system, embodied in its components, their

relationships to each other and the environment, and the principles

governing its design and evolution. Architecture captures system structure

in terms of components and how they interact. It primarily focuses on

aspects such as performance, reliability, scalability, testability,

maintainability and various other attributes.

What & Where


 Software design is the activity of specifying the nature and composition of

software products that satisfy client needs and desires, subject to

constraints.

How
 In this section we will discuss in detail:

1. What Is Software Design?

2.Varieties of Design

3.Software Design in the Life Cycle

4.Software Engineering Design Methods


 Quality of designs in the world around us profoundly influences the quality

of our lives. Well-designed products function smoothly to enable or assist

us at work and at play. Poorly designed products frustrate us, decrease our

productivity, cost money and time, and may threaten our safety.

 In mechanical engineering, it is estimated that 85% of problems with new

mechanical products are design problems.


 Software is increasingly important as a determinant of our quality of life

and because of its economic impact. Software design is crucial, and

software designers must be aware of the importance of their work and of

their responsibilities for doing it competently and carefully.

 Software designers design software products, so we with begin by

considering what software products are.


 Software is any executable entity, such as a program, or its

parts, such as sub-programs.

 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 an essential ingredient in

some other artifact.


 A software product is not the same as a product with software in it. A car is

a product with software in it, but it is not itself a software product. Products

with software in them contain software products.

 Software products, such as operating systems or Web browsers, are not part

of some other product. We might term such products stand-alone software

products.
 Software design is the activity of specifying

the nature and composition of software

products that satisfy client needs and desires,

subject to constraints.
Thinking about design as problem solving has many advantages.

1. Information partitioning

First, it suggests that information may be partitioned between the problem

and the solution. One of the greatest sources of error and misunderstanding in

design is confusion over what is part of the problem and what is part of a

solution. For example, suppose that using a certain network configuration is

part of a design problem because the client company mandates it, but the
designers believe that it is part of a solution suggested by the client. The

designers may change the network configuration to produce a better solution,

not realizing that this makes the design unacceptable.

Or the designers may believe that some aspect of the program is part of the

problem when it is not, leading to a poor solution to the real problem.

Understanding what is part of the problem and what is part of the solution is

one of the first and most important rules of design.


2. Alternate Solution

A second advantage of thinking about design as problem solving is the

perspective it gives on design. There are usually many solutions to any

problem; some may be better than others, but often, several are equally

acceptable. Similarly, there are usually many reasonable designs for any

product. Some have drawbacks, but typically several are equally good.
3. Time-honored general problem solving techniques

A third advantage of thinking about design as problem solving is that it

suggests the use of time-honored general problem solving techniques in

design. Some of these techniques are:

 Changing the Problem a problem is too difficult, sometimes it can

be changed. Clients may be willing to

relax or modify their desires, particularly


when offered a solution to a slightly

different problem that still meets their

ultimate goals.

 Trial and Error Problem solving is an inherently iterative

activity, and design should be, too.

 Brain storming The first solution that comes to mind is

rarely the best, and different parts of


solutions often come from different

people. Brainstorming is a valuable

problem-solving technique that works well

in design.
Abstraction

A general problem-solving technique of particular importance in design is

abstraction. Abstraction is suppressing or ignoring some properties of objects,

events, or situations in favor of others.

Abstraction is an important problem-solving technique for two reasons:


1. Problem Simplification Real problems always have many

details irrelevant to their solution.

Designers only focus on

information required to solve the

problem.

2. Structuring Problem Solving Many design problems are too

large and complex to solve all at


once. One way to attack such a problem is to solve an abstract version of the

problem, then enhance the solution to account for more and more detail. We

call this process refinement. This top-down strategy is very common in

design. Refinement continues until the entire design problem is solved.

Designers often work partly using a bottom-up strategy, solving pieces of a

complex problem in detail, then connecting the solved pieces to form a

solution to the entire problem. This usually works only when a top-down
framework already exists. The top-down problem-solving approach, based on

abstraction, is the dominant strategy for large-scale design problem solving.

The use of abstraction for problem simplification is the basis for modeling.

Model

is an entity used to represent another entity(the target) by establishing:

 a correspondence between the elements of the target and the elements

of the model
 and also correspondence between relationship among the elements of

the target and relationships between the elements of the model.


There are also parts and relationships in the target that are not captured in the

model, and parts and relationships in the model that do not correspond to

anything in the target. This highlights the fact that models are not perfect

renditions of their targets.

(Note: Discussed this in detail in class with the help of railroad model

example)
 Abstraction is essential in modeling. Models represent only some of the

parts, properties, and relationships of a target otherwise they would be

copies rather than models. The fact that models are abstractions of their

targets is the key to the greatest strengths of modeling.

 Abstraction is also the source of the greatest weakness of modeling. If

important parts or relationships are missing from a model, or if the

behaviors or properties of the model do not closely enough approximate


the behaviors and properties of the target, a model can produce

misunderstandings leading to incorrect predictions, conclusions, and

solutions. Knowing how and what to abstract is a key skill in modeling. So is

the ability to use models with an understanding of what they can't do.

Modeling in Design

 If design is problem solving, then one might expect modeling to be a

central tool in all design disciplines. Models are useful in design in three

ways:
1. Problem Understanding

Designers must understand design problems and constraints before

they can create solutions. Models can help represent and explore

problems.

2. Design Creation and Investigation

Floor plans, elevations, schematics, blueprints, and diagrams of all

sorts are the mainstays of design creation and investigation in most


disciplines. Mock-ups, partial implementations, and physical scale

models are also widely used and allow investigation through

simulation and testing.

3. Documentation

Models developed to understand, create, and investigate are also used

to document designs for implementation and maintenance. Additional

models are sometimes made just for documentation.


 Most software design models are symbolic representations, though

programs that implement part of the final result (prototypes) are sometimes

used. Software design problems and solutions are often complex, and many

aspects of software systems must be modeled. Consequently, many kinds

of models are used in software design.

 Software design models may be divided into two broad classes:


 Software design models may be divided into two broad classes:

 Static models

 Dynamic models
Static models

 A static design model represents aspects of programs that do not change

during program execution.

Dynamic model

 A dynamic design model represents what happens during program

execution.

(Note: discussed the difference of both in detail with the help of examples in class)
Product Design

 Product design is mainly concerned with styling and aesthetics, function

and usability, manufacturability and manageability, and social and

psychological roles and effects of artifacts and services. They are less

concerned with, and largely unqualified to specify, the inner structure and

working of technically complex products. Product designers handle the

"externals" of product.
Engineering Design

 Technical matters are the province of engineering design, the activity of

specifying the technical mechanisms and workings of a product. Engineers

receive specialized training in applying scientific and mathematical -

techniques to the specification of efficient, reliable, safe, and cost-effective

mechanisms, systems, and processes to realize a product.


 Software design is such as the design of other artifacts when it comes to the

roles of product designers and engineers.


 Software design is such as the design of other artifacts when it comes to the

roles of product designers and engineers.


 (Note: Detailed SDLC is provided in the “introduction to software

engineering” notes and also discussed in class. Consult those notes for

guidance)
 A software design method is an orderly procedure for generating a precise

and complete software design solution that meets client needs and

constraints. A method typically specifies the following items:

a. Design Process A process is a collection of related tasks that

transforms a set of inputs into a set of outputs. Most methods specify

quite detailed instructions about each step of a design process, what

inputs are required, and what the intermediate and final outputs should

be.
b. Design notations A notation is a symbolic representational

system. Most design methods specify particular design notations and

how and where they should be used in the design process. The Unified

Modeling Language (UML) is a collection of object-oriented design

notations that can be used with almost any object-oriented design

method.
c. Design heuristics A heuristic is a rule providing guidance,

but no guarantee, for achieving some end. A design method's heuristics

generally provide advice about following its process and using its

notations. An example of a process heuristic is, "Do static modeling

before dynamic modeling."


Try not to become a
man of Success but
rather to become a
man of
Value

Vous aimerez peut-être aussi