1 Why Software Engineering? 1
1.1 What Is Software Engineering? 2
1.2 How Successful Have We Been? 5
1.3 What Is Good Software? 9
1.4 Who Does Software Engineering? 14
1.5 A Systems Approach 16
1.6 An Engineering Approach 21
1.7 Members of the Development Team 25
1.8 How Has Software Engineering Changed? 27
1.9 Information Systems Example 35
1.10 Real-Time Example 37
1.11 What This Chapter Means for You 39
1.12 What This Chapter Means for Your Development Team 40
1.13 What This Chapter Means for Researchers 40
1.14 Term Project 40
1.15 Key References 42
1.16 Exercises 43
2 Modeling the Process and Life Cycle 45
2.1 The Meaning of Process 45
2.2 Software Process Models 48
2.3 Tools and Techniques for Process Modeling 63
2.4 Practical Process Modeling 70
2.5 Information Systems Example 73
2.6 Real-Time Example 75
2.7 What This Chapter Means for You 76
2.8 What This Chapter Means for Your Development Team 76
2.9 What This Chapter Means for Researchers 77
2.10 Term Project 77
2.11 Key References 77
2.12 Exercises 81
3 Planning and Managing the Project 82
3.1 Tracking Progress 82
3.2 Project Personnel 95
3.3 Effort Estimation 104
3.4 Risk Management 119
3.5 The Project Plan 123
3.6 Process Models and Project Management 125
3.7 Information Systems Example 133
3.8 Real-Time Example 135
3.9 What This Chapter Means for You 136
3.10 What This Chapter Means for Your Development Team 136
3.11 What This Chapter Means for Researchers 137
3.12 Term Project 137
3.13 Key References 137
3.14 Exercises 138
4 Capturing the Requirements 141
4.1 The Requirements Process 142
4.2 Requirements Elicitation 144
4.3 Types of Requirements 148
4.4 Characteristics of Requirements 155
4.5 Modeling Notations 156
4.6 Requirements and Specification Languages 187
4.7 Prototyping Requirements 191
4.8 Requirements Documentation 193
4.9 Validation and Verification 198
4.10 Measuring Requirements 204
4.11 Choosing a Specification Technique 206
4.12 Information Systems Example 209
4.13 Real-Time Example 211
4.14 What This Chapter Means for You 213
4.15 What This Chapter Means for Your Development Team 214
4.16 What This Chapter Means for Researchers 214
4.17 Term Project 215
4.18 Key References 218
4.19 Exercises 219
5 Designing the Architecture 223
5.1 The Design Process 223
5.2 Modeling Architectures 231
5.3 Decomposition and Views 231
5.4 Architectural Styles and Strategies 235
5.5 Achieving Quality Attributes 245
5.6 Collaborative Design 256
5.7 Architecture Evaluation and Refinement 258
5.8 Documenting Software Architectures 273
5.9 Architecture Design Review 276
5.10 Software Product Lines 279
5.11 Information Systems Example 284
5.12 Real-Time Example 286
5.13 What This Chapter Means for You 287
5.14 What This Chapter Means for Your Development Team 288
5.15 What This Chapter Means for Researchers 288
5.16 Term Project 289
5.17 Key References 290
5.18 Exercises 290
6 Designing the Modules 293
6.1 Design Methodology 294
6.2 Design Principles 295
6.3 OO Design 310
6.4 Representing OO Designs in the UML 321
6.5 OO Design Patterns 338
6.6 Other Design Considerations 348
6.7 OO Measurement 353
6.8 Design Documentation 363
6.9 Information Systems Example 366
6.10 Real-Time Example 367
6.11 What This Chapter Means for You 367
6.12 What This Chapter Means for Your Development Team 369
6.13 What This Chapter Means for Researchers 369
6.14 Term Project 369
6.15 Key References 370
6.16 Exercises 370
7 Writing the Programs 373
7.1 Programming Standards and Procedures 373
7.2 Programming Guidelines 376
7.3 Documentation 387
7.4 The Programming Process 391
7.5 Information Systems Example 395
7.6 Real-Time Example 396
7.7 What This Chapter Means for You 397
7.8 What This Chapter Means for Your Development Team 398
7.9 What This Chapter Means for Researchers 398
7.10 Term Project 398
7.11 Key References 399
7.12 Exercises 399
8 Testing the Programs 401
8.1 Software Faults and Failures 401
8.2 Testing Issues 407
8.3 Unit Testing 412
8.4 Integration Testing 426
8.5 Testing Object-Oriented Systems 433
8.6 Test Planning 436
8.7 Automated Testing Tools 438
8.8 When to Stop Testing 441
8.9 Information Systems Example 446
8.10 Real-Time Example 447
8.11 What This Chapter Means for You 448
8.12 What This Chapter Means for Your Development Team 448
8.13 What This Chapter Means for Researchers 449
8.14 Term Project 449
8.15 Key References 449
8.16 Exercises 450
9 Testing the System 453
9.1 Principles of System Testing 453
9.2 Function Testing 466
9.3 Performance Testing 472
9.4 Reliability,Availability,and Maintainability 474
9.5 Acceptance Testing 483
9.6 Installation Testing 486
9.7 Automated System Testing 486
9.8 Test Documentation 487
9.9 Testing Safety-Critical Systems 498
9.10 Information Systems Example 509
9.11 Real-Time Example 511
9.12 What This Chapter Means for You 513
9.13 What This Chapter Means for Your Development Team 513
9.14 What This Chapter Means for Researchers 513
9.15 Term Project 514
9.16 Key References 514
9.17 Exercises 515
10 Delivering the System 519
10.1 Training 519
10.2 Documentation 524
10.3 Information Systems Example 531
10.4 Real-Time Example 532
10.5 What This Chapter Means for You 532
10.6 What This Chapter Means for Your Development Team 532
10.7 What This Chapter Means for Researchers 533
10.8 Term Project 533
10.9 Key References 533
10.10 Exercises 533
11 Maintaining the System 535
11.1 The Changing System 535
11.2 The Nature of Maintenance 543
11.3 Maintenance Problems 546
11.4 Measuring Maintenance Characteristics 554
11.5 Maintenance Techniques and Tools 560
11.6 Software Rejuvenation 568
11.7 Information Systems Example 574
11.8 Real-Time Example 575
11.9 What This Chapter Means for You 576
11.10 What This Chapter Means for Your Development Team 576
11.11 What This Chapter Means for Researchers 577
11.12 Term Project 577
11.13 Key References 577
11.14 Exercises 578
12 Evaluating Products,Processes,and Resources 580
12.1 Approaches to Evaluation 580
12.2 Selecting an Evaluation Technique 585
12.3 Assessment vs.Prediction 589
12.4 Evaluating Products 595
12.5 Evaluating Processes 610
12.6 Evaluating Resources 626
12.7 Information Systems Example 631
12.8 Real-Time Example 632
12.9 What This Chapter Means for You 632
12.10 What This Chapter Means for Your Development Team 633
12.11 What This Chapter Means for Researchers 633
12.12 Term Project 633
12.13 Key References 634
12.14 Exercises 634
13 Improving Predictions,Products,Processes,and Resources 636
13.1 Improving Predictions 636
13.2 Improving Products 645
13.3 Improving Processes 649
13.4 Improving Resources 657
13.5 General Improvement Guidelines 660
13.6 Information Systems Example 661
13.7 Real-Time Example 662
13.8 What This Chapter Means for You 662
13.9 What This Chapter Means for Your Development Team 662
13.10 What This Chapter Means for Researchers 663
13.11 Term Project 663
13.12 Key References 663
13.13 Exercises 664
14 The Future of Software Engineering 665
14.1 How Have We Done? 665
14.2 Technology Transfer 668
14.3 Decision-Making in Software Engineering 676
14.4 The Professionalization of Software Engineering:Licensing,Certification,and Ethics 689
14.5 Term Project 706
14.6 Key References 706
14.7 Exercises 708
Annotated Bibliography 709
Index 745