Preface to the Third Edition |
|
xiii | |
The City Car Club |
|
1 | (4) |
|
I Addressing Ill-Structured Problems |
|
|
5 | (70) |
|
1 What Is Designing About? |
|
|
7 | (12) |
|
1.1 When is design needed? |
|
|
7 | (3) |
|
|
10 | (2) |
|
1.3 What exactly do we mean by `design'? |
|
|
12 | (2) |
|
1.4 Three perspectives upon design thinking |
|
|
14 | (2) |
|
Key take-home points about what designing is about |
|
|
16 | (3) |
|
|
19 | (12) |
|
2.1 Designing as a creative process |
|
|
19 | (2) |
|
2.2 Ill-structured problems |
|
|
21 | (3) |
|
2.3 What does a designer do? |
|
|
24 | (3) |
|
2.4 A simple example: the house move |
|
|
27 | (1) |
|
Key take-home points about designing |
|
|
28 | (3) |
|
3 Managing The Design Process |
|
|
31 | (12) |
|
|
31 | (1) |
|
3.2 The power of abstraction |
|
|
32 | (2) |
|
3.3 Modelling and making design choices |
|
|
34 | (1) |
|
3.4 Recording design decisions |
|
|
35 | (2) |
|
3.5 Communicating ideas about a design model |
|
|
37 | (3) |
|
Key take-home points about the design process |
|
|
40 | (3) |
|
|
43 | (16) |
|
4.1 What do expert software designers do? |
|
|
43 | (6) |
|
4.2 Some software design principles |
|
|
49 | (4) |
|
4.2.1 Fitness for purpose |
|
|
49 | (1) |
|
4.2.2 Separation of concerns |
|
|
50 | (1) |
|
|
51 | (1) |
|
|
52 | (1) |
|
|
52 | (1) |
|
4.3 The evolution of design ideas |
|
|
53 | (2) |
|
4.4 The nature of expert design knowledge |
|
|
55 | (2) |
|
Key take-home points about design knowledge |
|
|
57 | (2) |
|
5 Empirical Knowledge About Software Design |
|
|
59 | (16) |
|
5.1 Measuring software development processes |
|
|
59 | (4) |
|
5.1.1 Measuring physical phenomena |
|
|
60 | (1) |
|
5.1.2 Measuring human reactions |
|
|
61 | (2) |
|
5.2 Empirical studies in software engineering |
|
|
63 | (6) |
|
5.2.1 The empirical spectrum |
|
|
64 | (1) |
|
5.2.2 The research protocol |
|
|
65 | (1) |
|
5.2.3 Qualitative studies |
|
|
65 | (1) |
|
5.2.4 Quantitative studies |
|
|
66 | (1) |
|
|
67 | (2) |
|
|
69 | (2) |
|
5.4 Using empirical knowledge |
|
|
71 | (1) |
|
Key take-home points about empirical knowledge |
|
|
72 | (3) |
|
II Design as a Noun: How Software Is Structured |
|
|
75 | (118) |
|
|
77 | (16) |
|
6.1 What architecture provides for us |
|
|
77 | (2) |
|
|
79 | (8) |
|
6.2.1 Pipe-and-filter architectural style |
|
|
82 | (1) |
|
6.2.2 Call-and-return architectural style |
|
|
83 | (1) |
|
6.2.3 Data-centred repository architectural style |
|
|
84 | (3) |
|
6.3 Architectural patterns |
|
|
87 | (4) |
|
6.3.1 Model-view-controller (MVC) |
|
|
88 | (2) |
|
|
90 | (1) |
|
6.4 Empirical knowledge about architecture |
|
|
91 | (1) |
|
Key take-home points about software architecture |
|
|
92 | (1) |
|
7 Modelling Software Properties |
|
|
93 | (16) |
|
7.1 What is a design model? |
|
|
93 | (3) |
|
7.2 Representations, perspectives and viewpoints |
|
|
96 | (6) |
|
7.2.1 The constructional viewpoint |
|
|
100 | (1) |
|
7.2.2 The behavioural viewpoint |
|
|
101 | (1) |
|
7.2.3 The functional viewpoint |
|
|
101 | (1) |
|
7.2.4 The data-modelling viewpoint |
|
|
102 | (1) |
|
|
102 | (4) |
|
7.3.1 Textual description forms |
|
|
103 | (1) |
|
7.3.2 Box and line description forms |
|
|
103 | (2) |
|
7.3.3 Mathematical notations |
|
|
105 | (1) |
|
7.4 Empirical knowledge related to viewpoint notations |
|
|
106 | (1) |
|
Key take-home points about design modelling |
|
|
107 | (2) |
|
8 Sketching Design Models |
|
|
109 | (10) |
|
8.1 Why do designers sketch? |
|
|
109 | (1) |
|
8.2 Sketching: developing informal models |
|
|
110 | (2) |
|
8.3 Characterising the design elements |
|
|
112 | (4) |
|
8.3.1 Software design as an ISP |
|
|
112 | (1) |
|
8.3.2 Sketching initial models |
|
|
113 | (3) |
|
8.4 Empirical knowledge about the use of sketching |
|
|
116 | (1) |
|
Key take-home points about sketching |
|
|
116 | (3) |
|
9 Modelling Software Processes |
|
|
119 | (20) |
|
9.1 Characteristics of software processes |
|
|
119 | (2) |
|
9.2 Modelling function: the data-flow diagram (DFD) |
|
|
121 | (5) |
|
9.3 Modelling behaviour: the state transition diagram (STD) and the state transition table (STT) |
|
|
126 | (4) |
|
9.4 Modelling data: the entity-relationship diagram (ERD) |
|
|
130 | (4) |
|
9.5 Modelling construction: the structure chart |
|
|
134 | (2) |
|
9.6 Empirical knowledge about modelling processes |
|
|
136 | (1) |
|
Key take-home points about modelling processes |
|
|
136 | (3) |
|
10 Modelling Objects And Classes |
|
|
139 | (38) |
|
10.1 Characteristics of objects and classes |
|
|
140 | (10) |
|
10.1.1 The notion of an object |
|
|
141 | (4) |
|
10.1.2 Objects and classes |
|
|
145 | (5) |
|
10.2 Relationships between objects |
|
|
150 | (3) |
|
10.3 Conceptual issues for object modelling |
|
|
153 | (3) |
|
10.4 Object modelling: the issue of notations |
|
|
156 | (1) |
|
10.5 Modelling construction: the class diagram |
|
|
157 | (4) |
|
10.5.1 Distinguishing classes from objects |
|
|
158 | (1) |
|
10.5.2 Class relationships |
|
|
159 | (2) |
|
10.6 Modelling behaviour: the statechart and the message sequence diagram |
|
|
161 | (6) |
|
|
161 | (3) |
|
10.6.2 The message sequence diagram |
|
|
164 | (3) |
|
10.7 Modelling function: the activity diagram |
|
|
167 | (2) |
|
|
169 | (3) |
|
10.9 Empirical knowledge about modelling objects and classes |
|
|
172 | (2) |
|
|
173 | (1) |
|
10.9.2 Object modelling notations |
|
|
173 | (1) |
|
10.9.3 Object-oriented metrics |
|
|
174 | (1) |
|
Key take-home points about modelling objects and classes |
|
|
174 | (3) |
|
11 Modelling Software Components And Services |
|
|
177 | (16) |
|
|
178 | (2) |
|
11.2 Modelling software components |
|
|
180 | (7) |
|
11.2.1 Component characteristics |
|
|
181 | (2) |
|
11.2.2 Component frameworks |
|
|
183 | (2) |
|
11.2.3 Designing components |
|
|
185 | (1) |
|
|
186 | (1) |
|
11.3 Modelling software services |
|
|
187 | (3) |
|
11.4 Empirical knowledge about modelling components and services |
|
|
190 | (1) |
|
11.4.1 Empirical knowledge about components |
|
|
190 | (1) |
|
11.4.2 Empirical knowledge about services |
|
|
191 | (1) |
|
Key take-home points about modelling components and services |
|
|
191 | (2) |
|
III Design as a Verb: Designing Software |
|
|
193 | (132) |
|
12 Structuring The Ill-Structured |
|
|
195 | (8) |
|
12.1 Challenges in creating a design |
|
|
195 | (2) |
|
12.2 Evolution of knowledge transfer mechanisms |
|
|
197 | (2) |
|
12.3 Designing with others |
|
|
199 | (1) |
|
12.4 Empirical knowledge about design creation |
|
|
200 | (1) |
|
Key take-home points about structuring `solutions' to ISPs |
|
|
201 | (2) |
|
13 Plan-Driven Software Design |
|
|
203 | (34) |
|
13.1 What does plan-driven mean? |
|
|
204 | (1) |
|
13.2 Decompositional and compositional strategies |
|
|
205 | (3) |
|
13.2.1 Top-down decomposition |
|
|
206 | (1) |
|
13.2.2 Compositional design strategies |
|
|
207 | (1) |
|
13.3 What do plan-driven methods provide? |
|
|
208 | (3) |
|
13.4 SSA/SD: example of an early plan-driven form |
|
|
211 | (3) |
|
13.4.1 SSA/SD representation part |
|
|
212 | (1) |
|
13.4.2 SSA/SD process part |
|
|
212 | (2) |
|
|
214 | (1) |
|
13.5 SSADM: a designed design method |
|
|
214 | (5) |
|
13.5.1 SSADM representation part |
|
|
215 | (2) |
|
13.5.2 SSADM process part |
|
|
217 | (1) |
|
|
218 | (1) |
|
13.6 Plan-driven design for object-oriented models |
|
|
219 | (14) |
|
|
219 | (7) |
|
13.6.2 The Unified Process (UP) |
|
|
226 | (7) |
|
13.7 Empirical knowledge related to plan-driven design |
|
|
233 | (2) |
|
Key take-home points about plan-driven design practices |
|
|
235 | (2) |
|
14 Incremental Design In Agile Software Development |
|
|
237 | (24) |
|
14.1 Using software prototypes |
|
|
238 | (3) |
|
14.2 Incremental development and the spiral model |
|
|
241 | (2) |
|
14.3 RAD: the DSDM method |
|
|
243 | (6) |
|
14.3.1 The DSDM principles |
|
|
244 | (3) |
|
|
247 | (2) |
|
|
249 | (1) |
|
14.5 Extreme programming (XP) |
|
|
250 | (3) |
|
14.6 Agile development: Scrum |
|
|
253 | (2) |
|
|
255 | (2) |
|
14.8 Empirical knowledge about design in agile development |
|
|
257 | (2) |
|
14.8.1 Empirical knowledge about DSDM |
|
|
258 | (1) |
|
14.8.2 Empirical knowledge about agile methods |
|
|
258 | (1) |
|
14.8.3 Empirical knowledge about refactoring |
|
|
259 | (1) |
|
Key take-home points about designing in an agile context |
|
|
259 | (2) |
|
15 Designing With Patterns |
|
|
261 | (32) |
|
15.1 Patterns as a mechanism for knowledge transfer |
|
|
262 | (3) |
|
15.2 Architectural patterns |
|
|
265 | (6) |
|
15.2.1 Model-view-controller (MVC) |
|
|
266 | (2) |
|
|
268 | (2) |
|
|
270 | (1) |
|
|
271 | (12) |
|
|
275 | (3) |
|
|
278 | (3) |
|
15.3.3 Abstract Factory (87) |
|
|
281 | (2) |
|
15.4 Other uses of patterns |
|
|
283 | (3) |
|
15.4.1 Software service patterns |
|
|
283 | (1) |
|
15.4.2 Design anti-patterns and code smells |
|
|
284 | (2) |
|
15.5 Designing with patterns |
|
|
286 | (2) |
|
15.6 Empirical knowledge about designing with patterns |
|
|
288 | (2) |
|
Key take-home points about designing with patterns |
|
|
290 | (3) |
|
16 Designing With Components And Services |
|
|
293 | (12) |
|
|
293 | (1) |
|
16.2 Designing with components |
|
|
294 | (4) |
|
16.3 Designing with software services |
|
|
298 | (4) |
|
16.4 Empirical knowledge about modular design |
|
|
302 | (1) |
|
Key take-home points about designing with components and services |
|
|
302 | (3) |
|
17 How Good Is My Design? |
|
|
305 | (10) |
|
|
306 | (5) |
|
|
307 | (1) |
|
|
308 | (3) |
|
17.2 Reviews and walkthroughs |
|
|
311 | (2) |
|
17.3 Refactoring of designs |
|
|
313 | (1) |
|
17.4 Empirical knowledge about quality assessment |
|
|
313 | (1) |
|
Key take-home points about assessing design quality |
|
|
314 | (1) |
|
|
315 | (10) |
|
18.1 Open source software (OSS) |
|
|
315 | (2) |
|
18.2 Formal description techniques (FDTs) |
|
|
317 | (4) |
|
18.3 Model driven engineering (MDE) |
|
|
321 | (1) |
|
|
322 | (3) |
Bibliography |
|
325 | (14) |
Index |
|
339 | |