PART Ⅰ Getting Started 1
Chapter 1 Introduction to Software Engineering 3
1.1 Introduction:Software Engineering Failures 4
1.2 What Is Software Engineering? 5
1.2.1 Modeling 6
1.2.2 Problem Solving 8
1.2.3 Knowledge Acquisition 8
1.2.4 Rationale 9
1.3 Software Engineering Concepts 10
1.3.1 Paicipants and Roles 11
1.3.2 Systems and Models 12
1.3.3 Wortrk Products 13
1.3.4 Activities,Tasks,and Resources 13
1.3.5 Functional and Nonfunctional Requirements 14
1.3.6 Notations,Methods,and Methodologies 15
1.4 Software Engineering Development Activities 16
1.4.1 Requirements Elicitation 16
1.4.2 Analysis 16
1.4.3 System Design 19
1.4.4 Object Design 19
1.4.5 Implementation 20
1.4.6 Testing 20
1.5 Managing Software Development 21
1.5.1 Communication 21
1.5.2 Rationale Management 22
1.5.3 Software Configuration Management 22
1.5.4 Project Management 23
1.5.5 Software Life Cycle 23
1.5.6 Putting It All Together 23
1.6 ARENA Case Study 23
1.7 Further Reading 25
1.8 Exercises 25
Chapter 2 Modeling with UML 29
2.1 Introduction 30
2.2 An Overview of UML 31
2.2.1 Use Case Diagrams 31
2.2.2 Class Diagrams 32
2.2.3 Interaction Diagrams 32
2.2.4 State Machine Diagrams 33
2.2.5 Activity Diagrams 33
2.3 Modeling Concepts 35
2.3.1 Systems,Models,and Views 35
2.3.2 Data Types,Abstract Data Types,and Instances 37
2.3.3 Classes,Abstract Classes,and Objects 38
2.3.4 Event Classes,Events,and Messages 40
2.3.5 Object-Oriented Modeling 41
2.3.6 Falsification and Prototyping 43
2.4 A Deeper View into UML 43
2.4.1 Use Case Diagrams 44
2.4.2 Class Diagrams 50
2.4.3 Interaction Diagrams 59
2.4.4 State Machine Diagrams 62
2.4.5 Activity Diagrams 65
2.4.6 Diagram Organization 68
2.4.7 Diagram Extensions 70
2.5 Further Readings 71
2.6 Exercises 72
Chapter 3 Project Organization and Communication 77
3.1 Introduction:A Rocket Example 78
3.2 An Overview of Projects 79
3.3 Project Organization Concepts 83
3.3.1 Project Organizations 83
3.3.2 Roles 86
3.3.3 Tasks and Work Products 88
3.3.4 Schedule 90
3.4 Project Communication Concepts 92
3.4.1 Planned Communication 92
3.4.2 Unplanned Communication 99
3.4.3 Communication Mechanisms 102
3.5 Organizational Activities 109
3.5.1 Joining a Team 109
3.5.2 Joining the Communication Infrastructure 109
3.5.3 Attending Team Status Meetings 110
3.5.4 Organizing Client and Project Reviews 113
3.6 Further Readings 114
3.7 Exercises 115
PART Ⅱ Dealing with Complexity 119
Chapter 4 Requirements Elicitation 121
4.1 Introduction:Usability Examples 122
4.2 An Overview of Requirements Elicitation 123
4.3 Requirements Elicitation Concepts 125
4.3.1 Functional Requirements 125
4.3.2 Nonfunctional Requirements 126
4.3.3 Completeness,Consistency,Clarity,and Correctness 128
4.3.4 Realism,Verifiability,and Traceability 129
4.3.5 Greenfield Engineering,Reengineering,and Interface Engineering 129
4.4 Requirements Elicitation Activities 130
4.4.1 Identifying Actors 130
4.4.2 Identifying Scenarios 132
4.4.3 Identifying Use Cases 135
4.4.4 Refining Use Cases 138
4.4.5 Identifying Relationships among Actors and Use Cases 140
4.4.6 Identifying Initial Analysis Objects 143
4.4.7 Identifying Nonfunctional Requirements 146
4.5 Managing Requirements Elicitation 148
4.5.1 Negotiating Specifications with Clients:Joint Application Design 148
4.5.2 Maintaining Traceability 150
4.5.3 Documenting Requirements Elicitation 151
4.6 ARENA Case Study 153
4.6.1 Initial Problem Statement 153
4.6.2 Identifying Actors and Scenarios 155
4.6.3 Identifying Use Cases 159
4.6.4 Refining Use Cases and Identifying Relationships 161
4.6.5 Identifying Nonfunctional Requirements 166
4.6.6 Lessons Learned 168
4.7 Further Readings 168
4.8 Exercises 169
Chapter 5 Analysis 173
5.1 Introduction:An Optical Illusion 174
5.2 An Overview of Analysis 174
5.3 Analysis Concepts 176
5.3.1 Analysis Object Models and Dynamic Models 176
5.3.2 Entity,Boundary,and Control Objects 177
5.3.3 Generalization and Specialization 178
5.4 Analysis Activities:From Use Cases to Objects 179
5.4.1 Identifying Entity Objects 180
5.4.2 Identifying Boundary Objects 182
5.4.3 Identifying Control Objects 184
5.4.4 Mapping Use Cases to Objects with Sequence Diagrams 185
5.4.5 Modeling Interactions among Objects with CRC Cards 189
5.4.6 Identifying Associations 190
5.4.7 Identifying Aggregates 192
5.4.8 Identifying Attributes 193
5.4.9 Modeling State-Dependent Behavior of Individual Objects 194
5.4.10 Modeling Inheritance Relationships between Objects 195
5.4.11 Reviewing the Analysis Model 196
5.4.12 Analysis Summary 197
5.5 Managing Analysis 199
5.5.1 Documenting Analysis 199
5.5.2 Assigning Responsibilities 200
5.5.3 Communicating about Analysis 201
5.5.4 Iterating over the Analysis Model 203
5.5.5 Client Sign-Off 204
5.6 ARENA Case Study 206
5.6.1 Identifying Entity Objects 206
5.6.2 Identifying Boundary Objects 211
5.6.3 Identifying Control Objects 212
5.6.4 Modeling Interactions Among Objects 212
5.6.5 Reviewing and Consolidating the Analysis Model 213
5.6.6 Lessons Learned 217
5.7 Further Readings 218
5.8 Exercises 219
Chapter 6 System Design:Decomposing the System 223
6.1 Introduction:A Floor Plan Example 224
6.2 An Overview of System Design 226
6.3 System Design Concepts 228
6.3.1 Subsystems and Classes 228
6.3.2 Services and Subsystem Interfaces 230
6.3.3 Coupling and Cohesion 230
6.3.4 Layers and Partitions 235
6.3.5 Architectural Styles 238
6.4 System Design Activities:From Objects to Subsystems 247
6.4.1 Starting Point:Analysis Model for a Route Planning System 247
6.4.2 Identifying Design Goals 249
6.4.3 Identifying Subsystems 253
6.5 Further Readings 255
6.6 Exercises 255
Chapter 7 System Design:Addressing Design Goals 259
7.1 Introduction:A Redundancy Example 260
7.2 An Overview of System Design Activities 261
7.3 Concepts:UML Deployment Diagrams 262
7.4 System Design Activities:Addressing Design Goals 264
7.4.1 Mapping Subsystems to Processors and Components 264
7.4.2 Identifying and Storing Persistent Data 266
7.4.3 Providing Access Control 269
7.4.4 Designing the Global Control Flow 275
7.4.5 Identifying Services 277
7.4.6 Identifying Boundary Conditions 279
7.4.7 Reviewing System Design 282
7.5 Managing System Design 284
7.5.1 Documenting System Design 284
7.5.2 Assigning Responsibilities 286
7.5.3 Communicating about System Design 287
7.5.4 Iterating over the System Design 288
7.6 ARENA Case Study 290
7.6.1 Identifying Design Goals 290
7.6.2 Identifying Subsystems 291
7.6.3 Mapping Subsystems to Processors and Components 292
7.6.4 Identifying and Storing Persistent Data 294
7.6.5 Providing Access Control 295
7.6.6 Designing the Global Control Flow 296
7.6.7 Identifying Services 297
7.6.8 Identifying Boundary Conditions 299
7.6.9 Lessons Learned 302
7.7 Further Readings 302
7.8 Exercises 303
Chapter 8 Object Design:Reusing Pattern Solutions 307
8.1 Introduction:Bloopers 308
8.2 An Overview of Object Design 309
8.3 Reuse Concepts:Solution Objects,Inheritance,and Design Patterns 313
8.3.1 Application Objects and Solution Objects 313
8.3.2 Specification Inheritance and Implementation Inheritance 313
8.3.3 Delegation 316
8.3.4 The Liskov Substitution Principle 317
8.3.5 Delegation and Inheritance in Design Patterns 317
8.4 Reuse Activities:Selecting Design Patterns and Components 320
8.4.1 Encapsulating Data Stores with the Bridge Pattern 321
8.4.2 Encapsulating Legacy Components with the Adapter Pattern 323
8.4.3 Encapsulating Context with the Strategy Pattern 325
8.4.4 Encapsulating Platforms with the Abstract Factory Pattern 326
8.4.5 Encapsulating Control Flow with the Command Pattern 329
8.4.6 Encapsulating Hierarchies with the Composite Design Pattern 330
8.4.7 Heuristics for Selecting Design Patterns 332
8.4.8 Identifying and Adjusting Application Frameworks 332
8.5 Managing Reuse 337
8.5.1 Documenting Reuse 338
8.5.2 Assigning Responsibilities 340
8.6 ARENA Case Study 341
8.6.1 Applying the Abstract Factory Design Pattern 341
8.6.2 Applying the Command Design Pattern 342
8.6.3 Applying the Observer Design Pattern 342
8.6.4 Lessons Learned 344
8.7 Further Readings 344
8.8 Exercises 345
Chapter 9 Object Design:Specifying Interfaces 349
9.1 Introduction:A Railroad Example 350
9.2 An Overview of Interface Specification 351
9.3 Interface Specification Concepts 352
9.3.1 Class Implementor,Class Extender,and Class User 353
9.3.2 Types,Signatures,and Visibility 354
9.3.3 Contracts:Invariants,Preconditions,and Postconditions 356
9.3.4 Object Constraint Language 357
9.3.5 OCL Collections:Sets,Bags,and Sequences 361
9.3.6 OCL Quantifiers:forAll and exists 365
9.4 Interface Specification Activities 365
9.4.1 Identifying Missing Attributes and Operations 366
9.4.2 Specifying Types,Signatures,and Visibility 368
9.4.3 Specifying Pre- and Postconditions 369
9.4.4 Specifying Invariants 371
9.4.5 Inheriting Contracts 374
9.5 Managing Object Design 375
9.5.1 Documenting Object Design 375
9.5.2 Assigning Responsibilities 381
9.5.3 Using Contracts During Requirements Analysis 382
9.6 ARENA Case Study 382
9.6.1 Identifying Missing Operations in TournamentStyle and Round 383
9.6.2 Specifying the TournamentStyle and Round Contracts 384
9.6.3 Specifying the KnockOutStyl e and KnockOutRound Contracts 386
9.6.4 Lessons Learned 387
9.7 Further Readings 388
9.8 Exercises 389
Chapter 10 Mapping Models to Code 393
10.1 Introduction:A Book Example 394
10.2 An Overview of Mapping 395
10.3 Mapping Concepts 396
10.3.1 Model Transformation 397
10.3.2 Refactoring 398
10.3.3 Forward Engineering 400
10.3.4 Reverse Engineering 401
10.3.5 Transformation Principles 401
10.4 Mapping Activities 402
10.4.1 Optimizing the Object Design Model 402
10.4.2 Mapping Associations to Collections 406
10.4.3 Mapping Contracts to Exceptions 412
10.4.4 Mapping Object Models to a Persistent Storage Schema 416
10.5 Managing Implementation 422
10.5.1 Documenting Transformations 422
10.5.2 Assigning Responsibilities 424
10.6 ARENA Case Study 424
10.6.1 ARENA Statistics 424
10.6.2 Mapping Associations to Collections 426
10.6.3 Mapping Contracts to Exceptions 428
10.6.4 Mapping the Object Model to a Database Schema 430
10.6.5 Lessons Learned 431
10.7 Further Readings 432
10.8 Exercises 432
Chapter 11 Testing 437
11.1 Introduction:Testing The Space Shuttle 438
11.2 An Overview of Testing 440
11.3 Testing Concepts 444
11.3.1 Faults,Erroneous States,and Failures 445
11.3.2 Test Cases 448
11.3.3 Test Stubs and Drivers 450
11.3.4 Corrections 451
11.4 Testing Activities 451
11.4.1 Component Inspection 452
11.4.2 Usability Testing 453
11.4.3 Unit Testing 455
11.4.4 Integration Testing 465
11.4.5 System Testing 471
11.5 Managing Testing 476
11.5.1 Planning Testing 476
11.5.2 Documenting Testing 478
11.5.3 Assigning Responsibilities 480
11.5.4 Regression Testing 481
11.5.5 Automating Testing 482
11.5.6 Model-Based Testing 484
11.6 Further Readings 487
11.7 Exercises 488
PART Ⅲ Managing Change 491
Chapter 12 Rationale Management 493
12.1 Introduction:Slicing Ham 494
12.2 An Overview of Rationale 495
12.3 Rationale Concepts 497
12.3.1 Centralized Traffic Control 498
12.3.2 Defining the Problem:Issues 499
12.3.3 Exploring the Solution Space:Proposals 500
12.3.4 Evaluating the Solution Space:Criteria and Arguments 502
12.3.5 Collapsing the Solution Space:Resolutions 504
12.3.6 Implementing Resolutions:Action Items 504
12.3.7 Examples of Issue-Based Models and Systems 505
12.4 Rationale Activities:From Issues to Decisions 510
12.4.1 CTC System Design 510
12.4.2 Capturing Rationale in Meetings 511
12.4.3 Capturing Rationale Asynchronously 519
12.4.4 Capturing Rationale when Discussing Change 520
12.4.5 Reconstructing Rationale 524
12.5 Managing Rationale 526
12.5.1 Documenting Rationale 526
12.5.2 Assigning Responsibilities 528
12.5.3 Heuristics for Communicating about Rationale 529
12.5.4 Issue Modeling and Negotiation 530
12.5.5 Conflict Resolution Strategies 531
12.6 Further Readings 533
12.7 Exercises 533
Chapter 13 Configuration Management 537
13.1 Introduction:An Aircraft Example 538
13.2 An Overview of Configuration Management 540
13.3 Configuration Management Concepts 541
13.3.1 Configuration Items and CM Aggregates 542
13.3.2 Versions and Configurations 543
13.3.3 Change Requests 544
13.3.4 Promotions and Releases 544
13.3.5 Repositories and Workspaces 545
13.3.6 Version Identification Schemes 545
13.3.7 Changes and Change Sets 548
13.3.8 Configuration Management Tools 548
13.4 Configuration Management Activities 550
13.4.1 Configuration Item and CM Aggregate Identification 552
13.4.2 Promotion Management 554
13.4.3 Release Management 555
13.4.4 Branch Management 557
13.4.5 Variant Management 562
13.4.6 Change Management 565
13.5 Managing Configuration Management 566
13.5.1 Documenting Configuration Management 567
13.5.2 Assigning Configuration Management Responsibilities 568
13.5.3 Planning Configuration Management Activities 568
13.5.4 Continuous Integration:Testing and Promotion Management 569
13.6 Further Readings 571
13.7 Exercises 572
Chapter 14 Project Management 575
14.1 Introduction:The STS-51L Launch Decision 576
14.2 An Overview of Project Management 577
14.3 Project Management Concepts 584
14.3.1 Tasks and Activities 584
14.3.2 Work Products,Work Packages,and Roles 585
14.3.3 Work Breakdown Structure 586
14.3.4 Task Model 586
14.3.5 Skill Matrix 588
14.3.6 The Software Project Management Plan 589
14.4 Classical Project Management Activities 592
14.4.1 Planning the Project 592
14.4.2 Organizing the Project 598
14.4.3 Controlling the Project 603
14.4.4 Terminating the Project 609
14.5 Agile Project Management Activities 611
14.5.1 Planning the Project:Create Product and Sprint Backlogs 611
14.5.2 Organizing the Project 612
14.5.3 Controlling the Project:Daily Scrums and Burn Down Charts 613
14.5.4 Terminating the Project:Sprint Reviews 614
14.6 Further Readings 616
14.7 Exercises 617
Chapter 15 Software Life Cycle 621
15.1 Introduction:Polynesian Navigation 622
15.2 IEEE 1074:Standard for Developing Life Cycle Processes 626
15.2.1 Processes and Activities 626
15.2.2 Life Cycle Modeling 628
15.2.3 Project Management 628
15.2.4 Pre-Development 629
15.2.5 Development 630
15.2.6 Post-Development 631
15.2.7 Integral Processes(Cross-Development) 632
15.3 Characterizing the Maturity of Software Life Cycle Models 633
15.4 Life Cycle Models 636
15.4.1 Sequential Activity-Centered Models 637
15.4.2 Iterative Activity-Centered Models 639
15.4.3 Entity-Centered Models 644
15.5 Further Readings 647
15.6 Exercises 648
Chapter 16 Methodologies:Putting It All Together 651
16.1 Introduction:The First Ascent of K2 652
16.2 Project Environment 655
16.3 Methodology Issues 657
16.3.1 How Much Planning? 657
16.3.2 How Much Reuse? 658
16.3.3 How Much Modeling? 659
16.3.4 How Much Process? 661
16.3.5 How Much Control and Monitoring? 661
16.3.6 When to Redefine Project Goals? 662
16.4 A Spectrum of Methodologies 662
16.4.1 Royce’s Methodology 663
16.4.2 Extreme Programming 669
16.4.3 Rugby Methodologies 673
16.5 Case Studies 680
16.5.1 XP Project:ATRACT 681
16.5.2 Local King Client:FRIEND 684
16.5.3 Distributed Project:JAMES 691
16.5.4 Case Studies Summary 698
16.6 Further Readings 703
16.7 Exercises 703
PART Ⅳ Appendices 707
AppendixA Design Patterns 709
A.1 Abstract Factory:Encapsulating Platforms 710
A.2 Adapter:Wrapping Around Legacy Code 711
A.3 Bridge:Allowing for Alternate Implementations 712
A.4 Command:Encapsulating Control Flow 713
A.5 Composite:Representing Recursive Hierarchies 714
A.6 Facade:Encapsulating Subsystems 715
A.7 Observer:Decoupling Entities from Views 716
A.8 Proxy:Encapsulating Expensive Objects 717
A.9 Strategy:Encapsulating Algorithms 718
A.10 Heuristics for Selecting Design Patterns 719
AppendixB Glossary 721
Appendix C Bibliography 753
Index 767