418 BibliographyThere are several exciting accounts of the personal outlook and work methods of pro-grammers.. They give insights into how programming is actually done.. An example of a
Trang 1418 Bibliography
There are several exciting accounts of the personal outlook and work methods of pro-grammers They give insights into how programming is actually done They also con-tribute to the folklore of programming
An example of a book on how programmers actually work In the book, she reports on
interviews with notable programmers: Susan Lammers, Programmers at Work,
Microsoft Press, 1986
Another really exciting book, which charts the lives of the early programmers: Steven
Levy, Hackers: Heroes of the Computer Revolution, Anchor Books, 1994.
This is a good read if you are interested in how software projects really get done and
what life is like at Microsoft: G Pascal Zachary, Show-Stopper: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft, Free Press, 1994.
This book describes the methods used at Microsoft: Michael A Cusumano and Richard
W Selby, Microsoft Secrets, Free Press, 1995.
Programmers – their lives and work
Trang 2abstraction 99, 107
acceptance test 251, 332
activity diagrams 414
Ada 177, 189, 215, 233, 254, 393
adaptive maintenance 11
adversary team 275
agile manifesto 330
agile methods 330
Algol 68 393
anti-patterns 151, 161, 162
architecture 338
array list 206
arrays 194
assertions 253
assessing methods 385, 387
ATM case study 32, 45, 62, 154, 157,
158, 300, 341, 407 audit module 241
automated testing 275
automatic garbage collection 215
automation 398
backward error recovery 244
beta testing 275
bibliography 417
big-bang development 315
black box testing 269, 387
blob anti-pattern 161
Bohm, B 373
Booch, G 337
bottom-up implementation 317
boundary values 269, 271, 273
bounty hunter 275 breadth-first 107 Brooks, F.P 348, 377 bugs, estimating 361
C 176, 214, 225, 254 C++ 214, 225, 254, 393 C# 177, 189, 191, 196, 212,
223, 233 call by reference 188 call by value 188
Capability Maturity Model, see CMM
case studies 407 casting 193 chief programmer teams 351 class 201
class diagram 143, 144, 170, 209,
228, 413 class programmer 353–4 classes, finding 142
class–responsibility–collaborator cards, see
CRC cards CMM, 366 Cobol 176, 393 COCOMO 373 cohesion 79 command line interface 54 communication 333, 347 compile-time checking 240 complexity 70, 358 component programmer 353–4 component size 70
Index
Trang 3420 Index
component types 70
components 399
composition refactoring 168
control 397
control structures 94, 179
cost 5, 6, 9, 12
cost estimation 372
cost-benefit analysis 31
coupling 77
courage 333
CRC cards 145, 332
crisis 16
Crystal 330
cyberspace invaders case study 103, 140,
154, 158, 200, 408 dangling else180
dangling pointer 215
data flow design 111
data flow diagram 112
data hiding 74
data structure design 121
data structure diagram 122
data structures 213
data typing 190
database design 26
deadlines 10
defensive programming 241
delegation design pattern 153
Deming, W.E 365
depth-first 107
design
data flow 111 data structure 121 functional decomposition 102
of programming language 176 OOD 139
user interface 53 design patterns 151
delegation 153 façade 156 factory method 155 immutable 157 inheritance 152 layers 159
mediator 158 model, view controller 157 observer, observable 157 Pipe and Filter 158 proxy 159
singleton 154 deskilling 92 desktop metaphor 56 Dijkstra, E.W 278 direct manipulation 56 division of labor 349 driver 276
DSDM 330 dynamic data structures 213 dynamic typing 191
efficiency, see performance
Eiffel 212 ego-less programming 284 Encapsulate Data refactoring 166 encapsulation 74, 200
enumerations 193 equivalence partitioning 270 error 9, 13, 268, 283 evolutionary prototyping 307 exception handling 245 exceptions 93, 245 exhaustive testing 269 exploratory programming 396 Extract Class refactoring 167 extreme programming 332 façade design pattern 156 factory method 155 failure 13
fault 9, 13, 237, 283, 361, 362 fault density 278, 361
fault detection 239, 242 fault intolerance 238 fault tolerance 238 FDD 330
feasibility study 30, 373 feedback 293, 333 filter and pipe pattern 115, 260, 394 flowchart 88
Trang 4fork 324
formal methods 276, 388, 399
Fortran 176, 177, 179, 240, 394
forward error recovery 244
Free Software Foundation 323
FSF 323
function point 373
functional decomposition 102
functional teams 351
functional testing 269
future 398, 400
game case study, see cyberspace invaders
case study Gantt chart 376
garbage collection 215
gender 397, 400
generics 212
get access 203
global data 73, 78
glossary 411
GNU General Public License 323
GNU/HURD 322
GNU/Linux 325
goals of software engineering 17
good enough software 14
goto87, 89, 92, 180, 185, 249
GPL 323
groups 283
GUI 55
hacking 28, 322, 396
has-a test for composition 170
Haskell 399
HCI, see user interface design
heavyweight method 379, 330, 389
help systems 63
history 400
Hoare, C.A.R 241
human–computer interaction,
see user interface design
IBM 5, 10, 14
immutable design pattern 157
inception 371
incremental development 314 incremental testing 277 information hiding 74 inheritance 152, 168, 207 inheritance design pattern 152 inheritance refactoring 168 Inline Class refactoring 168 inspection 286
integration testing 272 interfaces 227
interoperability 229 introducing methods 390 invariant 253
investment appraisal 31 is-a test for inheritance 170 iteration 146, 301, 306, 308,
338, 341 Jacobson, I 337 Java 176, 200, 215, 224, 254, 393
JSP, see data structure design
Layer design pattern 159, 316 library 145, 206, 394
library case study 409 lightweight method 330, 379, 389
lines of code, see LOC
LISP 396, 399 LOC 358 maintenance 11 managing people 378 McCabe complexity measure 359
mean time to failure, see MTTF
mediator design pattern 158 memory corruption 215 memory leak 215 mental model 56 menu 54
methodology 27 methods 186 metrics 357, 358, 386
Michael Jackson, see data
structure design Microsoft 395
Trang 5422 Index
Microsoft Project 376
middle-out implementation 318
milestone 376
millennium bug 13
model, view controller design
pattern 157 modularity 67, 68
module interconnection language 227
monolithic testing 277
Move Data refactoring 167
Move Method refactoring 167
MTTF 362
multiple inheritance 212, 230
multiple interfaces 230
Murphy’s law 278
mutation testing 275
MySQL 322
nesting 181
n-version programming 252
object-oriented design, see OOD
object-oriented programming,
see OOP
observer, observable design
pattern 157
OO teams, 353
OOD 139
OOP 82, 200
open source development 322
Open Source Movement 323
open-closed principle 83
OpenOffice 322
orthogonality 177
OSM 323
overwork 334
package diagrams 414
packages 223
pair programming 286, 334
paralysis 371
parameters 188
Pascal 393
patient monitoring system case study
113, 229, 410
patterns 151 PDL 103 performance 10, 93 Perl 260, 322 person months 358, 372 Pert 376
pipe and filter design pattern 79,
133, 158 PL/1 177 planning 376 pointers 213 polymorphism 170, 209 polymorphism refactoring 170 portability 11
postcondition 253 precondition 253 primitive data types 190 process improvement 365 process model 23, 26, 27, 372 agile 330
extreme programming 332 incremental 314
open source 322 prototyping, 303 spiral, 297 unified process 337 waterfall, 291 productivity 6 profiler 275 program design language 103 program structure chart 122 programming in the large 221 programming language 175, 393 project management 345, 370 project teams 351
properties 203, 205 prototyping 60, 303 evolutionary 307 rapid 308 throwaway 305 proximity 134 proxy design pattern 159 pseudo-code 103, 125 Python 259
Trang 6quality 18, 362
quality assurance 18, 275, 357, 364
quality factors 363
rapid prototyping 308
Raymond, E.S 324
records 195
recovery blocks 249
recovery points 244
refactoring 165, 334
composition 168 Encapsulate Data 166 Extract Class 167 inheritance 168 Inline Class 168 Move Data 167 Move Method 167 polymorphism 170 regression testing 275
reliability 13
remedial maintenance 11
repetition 183
requirements 4, 36, 303
requirements engineering 398
return on investment 31
reuse 69, 144, 309, 394, 399
risk 297
robustness 237
Rumbaugh, J 337
run-time checking 240
safety-critical systems 15
scheduling 376
scoping 226
scripting 259
SCRUM 330
selecting tools and methods 375
selection 180
separate compilation 232
set access 203
simplicity 176, 333
single inheritance 212
singleton design pattern 154
skill 397
SLOC, see LOC
Smalltalk 308 software engineering 17 software quality 362 software tools xxi, 331, 392, 398
specification 305 spiral model 297 spreadsheet 376 Stallman, R 323 stepping 274 stepwise refinement 108 story 332
strong typing 191 structural testing 272 structure chart 115 structure clash 130 structured growth 396 structured programming 87, 98 structured walkthrough 284 structures 195
stub 315 syntax 178 system testing 277 tasks of software development 22 teams 347
chief programmer 351 functional 351
OO, 353 project 351 technical feasibility 31 templates 212 test bed 315 test-driven development 333 testing 24, 25, 267
black box 269 functional 269 integration 272 structural 272 system 277 unit 276 white box 272 throwaway prototyping 305
tools, see software tools
top-down implementation 316
Trang 7424 Index
Torvalds, L 325–6
trust 379
UML 337, 399, 412
activity diagrams 414 class diagrams 413 package diagrams 414 use case diagrams 36, 412
Unified Modeling Language, see UML
unified process 337
unit testing 276
Unix 133, 259
UP, see unified process
use case 45, 142, 319, 332, 338, 373
use case diagram 46, 412
user-defined types 193
user interface design 16, 53, 57, 60
users 4
validation 5, 24, 303 verification 14, 24 267, 387 Visual Basic 176, 254 walkthrough 387 waterfall model 291 weak typing 191, 262 Weinberg, G 283 white box testing 272, 387 Wirth, N 175
word processor case study 46,
159, 408
XP, see extreme programming
Z 276, 399 zero defect software 14