Lecture 12: Software Design and Architecture Flashcards

1
Q

What is design?

A

Describe how to implement requirements given constraints imposed by quality, platform, process, budget, etc.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

What is a component?

A

Any piece of software or hardware that has a clear role
May be isolated
Designed for reuse

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

What is a module?

A

Type of component (e.g., methods, classes and packages in Java)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What is a system?

A

A logical entity, having a set of definable responsibilities or objectives
Specification implemented by a collection of components
Continues to exist even if components are changed or replaced

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

What is a subsystem?

A

System that is part of a larger system

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Should we use top-down or bottom-up design?

A

Both: Top-down design (high level structure), bottom-up implementation (put low-level components together to create high-level constructs)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

What is a good design?

A

Reduces cost and increases quality
Conforms to requirements
Accelerates development
Satisfies qualities (usability, efficiency, reliability, etc.)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

What is the divide and conquer design principle?

A

Easier to deal with a series of smaller things, separate people can work on each part
Components can be replaced or modified without affecting other system parts
E.g. Distributed system - clients and servers, subsystems, classes, methods, etc.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

What is the increase cohesion design principle?

A

Keep things together that are related, keep unrelated things out
System as a whole is easier to understand, easier to change

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

What is the reduce coupling design principle?

A

Coupling occurs when modules have interdependence
Changes in one place require changes elsewhere, harder to see how a component works

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

What is the maximum abstraction design principle?

A

Ensure your designs allow you to hide or defer consideration of details (reduces complexity)
Good abstraction -> information hiding

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

What is the increase reusability design principle?

A

Design components so they can be used again in other contexts

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

What is reuse?

A

Complementary to design for reusability
Reusing designs or code allows you to take advantage of the investment you and others have made in reusable components

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

What is the flexibility design principle?

A

Actively anticipate changes that a design may undergo in the future, and prepare for them

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

What is the anticipate obsolescence design principle?

A

Plan for changes in technology and environment so the software can continue to run
Avoid using early releases, avoid undocumented “features”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

What is portability?

A

Ensuring that software can be run on as many platforms as needed

17
Q

What is testability?

A

Take steps to make testing easier
E.g., design a program to automatically test the software

18
Q

What is defensive design?

A

Never trust how others will use a component that you are designing