1/90
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced |
---|
No study sessions yet.
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?
Wicked problems and tame problems
What are the two layers of software problems?
Domains outside computer science (e.g., biology, business, sociology)
Where do wicked problems typically come from?
Open-ended, ill-defined, large, with evolving requirements
How are wicked problems characterized?
Web commerce application
Give an example of a wicked problem.
Tame problems
What kind of problems are in the lower layer of software design?
No, they can be complicated but are clearly defined and solvable
Are tame problems always easy?
Sorting and searching
Give an example of a tame problem.
Only after the problem is solved
When are requirements of a wicked problem fully known?
Not understood until after the solution is created
What is the first characteristic of a wicked problem (paraphrased)?
No stopping rule
What is the second characteristic of a wicked problem?
Solutions are not right or wrong—just better or worse
What is the third characteristic of a wicked problem?
Every wicked problem is novel and unique
What is the fourth characteristic of a wicked problem?
Every solution is a one-shot operation
What is the fifth characteristic of a wicked problem?
No given alternative solutions
What is the sixth characteristic of a wicked problem?
Requirements evolve with user feedback and it’s never really "done"
Why is word processing a wicked problem?
Linear, top-down (waterfall model)
What problem-solving model do most people follow for wicked problems?
Opportunity-driven (opportunistic) approach
What is the better approach for wicked problems?
Iterates between problem understanding and solution modeling
How does the opportunity-driven approach work?
Back-and-forth progress from requirements to prototype
What does the jagged line in Figure 6-2 represent?
Unclear requirements, evolving features, and no "right" answer
Why is a simple web app for a nonprofit a wicked problem?
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?
It is well-defined, has a stopping point, an objective result, similar problems, and a limited solution set
Why is sorting a tame problem?
They guide the approach to solving ill-formed problems without relying on the waterfall model
Why are design principles important in wicked problems?
messy
Design is {{_____}} because understanding of the problem evolves over time and design must adapt.
Changing understanding of the problem and evolving design over time.
What makes software design appear messy?
Because there are many alternatives and mistakes before finding a working solution.
Why is design considered messy even for tame problems?
Tradeoffs and priorities.
What is software design about?
Because most projects are time-limited.
Why do you need to prioritize features in software projects?
Time constraints force tradeoffs.
Why can't all customer features be implemented in a project?
It uses experience-based rules of thumb, not fixed procedures.
What does it mean that design is heuristic?
Over time, through experience and learning from others.
How do designers acquire heuristics?
It helps move quickly through easy parts and tackle the core problem.
What is the benefit of learning heuristics and patterns in design?
Learn from an experienced (master) designer.
What is the best way to learn design heuristics?
Because both tame and wicked problems evolve over time.
Why do good designers expect requirements to change?
The design also changes and evolves.
What happens when requirements change in software design?
By creating a flexible software architecture.
How can you prepare for changes in requirements?
To allow change with minimal impact on design and code.
What is the goal of good software architecture?
Fitness of purpose
{{____}} means your design must work correctly and satisfy requirements within platform constraints.
Separation of concerns
{{______}} refers to separating functional parts of a design to improve simplicity and maintenance.
Simplicity
{{_____}} in design helps others understand it and supports refactoring opportunities.
refactoring
In agile, {{_____}} is simplifying a design as soon as the opportunity arises.
Ease of maintenance
{{_______}} results from a coherent and simple design, making error-fixing easier.
Loose coupling
{{______}} means modules/classes interact only via interfaces, minimizing dependency and error propagation.
High cohesion
{______} describes a module/class with self-contained data and operations.
highly cohesive class
A {{______________}} has all necessary data and operations defined internally.
Extensibility
{_________}} is the ease of adding new features to a design, crucial for handling evolving requirements.
Portability
{{________}} is the ability of software to run across different platforms, involving OS, hardware, and UI considerations.
Model program elements after real-world objects to minimize intellectual distance.
What does the heuristic "Find real-world objects to model" suggest?
The gap between a real-world object and its program model.
What is intellectual distance in software design?
It keeps your design closer to the real-world problem.
Why minimize intellectual distance in design?
It manages complexity by hiding details and focusing on the core problem.
What is the key role of abstraction in software design?
Delay implementation details by shifting them higher or lower in the design.
What does abstraction allow you to do in design?
It isolates errors and changes by exposing only interfaces, not internal details.
Why is information hiding important in design?
Encapsulation.
What concept in OOP derives from information hiding?
Hides class details and allows interaction only through a public interface.
What does encapsulation achieve in OOP?
By using libraries to hide behavior and structs to hide state.
How can non-OOP programs apply information hiding?
Manageability, extensibility, maintainability, and isolating changes.
What does modularity in design help with?
It lets you focus on one part at a time and treat others as black boxes.
Why is modularity beneficial for the human brain?
Identify and isolate them to contain future changes.
What should you do with parts of your design likely to change?
Business rules, UI, hardware.
Give examples of things that may change in a software system.
Minimizing dependencies between modules or classes.
What is loose coupling in software design?
Use well-defined interfaces and abstract classes.
How can you implement loose coupling?
One module can change without affecting others.
What does loose coupling allow in terms of module changes?
They let you apply proven solutions to new problems.
What is the benefit of using common design patterns?
As refinements or extensions of existing programs.
How do experienced designers approach new programs?
Every piece of code or change should have a single, obvious location.
What is the Principle of One Right Place?
It simplifies debugging and maintenance.
Why follow the Principle of One Right Place?
To visualize program structure and flow for clarity and error spotting.
What is the purpose of using diagrams during design?
Whiteboards or paper.
What tools are suggested for drawing design diagrams?
A creative activity
What kind of activity is software design at its core?
The problem, problem domain, and target platform
What imposes formal restrictions on a software design?
Understand the problem
What is the first step in Bill Curtis’s general design process?
Decompose the problem into goals and objects
What is the second step in Curtis’s general design process?
Select and compose plans to solve the problem
What is the third step in Curtis’s general design process?
Implement the plans
What is the fourth step in Curtis’s general design process?
Reflect on the design product and process
What is the fifth step in Curtis’s general design
Build a mental model of a proposed solution
According to Curtis, what is the first step in selecting and composing plans?
Mentally execute it to check if it solves the problem
What does a designer do after building a mental model?
Modify the model and test again
What happens if the mental model fails??
When repeated tests with sample inputs give correct output
When does a designer stop refining the mental model?
It is cognitive, iterative, and mind-driven
What does Curtis’s technique reveal about the nature of design?
Simulation of solutions in the designer’s mind
What is one cognitive trait of design emphasized in the Curtis model?
They have a large set of standard patterns
According to John Nestor, what is one trait of great designers?
Failing projects
What experience do great designers usually have?
Mastery of development tools
What tool-related trait do great designers possess?
Impulse towards simplicity
What design impulse do great designers typically show?
Ability to anticipate change
What future-oriented trait do great designers have?
Ability to view things from the user’s perspective
What user-related trait do great designers have?
They can deal with complexity
How do great designers handle complex systems?