Software Design-Chapter 6 Design Principles

0.0(0)
studied byStudied by 0 people
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
Card Sorting

1/90

encourage image

There's no tags or description

Looks like no tags are added yet.

Study Analytics
Name
Mastery
Learn
Test
Matching
Spaced

No study sessions yet.

91 Terms

1
New cards

Make it so simple there are obviously no deficiencies, or so complex there are no obvious deficiencies

What are the two ways to construct a software design according to C.A.R. Hoare?

2
New cards

Wicked problems and tame problems

What are the two layers of software problems?

3
New cards

Domains outside computer science (e.g., biology, business, sociology)

Where do wicked problems typically come from?

4
New cards

Open-ended, ill-defined, large, with evolving requirements

How are wicked problems characterized?

5
New cards

Web commerce application

Give an example of a wicked problem.

6
New cards

Tame problems

What kind of problems are in the lower layer of software design?

7
New cards

No, they can be complicated but are clearly defined and solvable

Are tame problems always easy?

8
New cards

Sorting and searching

Give an example of a tame problem.

9
New cards

Only after the problem is solved

When are requirements of a wicked problem fully known?

10
New cards

Not understood until after the solution is created

What is the first characteristic of a wicked problem (paraphrased)?

11
New cards

No stopping rule

What is the second characteristic of a wicked problem?

12
New cards

Solutions are not right or wrong—just better or worse

What is the third characteristic of a wicked problem?

13
New cards

Every wicked problem is novel and unique

What is the fourth characteristic of a wicked problem?

14
New cards

Every solution is a one-shot operation

What is the fifth characteristic of a wicked problem?

15
New cards

No given alternative solutions

What is the sixth characteristic of a wicked problem?

16
New cards

Requirements evolve with user feedback and it’s never really "done"

Why is word processing a wicked problem?

17
New cards

Linear, top-down (waterfall model)

What problem-solving model do most people follow for wicked problems?

18
New cards

Opportunity-driven (opportunistic) approach

What is the better approach for wicked problems?

19
New cards

Iterates between problem understanding and solution modeling

How does the opportunity-driven approach work?

20
New cards

Back-and-forth progress from requirements to prototype

What does the jagged line in Figure 6-2 represent?

21
New cards

Unclear requirements, evolving features, and no "right" answer

Why is a simple web app for a nonprofit a wicked problem?

22
New cards

1) Well-defined problem, 2) Definite stopping point, 3) Objective solution, 4) Similar to other problems, 5) Solutions can be tried/abandoned, 6) Limited alternatives

What are the six characteristics of a tame problem?

23
New cards

It is well-defined, has a stopping point, an objective result, similar problems, and a limited solution set

Why is sorting a tame problem?

24
New cards

They guide the approach to solving ill-formed problems without relying on the waterfall model

Why are design principles important in wicked problems?

25
New cards

messy

Design is {{_____}} because understanding of the problem evolves over time and design must adapt.

26
New cards

Changing understanding of the problem and evolving design over time.

What makes software design appear messy?

27
New cards

Because there are many alternatives and mistakes before finding a working solution.

Why is design considered messy even for tame problems?

28
New cards

Tradeoffs and priorities.

What is software design about?

29
New cards

Because most projects are time-limited.

Why do you need to prioritize features in software projects?

30
New cards

Time constraints force tradeoffs.

Why can't all customer features be implemented in a project?

31
New cards

It uses experience-based rules of thumb, not fixed procedures.

What does it mean that design is heuristic?

32
New cards

Over time, through experience and learning from others.

How do designers acquire heuristics?

33
New cards

It helps move quickly through easy parts and tackle the core problem.

What is the benefit of learning heuristics and patterns in design?

34
New cards

Learn from an experienced (master) designer.

What is the best way to learn design heuristics?

35
New cards

Because both tame and wicked problems evolve over time.

Why do good designers expect requirements to change?

36
New cards

The design also changes and evolves.

What happens when requirements change in software design?

37
New cards

By creating a flexible software architecture.

How can you prepare for changes in requirements?

38
New cards

To allow change with minimal impact on design and code.

What is the goal of good software architecture?

39
New cards

Fitness of purpose

{{____}} means your design must work correctly and satisfy requirements within platform constraints.

40
New cards

Separation of concerns

{{______}} refers to separating functional parts of a design to improve simplicity and maintenance.

41
New cards

Simplicity

{{_____}} in design helps others understand it and supports refactoring opportunities.

42
New cards

refactoring

In agile, {{_____}} is simplifying a design as soon as the opportunity arises.

