TABLE OF CONTENTS
CHAPTER 1 THE NATURE OF SOFTWARE 1
1.1 The Nature of Software 3
1.1.1 De ning Software 4
1.1.2 Software Application Domains 6
1.1.3 Legacy Software 7
1.2 The Changing Nature of Software 9
1.2.1 WebApps 9
1.2.2 Mobile Applications 9
1.2.3 Cloud Computing 10
1.2.4 Product Line Software 11
PROBLEMS AND POINTS TO PONDER 12
FURTHER READINGS AND INFORMATION SOURCES 12
CHAPTER 2 SOFTWARE ENGINEERING 14
2.1 De ning the Discipline 15
2.2 The Software Process 16
2.2.1 The Process Framework 17
2.2.2 Umbrella Activities 18
2.2.3 Process Adaptation 18
2.3 Software Engineering Practice 19
2.3.1 The Essence of Practice 19
2.3.2 General Principles 21
2.4 Software Development Myths 23
2.5 How It All Starts 26
PROBLEMS AND POINTS TO PONDER 27
FURTHER READINGS AND INFORMATION SOURCES 27
PART ONE THE SOFTWARE PROCESS 29
CHAPTER 3 SOFTWARE PROCESS STRUCTURE 30
3.1 A Generic Process Model 31
3.2 De ning a Framework Activity 32
3.3 Identifying a Task Set 34
3.4 Process Patterns 35
PROBLEMS AND POINTS TO PONDER 37
FURTHER READINGS AND INFORMATION SOURCES 38
CHAPTER 4 PROCESS MODELS 39
4.1 Pre******ive Process Models 40
4.1.1 The Waterfall Model 40
4.1.2 Incremental Process Models 42
4.1.3 Evolutionary Process Models 44
4.1.4 Concurrent Models 48
4.1.5 A Final Word on Evolutionary Processes 50
4.2 Specialized Process Models 51
4.2.1 Component-Based Development 52
4.2.2 The Formal Methods Model 52
4.2.3 Aspect-Oriented Software Development 53
4.3 The Uni ed Process 54
4.3.1 A Brief History 55
4.3.2 Phases of the Uni ed Process 55
4.4 Product and Process 57
PROBLEMS AND POINTS TO PONDER 59
FURTHER READINGS AND INFORMATION SOURCES 59
CHAPTER 5 AGILE DEVELOPMENT 60
5.1 What Is Agility? 62
5.2 Agility and the Cost of Change 62
5.3 What Is an Agile Process 63?
5.3.1 Agility Principles 64
5.3.2 The Politics of Agile Development 65
5.4 Extreme Programming 66
5.4.1 The XP Process 66
5.4.2 Industrial XP 69
5.5 Other Agile Process Models 71
5.5.1 Scrum 72
5.5.2 Dynamic Systems Development Method 73
5.5.3 Agile Modeling 74
5.5.4 Agile Uni ed Process 76
5.6 A Tool Set for the Agile Process 77
PROBLEMS AND POINTS TO PONDER 78
FURTHER READINGS AND INFORMATION SOURCES 79
CHAPTER 6 HUMAN ASPECTS OF SOFTWARE ENGINEERING 81
6.1 Characteristics of a Software Engineer 82
6.2 The Psychology of Software Engineering 83
6.3 The Software Team 84
6.4 Team Structures 86
6.5 Agile Teams 87
6.5.1 The Generic Agile Team 87
6.5.2 The XP Team 88
6.6 The Impact of Social Media 89
6.7 Software Engineering Using the Cloud 91
6.8 Collaboration Tools 92
6.9 Global Teams 93
PROBLEMS AND POINTS TO PONDER 94
FURTHER READINGS AND INFORMATION SOURCES 95
PART TWO MODELING 97
CHAPTER 7 UNDERSTANDING REQUIREMENTS 98
7.1 Requirements Engineering 99
7.2 Establishing the Groundwork 105
7.2.1 Identifying Stakeholders 106
7.2.2 Recognizing Multiple Viewpoints 106
7.2.3 Working toward Collaboration 107
7.2.4 Asking the First Questions 107
7.3 Eliciting Requirements 108
7.3.1 Collaborative Requirements Gathering 109
7.3.2 Quality Function Deployment 112
7.3.3 Usage Scenarios 112
7.3.4 Elicitation Work Products 113
7.3.5 Agile Requirements Elicitation 114
7.3.6 Service-Oriented Methods 114
7.4 Developing Use Cases 115
7.5 Building the Analysis Model 120
7.5.1 Elements of the Analysis Model 120
7.5.2 Analysis Patterns 123
7.5.3 Agile Requirements Engineering 124
7.5.4 Requirements for Self-Adaptive Systems 124
7.6 Avoiding Common Mistakes 125
PROBLEMS AND POINTS TO PONDER 125
FURTHER READINGS AND OTHER INFORMATION SOURCES 126
CHAPTER 8 REQUIREMENTS MODELING: SCENARIO-BASED METHODS 128
8.1 Requirements Analysis 129
8.1.1 Overall Objectives and Philosophy 130
8.1.2 Analysis Rules of Thumb 131
8.1.3 Domain Analysis 132
8.1.4 Requirements Modeling Approaches 133
8.2 Scenario-Based Modeling 135
8.2.1 Creating a Preliminary Use Case 135
8.2.2 Re ning a Preliminary Use Case 138
8.2.3 Writing a Formal Use Case 139
8.3 UML Models That Supplement the Use Case 141
8.3.1 Developing an Activity Diagram 142
8.3.2 Swimlane Diagrams 143
PROBLEMS AND POINTS TO PONDER 144
FURTHER READINGS AND INFORMATION SOURCES 145
CHAPTER 9 REQUIREMENTS MODELING: CLASS-BASED METHODS 146
9.1 Identifying Analysis Classes 147
9.2 Specifying Attributes 150
9.3 De ning Operations 151
9.4 Class-Responsibility-Collaborator Modeling 154
9.5 Associations and Dependencies 160
9.6 Analysis Packages 161
PROBLEMS AND POINTS TO PONDER 162
FURTHER READINGS AND INFORMATION SOURCES 163
CHAPTER 10 REQUIREMENTS MODELING: BEHAVIOR, PATTERNS, AND燱EBMOBILE APPS 164
10.1 Creating a Behavioral Model 165
10.2 Identifying Events with the Use Case 165
10.3 State Representations 166
10.4 Patterns for Requirements Modeling 169
10.4.1 Discovering Analysis Patterns 170
10.4.2 A Requirements Pattern Example: Actuator-Sensor 171
PROBLEMS AND POINTS TO PONDER 175
FURTHER READINGS AND INFORMATION SOURCES 176
CHAPTER 11 DESIGN CONCEPTS 177
11.1 Design within the Context of Software Engineering 178
11.2 The Design Process 1811
1.2.1 Software Quality Guidelines and Attributes 181
11.2.2 The Evolution of Software Design 183
11.3 Design Concepts 184
11.3.1 Abstraction 185
11.3.2 Architecture 185
11.3.3 Patterns 186
11.3.4 Separation of Concerns 187
11.3.5 Modularity 187
11.3.6 Information Hiding 188
11.3.7 Functional Independence 189
11.3.8 Re nement 190
11.3.9 Aspects 190
11.3.10 Refactoring 191
11.3.11 Object-Oriented Design Concepts 191
11.3.12 Design Classes 192
11.3.13 Dependency Inversion 194
11.3.14 Design for Test 195
11.4 The Design Model 196
11.4.1 Data Design Elements 197
11.4.2 Architectural Design Elements 197
11.4.3 Interface Design Elements 198
11.4.4 Component-Level Design Elements 200
11.4.5 Deployment-Level Design Elements 201
PROBLEMS AND POINTS TO PONDER 202
FURTHER READINGS AND INFORMATION SOURCES 203
CHAPTER 12 ARCHITECTURAL DESIGN 204
12.1 Software Architecture 205
12.1.1 What Is Architecture 205
12.1.2 Why Is Architecture Important 206
12.1.3 Architectural De******ions 207
12.1.4 Architectural Decisions 208
12.2 Architectural Genres 209
12.3 Architectural Styles 210
12.3.1 A Brief Taxonomy of Architectural Styles 210
12.3.2 Architectural Patterns 215
12.3.3 Organization and Re nement 215
12.4 Architectural Considerations 216
12.5 Architectural Decisions 218
12.6 Architectural Design 219
12.6.1 Representing the System in Context 219
12.6.2 De ning Archetypes 221
12.6.3 Re ning the Architecture into Components 222
12.6.4 Describing Instantiations of the System 224
12.6.5 Architectural Design for Web Apps 225
12.6.6 Architectural Design for Mobile Apps 226
12.7 Assessing Alternative Architectural Designs 226
12.7.1 Architectural De******ion Languages 228
12.7.2 Architectural Reviews 229
12.8 Lessons Learned 230
12.9 Pattern-based Architecture Review 230
12.10 Architecture Conformance Checking 231
12.11 Agility and Architecture 232
PROBLEMS AND POINTS TO PONDER 234
FURTHER READINGS AND INFORMATION SOURCES 234
CHAPTER 13 COMPONENT-LEVEL DESIGN 236
13.1 What Is a Component 237
13.1.1 An Object-Oriented View 237
13.1.2 The Traditional View 239
13.1.3 A Process-Related View 242
13.2 Designing Class-Based Components 242
13.2.1 Basic Design Principles 243
13.2.2 Component-Level Design Guidelines 246
13.2.3 Cohesion 247
13.2.4 Coupling 249
13.3 Conducting Component-Level Design 250
13.4 Component-Level Design for WebApps 256
13.4.1 Content Design at the Component Level 257
13.4.2 Functional Design at the Component Level 257
13.5 Designing Traditional Components 257
13.6 Component-Based Development 258
13.6.1 Domain Engineering 259
13.6.2 Component Quali cation, Adaptation, and Composition 259
13.6.3 Architectural Mismatch 261
13.6.4 Analysis and Design for Reuse 262
13.6.5 Classifying and Retrieving Components 262
PROBLEMS AND POINTS TO PONDER 264
FURTHER READINGS AND INFORMATION SOURCES 264
CHAPTER 14 USER INTERFACE DESIGN 266
14.1 The Golden Rules 267
14.1.1 Place the User in Control 267
14.1.2 Reduce the User抯 Memory Load 268
14.1.3 Make the Interface Consistent 270
14.2 User Interface Analysis and Design 271
14.2.1 Interface Analysis and Design Models 271
14.2.2 The Process 272
14.3 Interface Analysis 274
14.3.1 User Analysis 274
14.3.2 Task Analysis and Modeling 275
14.3.3 Analysis of Display Content 280
14.3.4 Analysis of the Work Environment 280
14.4 Interface Design Steps 281
14.4.1 Applying Interface Design Steps 281
14.4.2 User Interface Design Patterns 283
14.4.3 Design Issues 284
14.5 Design Evaluation 286
PROBLEMS AND POINTS TO PONDER 288
FURTHER READINGS AND INFORMATION SOURCES 289
PART THREE QUALITY MANAGEMENT 291
CHAPTER 15 QUALITY CONCEPTS 292
15.1 What Is Quality 293
15.2 Software Quality 294
15.2.1 Garvin抯 Quality Dimensions 295
15.2.2 McCall抯 Quality Factors 296
15.2.3 ISO 9126 Quality Factors 298
15.2.4 Targeted Quality Factors 298
15.2.5 The Transition to a Quantitative View 300
15.3 The Software Quality Dilemma 300
15.3.1 揋ood Enough?Software 301
15.3.2 The Cost of Quality 302
15.3.3 Risks 304
15.3.4 Negligence and Liability 305
15.3.5 Quality and Security 305
15.3.6 The Impact of Management Actions 306
15.4 Achieving Software Quality 307
15.4.1 Software Engineering Methods 307
15.4.2 Project Management Techniques 307
15.4.3 Quality Control 307
15.4.4 Quality Assurance 308
PROBLEMS AND POINTS TO PONDER 308
FURTHER READINGS AND INFORMATION SOURCES 309
CHAPTER 16 SOFTWARE QUALITY ASSURANCE 310
16.1 Background Issues 311
16.2 Elements of Software Quality Assurance 312
16.3 SQA Processes and Product Characteristics 314
16.4 SQA Tasks, Goals, and Metrics 314
16.4.1 SQA Tasks 315
16.4.2 Goals, Attributes, and Metrics 316
16.5 Formal Approaches to SQA 318
16.6 Statistical Software Quality Assurance 318
16.6.1 A Generic Example 319
16.6.2 Six Sigma for Software Engineering 320
16.7 Software Reliability 321
16.7.1 Measures of Reliability and Availability 321
16.7.2 Software Safety 322
16.8 The ISO 9000 Quality Standards 323
16.9 The SQA Plan 325
16.10 A Framework for Product Metrics 325
16.10.1 Measures, Metrics, and Indicators 325
16.10.2 The Challenge of Product Metrics 326
16.10.3 Measurement Principles 327
16.10.4 Goal-Oriented Software Measurement 327
16.10.5 The Attributes of Effective Software Metrics 328
PROBLEMS AND POINTS TO PONDER 329
FURTHER READINGS AND INFORMATION SOURCES 330
CHAPTER 17 SOFTWARE TESTING STRATEGIES 332
17.1 A Strategic Approach to Software Testing 332
17.1.1 Veri cation and Validation 334
17.1.2 Organizing for Software Testing 334
17.1.3 Software Testing Strategy桾he Big Picture 335
17.1.4 Criteria for Completion of Testing 338
17.2 Strategic Issues 338
17.3 Test Strategies for Conventional Software 339
17.3.1 Unit Testing 339
17.3.2 Integration Testing 341
17.4 Test Strategies for Object-Oriented Software 347
17.4.1 Unit Testing in the OO Context 347
17.4.2 Integration Testing in the OO Context 347
17.5 Validation Testing 348
17.5.1 Validation-Test Criteria 348
17.5.2 Con guration Review 349
17.5.3 Alpha and Beta Testing 349
17.6 System Testing 350
17.6.1 Recovery Testing 350
17.6.2 Security Testing 351
17.6.3 Stress Testing 351
17.6.4 Performance Testing 352
17.6.5 Deployment Testing 352
17.7 The Art of Debugging 353
17.7.1 The Debugging Process 353
17.7.2 Psychological Considerations 354
17.7.3 Debugging Strategies 355
17.7.4 Correcting the Error 357
PROBLEMS AND POINTS TO PONDER 357
FURTHER READINGS AND INFORMATION SOURCES 358
CHAPTER 18 TESTING CONVENTIONAL APPLICATIONS 360
18.1 Software Testing Fundamentals 361
18.2 Internal and External Views of Testing 363
18.3 White-Box Testing 364
18.4 Basis Path Testing 364
18.4.1 Flow Graph Notation 364
18.4.2 Independent Program Paths 366
18.4.3 Deriving Test Cases 368
18.5 Control Structure Testing 370
18.6 Black-Box Testing 372
18.6.1 Equivalence Partitioning 372
18.6.2 Boundary Value Analysis 373
18.7 Model-Based Testing 374
PROBLEMS AND POINTS TO PONDER 375
FURTHER READINGS AND INFORMATION SOURCES 375
CHAPTER 19 TESTING OBJECT-ORIENTED APPLICATIONS 377
19.1 Broadening the View of Testing 378
19.2 Testing OOA and OOD Models 379
19.2.1 Correctness of OOA and OOD Models 379
19.2.2 Consistency of Object-Oriented Models 380
19.3 Object-Oriented Testing Strategies 382
19.3.1 Unit Testing in the OO Context 382
19.3.2 Integration Testing in the OO Context 383
19.3.3 Validation Testing in an OO Context 383
19.4 Object-Oriented Testing Methods 383
19.4.1 The Test-Case Design Implications of OO Concepts 384
19.4.2 Applicability of Conventional Test-Case Design Methods 385
19.4.3 Fault-Based Testing 385
19.4.4 Scenario-Based Test Design 386
19.5 Testing Methods Applicable at the Class Level 386
19.5.1 Random Testing for OO Classes 386
19.5.2 Partition Testing at the Class Level 387
19.6 Interclass Test-Case Design 388
19.6.1 Multiple Class Testing 388
19.6.2 Tests Derived from Behavior Models 390
PROBLEMS AND POINTS TO PONDER 391
FURTHER READINGS AND INFORMATION SOURCES 392
CHAPTER 20 SECURITY ENGINEERING 393
20.1 Analyzing Security Requirements 394
20.2 Security and Privacy in an Online World 395
20.2.1 Social Media 396
20.2.2 Mobile Applications 396
20.2.3 Cloud Computing 396
20.2.4 The Internet of Things 397
20.3 Security Engineering Analysis 397
20.3.1 Security Requirement Elicitation 398
20.3.2 Security Modeling 399
20.3.3 Measures Design 400
20.3.4 Correctness Checks 400
20.4 Security Assurance 401
20.4.1 The Security Assurance Process 401
20.4.2 Organization and Management 402
20.5 Security Risk Analysis 403
20.6 The Role of Conventional Software Engineering Activities 404
20.7 Veri cation of Trustworthy Systems 406
PROBLEMS AND POINTS TO PONDER 408
FURTHER READINGS AND INFORMATION SOURCES 408
CHAPTER 21 SOFTWARE CONFIGURATION MANAGEMENT 410
21.1 Software Con guration Management 411
21.1.1 An SCM Scenario 412
21.1.2 Elements of a Con guration Management System 413
21.1.3 Baselines 413
21.1.4 Software Con guration Items 415
21.1.5 Management of Dependencies and Changes 415
21.2 The SCM Repository 417
21.2.1 General Features and Content 417
21.2.2 SCM Features 418
21.3 The SCM Process 419
21.3.1 Identi cation of Objects in the Software Con guration 420
21.3.2 Version Control 421
21.3.3 Change Control 422
21.3.4 Impact Management 425
21.3.5 Con guration Audit 426
21.3.6 Status Reporting 426
PROBLEMS AND POINTS TO PONDER 427
FURTHER READINGS AND INFORMATION SOURCES 428
PART FOUR MANAGING SOFTWARE PROJECTS 431
CHAPTER 22 PROJECT MANAGEMENT CONCEPTS 432
22.1 The Management Spectrum 433
22.1.1 The People 433
22.1.2 The Product 434
22.1.3 The Process 434
22.1.4 The Project 434
22.2 People 435
22.2.1 The Stakeholders 435
22.2.2 Team Leaders 436
22.2.3 The Software Team 437
22.2.4 Agile Teams 439
22.2.5 Coordination and Communication Issues 440
22.3 The Product 441
22.3.1 Software Scope 442
22.3.2 Problem Decomposition 442
22.4 The Process 442
22.4.1 Melding the Product and the Process 443
22.4.2 Process Decomposition 444
22.5 The Project 445
22.6 The W5HH Principle 446
22.7 Critical Practices 447
PROBLEMS AND POINTS TO PONDER 448
FURTHER READINGS AND INFORMATION SOURCES 448
CHAPTER 23 PROCESS AND PROJECT METRICS 451
23.1 Metrics in the Process and Project Domains 452
23.1.1 Process Metrics and Software Process Improvement 452
23.1.2 Project Metrics 455
23.2 Software Measurement 456
23.2.1 Size-Oriented Metrics 457
23.2.2 Function-Oriented Metrics 458
23.2.3 Reconciling LOC and FP Metrics 459
23.2.4 Object-Oriented Metrics 461
23.2.5 Use Case-Oriented Metrics 462
23.3 Metrics for Software Quality 462
23.3.1 Measuring Quality 463
23.3.2 Defect Removal Ef ciency 464
PROBLEMS AND POINTS TO PONDER 466
FURTHER READINGS AND INFORMATION SOURCES 467
CHAPTER 24 ESTIMATION FOR SOFTWARE PROJECTS 469
24.1 Observations on Estimation 470
24.2 The Project Planning Process 471
24.3 Software Scope and Feasibility 472
24.4 Resources 473
24.4.1 Human Resources 473
24.4.2 Reusable Software Resources 474
24.4.3 Environmental Resources 474
24.5 Software Project Estimation 475
24.6 Decomposition Techniques 476
24.6.1 Software Sizing 476
24.6.2 Problem-Based Estimation 477
24.6.3 An Example of LOC-Based Estimation 478
24.6.4 An Example of FP-Based Estimation 480
24.6.5 Process-Based Estimation 481
24.6.6 An Example of Process-Based Estimation 482
24.6.7 Estimation with Use Cases 482
24.6.8 An Example of Estimation Using Use Case Points 484
24.6.9 Reconciling Estimates 484
24.7 Empirical Estimation Models 485
24.7.1 The Structure of Estimation Models 486
24.7.2 The COCOMO II Model 486
24.7.3 The Software Equation 486
24.8 Estimation for Object-Oriented Projects 488
PROBLEMS AND POINTS TO PONDER 488
FURTHER READINGS AND INFORMATION SOURCES 489
CHAPTER 25 PROJECT SCHEDULING 490
25.1 Basic Concepts 491
25.2 Project Scheduling 493
25.2.1 Basic Principles 494
25.2.2 The Relationship between People and Effort 495
25.2.3 Effort Distribution 496
25.3 De ning a Task Set for the Software Project 497
25.3.1 A Task Set Example 498
25.3.2 Re nement of Major Tasks 499
25.4 De ning a Task Network 500
25.5 Scheduling 501
25.5.1 Time-Line Charts 502
25.5.2 Tracking the Schedule 503
25.5.3 Tracking Progress for an OO Project 504
25.6 Earned Value Analysis 505
PROBLEMS AND POINTS TO PONDER 508
FURTHER READINGS AND INFORMATION SOURCES 509
CHAPTER 26 RISK MANAGEMENT 510
26.1 Reactive versus Proactive Risk Strategies 511
26.2 Software Risks 511
26.3 Risk Identi cation 513
26.3.1 Assessing Overall Project Risk 514
26.3.2 Risk Components and Drivers 515
26.4 Risk Projection 515
26.4.1 Developing a Risk Table 516
26.4.2 Assessing Risk Impact 518
26.5 Risk Re nement 520
26.6 Risk Mitigation, Monitoring, and Management 521
26.7 The RMMM Plan 523
PROBLEMS AND POINTS TO PONDER 525
FURTHER READINGS AND INFORMATION SOURCES 526
APPENDIX 1 AN INTRODUCTION TO UML 527
APPENDIX 2 OBJECT-ORIENTED CONCEPTS 548
REFERENCES 556