43
New cards

Ease of maintenance

{{_______}} results from a coherent and simple design, making error-fixing easier.

44
New cards

Loose coupling

{{______}} means modules/classes interact only via interfaces, minimizing dependency and error propagation.

45
New cards

High cohesion

{______} describes a module/class with self-contained data and operations.

46
New cards

highly cohesive class

A {{______________}} has all necessary data and operations defined internally.

47
New cards
48
New cards

Extensibility

{_________}} is the ease of adding new features to a design, crucial for handling evolving requirements.

49
New cards

Portability

{{________}} is the ability of software to run across different platforms, involving OS, hardware, and UI considerations.

50
New cards

Model program elements after real-world objects to minimize intellectual distance.

What does the heuristic "Find real-world objects to model" suggest?

51
New cards

The gap between a real-world object and its program model.

What is intellectual distance in software design?

52
New cards

It keeps your design closer to the real-world problem.

Why minimize intellectual distance in design?

53
New cards

It manages complexity by hiding details and focusing on the core problem.

What is the key role of abstraction in software design?

54
New cards

Delay implementation details by shifting them higher or lower in the design.

What does abstraction allow you to do in design?

55
New cards

It isolates errors and changes by exposing only interfaces, not internal details.

Why is information hiding important in design?

56
New cards

Encapsulation.

What concept in OOP derives from information hiding?

57
New cards

Hides class details and allows interaction only through a public interface.

What does encapsulation achieve in OOP?

58
New cards

By using libraries to hide behavior and structs to hide state.

How can non-OOP programs apply information hiding?

59
New cards

Manageability, extensibility, maintainability, and isolating changes.

What does modularity in design help with?

60
New cards

It lets you focus on one part at a time and treat others as black boxes.

Why is modularity beneficial for the human brain?

61
New cards

Identify and isolate them to contain future changes.

What should you do with parts of your design likely to change?

62
New cards

Business rules, UI, hardware.

Give examples of things that may change in a software system.

63
New cards

Minimizing dependencies between modules or classes.

What is loose coupling in software design?

64
New cards

Use well-defined interfaces and abstract classes.

How can you implement loose coupling?

65
New cards

One module can change without affecting others.

What does loose coupling allow in terms of module changes?

66
New cards

They let you apply proven solutions to new problems.

What is the benefit of using common design patterns?

67
New cards

As refinements or extensions of existing programs.

How do experienced designers approach new programs?

68
New cards

Every piece of code or change should have a single, obvious location.

What is the Principle of One Right Place?

69
New cards

It simplifies debugging and maintenance.

Why follow the Principle of One Right Place?

70
New cards

To visualize program structure and flow for clarity and error spotting.

What is the purpose of using diagrams during design?

71
New cards

Whiteboards or paper.

What tools are suggested for drawing design diagrams?

72
New cards

A creative activity

What kind of activity is software design at its core?

73
New cards

The problem, problem domain, and target platform

What imposes formal restrictions on a software design?

74
New cards

Understand the problem

What is the first step in Bill Curtis’s general design process?

75
New cards

Decompose the problem into goals and objects

What is the second step in Curtis’s general design process?

76
New cards

Select and compose plans to solve the problem

What is the third step in Curtis’s general design process?

77
New cards

Implement the plans

What is the fourth step in Curtis’s general design process?

78
New cards

Reflect on the design product and process

What is the fifth step in Curtis’s general design

79
New cards

Build a mental model of a proposed solution

According to Curtis, what is the first step in selecting and composing plans?

80
New cards

Mentally execute it to check if it solves the problem

What does a designer do after building a mental model?

81
New cards

Modify the model and test again

What happens if the mental model fails??

82
New cards

When repeated tests with sample inputs give correct output

When does a designer stop refining the mental model?

83
New cards

It is cognitive, iterative, and mind-driven

What does Curtis’s technique reveal about the nature of design?

84
New cards

Simulation of solutions in the designer’s mind

What is one cognitive trait of design emphasized in the Curtis model?

85
New cards

They have a large set of standard patterns

According to John Nestor, what is one trait of great designers?

86
New cards

Failing projects

What experience do great designers usually have?

87
New cards

Mastery of development tools

What tool-related trait do great designers possess?

88
New cards

Impulse towards simplicity

What design impulse do great designers typically show?

89
New cards

Ability to anticipate change

What future-oriented trait do great designers have?

90
New cards

Ability to view things from the user’s perspective

What user-related trait do great designers have?

91
New cards

They can deal with complexity

How do great designers handle complex systems?