图书前言

xix

TABLE OF CONTENTS

CHAPTER 1 INTRODUCTION TO SOFTWARE ENGINEERING 1

1.1 The Evolving Role of Software 2

1.2 Software 4

1.3 The Changing Nature of Software 8

1.4 Legacy Software 10

1.4.1 The Quality of Legacy Software 11

1.4.2 Software Evolution 11

1.5 Software Myths 13

1.6 How It All Starts 15

1.7 Summary 16

REFERENCES 17

PROBLEMS AND POINTS TO PONDER 17

FURTHER READINGS AND INFORMATION SOURCES 18

PART ONE-THE SOFTWARE PROCESS 19

CHAPTER 2 A GENERIC VIEW OF PROCESS 20

2.1 Software Engineering-A Layered Technology 21

2.2 A Process Framework 22

2.3 The Capability Maturity Model Integration (CMMI) 27

2.4 Process Patterns 31

2.5 Process Assessment 34

2.6 Personal and Team Process Models 36

2.6.1 Personal Software Process (PSP) 36

2.6.2 Team Software Process (TSP) 38

2.7 Process Technology 39

2.8 Product and Process 40

2.9 Summary 41

REFERENCES 42

PROBLEMS AND POINTS TO PONDER 43

FURTHER READINGS AND INFORMATION SOURCES 43

CHAPTER 3 PROCESS MODELS 45

3.1 Prescriptive Models 46

3.2 The Waterfall Model 47

3.3 Incremental Process Models 48

3.3.1 The Incremental Model 49

3.3.2 The RAD Model 51

3.4 Evolutionary Process Models 51

3.4.1 Prototyping 51

3.4.2 The Spiral Model 54

xx TABLE OF CONTENTS

3.4.3 The Concurrent Development Model 56

3.4.4 A Final Comment on Evolutionary Processes 57

3.5 Specialized Process Models 59

3.5.1 Component-Based Development 59

3.5.2 The Formal Methods Model 60

3.5.3 Aspect-Oriented Software Development 61

3.6 The Unified Process 62

3.6.1 A Brief History 63

3.6.2 Phases of the Unified Process 64

3.6.3 Unified Process Work Products 66

3.7 Summary 67

REFERENCES 68

PROBLEMS AND POINTS TO PONDER 69

FURTHER READINGS AND INFORMATION SOURCES 70

CHAPTER 4 AN AGILE VIEW OF PROCESS 71

4.1 What Is Agility? 73

4.2 What Is an Agile Process? 74

4.2.1 The Politics of Agile Development 75

4.2.2 Human Factors 76

4.3 Agile Process Models 77

4.3.1 Extreme Programming (XP) 78

4.3.2 Adaptive Software Development (ASD) 82

4.3.3 Dynamic Systems Development Method (DSDM) 84

4.3.4 Scrum 85

4.3.5 Crystal 87

4.3.6 Feature Driven Development (FDD) 88

4.3.7 Agile Modeling (AM) 89

4.4 Summary 91

REFERENCES 92

PROBLEMS AND POINTS TO PONDER 93

FURTHER READINGS AND INFORMATION SOURCES 94

PART TWO-SOFTWARE ENGINEERING PRACTICE 95

CHAPTER 5 SOFTWARE ENGINEERING PRACTICE 96

5.1 Software Engineering Practice 97

5.1.1 The Essence of Practice 97

5.1.2 Core Principles 99

5.2 Communication Practices 101

5.3 Planning Practices 104

5.4 Modeling Practices 107

5.4.1 Analysis Modeling Principles 108

5.4.2 Design Modeling Principles 109

5.5 Construction Practice 112

5.5.1 Coding Principles and Concepts 113

5.5.2 Testing Principles 114

5.6 Deployment 116

5.7 Summary 118

10 TABLE OF CONTENTS

xxi TABLE OF CONTENTS

REFERENCES 119

PROBLEMS AND POINTS TO PONDER 120

FURTHER READINGS AND INFORMATION SOURCES 120

CHAPTER 6 SYSTEM ENGINEERING 122

6.1 Computer-Based Systems 123

6.2 The System Engineering Hierarchy 125

6.2.1 System Modeling 126

6.2.2 System Simulation 128

6.3 Business Process Engineering: An Overview 129

6.4 Product Engineering: An Overview 130

6.5 System Modeling 132

6.5.1 Hatley-Pirbhai Modeling 133

6.5.2 System Modeling with UML 135

6.6 Summary 139

REFERENCES 140

PROBLEMS AND POINTS TO PONDER 140

FURTHER READINGS AND INFORMATION SOURCES 141

CHAPTER 7 REQUIREMENTS ENGINEERING 142

7.1 A Bridge to Design and Construction 143

7.2 Requirements Engineering Tasks 144

7.2.1 Inception 144

7.2.2 Elicitation 145

7.2.3 Elaboration 145

7.2.4 Negotiation 146

7.2.5 Specification 147

7.2.6 Validation 147

7.2.7 Requirements Management 148

7.3 Initiating the Requirements Engineering Process 149

7.3.1 Identifying the Stakeholders 150

7.3.2 Recognizing Multiple Viewpoints 150

7.3.3 Working toward Collaboration 151

7.3.4 Asking the First Questions 151

7.4 Eliciting Requirements 152

7.4.1 Collaborative Requirements Gathering 153

7.4.2 Quality Function Deployment 156

7.4.3 User Scenarios 157

7.4.4 Elicitation Work Products 158

7.5 Developing Use-Cases 159

7.6 Building the Analysis Model 164

7.6.1 Elements of the Analysis Model 164

7.6.2 Analysis Patterns 168

7.7 Negotiating Requirements 169

7.8 Validating Requirements 171

7.9 Summary 172

REFERENCES 172

PROBLEMS AND POINTS TO PONDER 173

FURTHER READINGS AND INFORMATION SOURCES 174

xxii   TABLE OF CONTENTS 

CHAPTER 8 BUILDING THE ANALYSIS MODEL 175

8.1 Requirements Analysis 176

8.1.1 Overall Objective and Philosophy 177

8.1.2 Analysis Rules of Thumb 178

8.1.3 Domain Analysis 178

8.2 Analysis Modeling Approaches 179

8.3 Data Modeling Concepts 181

8.3.1 Data Objects 181

8.3.2 Data Attributes 182

8.3.3 Relationships 182

8.3.4 Cardinality and Modality 183

8.4 Object-Oriented Analysis 185

8.5 Scenario-Based Modeling 186

8.5.1 Writing Use-Cases 186

8.5.2 Developing an Activity Diagram 191

8.5.3 Swimlane Diagrams 192

8.6 Flow-Oriented Modeling 194

8.6.1 Creating a Data Flow Model 194

8.6.2 Creating a Control Flow Model 197

8.6.3 The Control Specification 198

8.6.4 The Process Specification 200

8.7 Class-Based Modeling 201

8.7.1 Identifying Analysis Classes 201

8.7.2 Specifying Attributes 204

8.7.3 Defining Operations 205

8.7.4 Class-Responsibility-Collaborator (CRC) Modeling 208

8.7.5 Associations and Dependencies 214

8.7.6 Analysis Packages 215

8.8 Creating a Behavioral Model 216

8.8.1 Identifying Events with the Use-Case 217

8.8.2 State Representations 218

8.9 Summary 221

REFERENCES 222

PROBLEMS AND POINTS TO PONDER 223

FURTHER READINGS AND INFORMATION SOURCES 224

CHAPTER 9 DESIGN ENGINEERING 226

9.1 Design within the Context of Software Engineering 227

9.2 Design Process and Design Quality 229

9.3 Design Concepts 233

9.3.1 Abstraction 233

9.3.2 Architecture 233

9.3.3 Patterns 234

9.3.4 Modularity 235

9.3.5 Information Hiding 236

9.3.6 Functional Independence 236

9.3.7 Refinement 237

9.3.8 Refactoring 238

9.3.9 Design Classes 239

9.4 The Design Model 242

9.4.1 Data Design Elements 243

xxiii TABLE OF CONTENTS

9.4.2 Architectural Design Elements 243

9.4.3 Interface Design Elements 244

9.4.4 Component-Level Design Elements 246

9.4.5 Deployment-Level Design Elements 247

9.5 Pattern-Based Software Design 248

9.5.1 Describing a Design Pattern 248

9.5.2 Using Patterns in Design 249

9.5.3 Frameworks 249

9.6 Summary 250

REFERENCES 251

PROBLEMS AND POINTS TO PONDER 251

FURTHER READINGS AND INFORMATION SOURCES 252

CHAPTER 10 CREATING AN ARCHITECTURAL DESIGN 254

10.1 Software Architecture 255

10.1.1 What Is Architecture? 255

10.1.2 Why Is Architecture Important? 256

10.2 Data Design 257

10.2.1 Data Design at the Architectural Level 257

10.2.2 Data Design at the Component Level 258

10.3 Architectural Styles and Patterns 259

10.3.1 A Brief Taxonomy of Architectural Styles 260

10.3.2 Architectural Patterns 264

10.3.3 Organization and Refinement 265

10.4 Architectural Design 266

10.4.1 Representing the System in Context 266

10.4.2 Defining Archetypes 268

10.4.3 Refining the Architecture into Components 269

10.4.4 Describing Instantiations of the System 271

10.5 Assessing Alternative Architectural Designs 272

10.5.1 An Architecture Trade-Off Analysis Method 272

10.5.2 Architectural Complexity 274

10.5.3 Architectural Description Languages 274

10.6 Mapping Data Flow into a Software Architecture 275

10.6.1 Transform Flow 276

10.6.2 Transaction Flow 276

10.6.3 Transform Mapping 277

10.6.4 Transaction Mapping 284

10.6.5 Refining the Architectural Design 288

10.7 Summary 288

REFERENCES 289

PROBLEMS AND POINTS TO PONDER 290

FURTHER READINGS AND INFORMATION SOURCES 291

CHAPTER 11 MODELING COMPONENT-LEVEL DESIGN 292

11.1 What Is a Component? 293

11.1.1 An Object-Oriented View 294

11.1.2 The Conventional View 295

11.1.3 A Process-Related View 298

11.2 Designing Class-Based Components 298

11.2.1 Basic Design Principles 299

xxiv TABLE OF CONTENTS 

11.2.2 Component-Level Design Guidelines 302

11.2.3 Cohesion 303

11.2.4 Coupling 305

11.3 Conducting Component-Level Design 307

11.4 Object Constraint Language 313

11.5 Designing Conventional Components 315

11.5.1 Graphical Design Notation 316

11.5.2 Tabular Design Notation 317

11.5.3 Program Design Language 318

11.5.4 Comparison of Design Notation 320

11.6 Summary 321

REFERENCES 322

PROBLEMS AND POINTS TO PONDER 322

FURTHER READINGS AND INFORMATION SOURCES 323

CHAPTER 12 PERFORMING USER INTERFACE DESIGN 324

12.1 The Golden Rules 325

12.1.1 Place the User in Control 325

12.1.2 Reduce the User's Memory Load 327

12.1.3 Make the Interface Consistent 328

12.2 User Interface Analysis and Design 329

12.2.1 Interface Analysis and Design Models 330

12.2.2 The Process 331

12.3 Interface Analysis 333

12.3.1 User Analysis 333

12.3.2 Task Analysis and Modeling 335

12.3.3 Analysis of Display Content 340

12.3.4 Analysis of the Work Environment 341

12.4 Interface Design Steps 341

12.4.1 Applying Interface Design Steps 342

12.4.2 User Interface Design Patterns 343

12.4.3 Design Issues 345

12.5 Design Evaluation 349

12.6 Summary 351

REFERENCES 351

PROBLEMS AND POINTS TO PONDER 352

FURTHER READINGS AND INFORMATION SOURCES 353

CHAPTER 13 TESTING STRATEGIES 354

13.1 A Strategic Approach to Software Testing 355

13.1.1 Verification and Validation 356

13.1.2 Organizing for Software Testing 356

13.1.3 A Software Testing Strategy for Conventional Architectures 358

13.1.4 A Software Testing Strategy for Object-Oriented Architectures 359

13.1.5 Criteria for Completion of Testing 360

13.2 Strategic Issues 361

13.3 Test Strategies for Conventional Software 362

13.3.1 Unit Testing 362

13.3.2 Integration Testing 365

13.4 Test Strategies for Object-Oriented Software 372

13.4.1 Unit Testing in the OO Context 372

13.4.2 Integration Testing in the OO Context 373

xxv TABLE OF CONTENTS

13.5 Validation Testing 374

13.5.1 Validation Test Criteria 374

13.5.2 Configuration Review 374

13.5.3 Alpha and Beta Testing 374

13.6 System Testing 376

13.6.1 Recovery Testing 377

13.6.2 Security Testing 377

13.6.3 Stress Testing 377

13.6.4 Performance Testing 378

13.7 The Art of Debugging 379

13.7.1 The Debugging Process 379

13.7.2 Psychological Considerations 381

13.7.3 Debugging Strategies 382

13.7.4 Correcting the Error 384

13.8 Summary 384

REFERENCES 385

PROBLEMS AND POINTS TO PONDER 385

FURTHER READINGS AND INFORMATION SOURCES 386

CHAPTER 14 TESTING TACTICS 388

14.1 Software Testing Fundamentals 389

14.2 Black-Box and White-Box Testing 391

14.3 White-Box Testing 392

14.4 Basis Path Testing 393

14.4.1 Flow Graph Notation 392

14.4.2 Independent Program Paths 394

14.4.3 Deriving Test Cases 396

14.4.4 Graph Matrices 399

14.5 Control Structure Testing 400

14.5.1 Condition Testing 400

14.5.2 Data Flow Testing 400

14.5.3 Loop Testing 401

14.6 Black-Box Testing 402

14.6.1 Graph-Based Testing Methods 403

14.6.2 Equivalence Partitioning 405

14.6.3 Boundary Value Analysis 406

14.6.4 Orthogonal Array Testing 407

14.7 Object-Oriented Testing Methods 410

14.7.1 The Test Case Design Implications of OO Concepts 410

14.7.2 Applicability of Conventional Test Case Design Methods 411

14.7.3 Fault-Based Testing 411

14.7.4 Test Cases and Class Hierarchy 412

14.7.5 Scenario-Based Testing 412

14.7.6 Testing Surface Structure and Deep Structure 414

14.8 Testing Methods Applicable at the Class Level 415

14.8.1 Random Testing for OO Classes 415

14.8.2 Partition Testing at the Class Level 416

14.9 InterClass Test Case Design 417

14.9.1 Multiple Class Testing 417

14.9.2 Tests Derived from Behavior Models 418

14.10 Testing for Specialized Environments, Architectures, and Applications 420

14.10.1 Testing GUIs 420

xxvi TABLE OF CONTENTS

14.10.2 Testing of Client/Server Architectures 420

14.10.3 Testing Documentation and Help Facilities 421

14.10.4 Testing for Real-Time Systems 422

14.11 Testing Patterns 424

14.12 Summary 425

REFERENCES 426

PROBLEMS AND POINTS TO PONDER 427

FURTHER READINGS AND INFORMATION SOURCES 428

CHAPTER 15 PRODUCT METRICS 429

15.1 Software Quality 430

15.1.1 McCall's Quality Factors 431

15.1.2 ISO 9126 Quality Factors 432

15.1.3 The Transition to a Quantitative View 433

15.2 A Framework for Product Metrics 434

15.2.1 Measures, Metrics, and Indicators 434

15.2.2 The Challenge of Product Metrics 434

15.2.3 Measurement Principles 435

15.2.4 Goal-Oriented Software Measurement 436

15.2.5 The Attributes of Effective Software Metrics 437

15.2.6 The Product Metrics Landscape 438

15.3 Metrics for the Analysis Model 440

15.3.1 Function-Based Metrics 440

15.3.2 Metrics for Specification Quality 444

15.4 Metrics for the Design Model 4445

15.4.1 Architectural Design Metrics 445

15.4.2 Metrics for Object-Oriented Design 448

15.4.3 Class-Oriented Metrics-The CK Metrics Suite 449

15.4.4 Class-Oriented Metrics-The MOOD Metrics Suite 452

15.4.5 OO Metrics Proposed by Lorenz and Kidd 452

15.4.6 Component-Level Design Metrics 454

15.4.7 Operation-Oriented Metrics 456

15.4.8 User Interface Design Metrics 457

15.5 Metrics for Source Code 458

15.6 Metrics for Testing 459

15.6.1 Halstead Metrics Applied to Testing 459

15.6.2 Metrics for Object-Oriented Testing 459

15.7 Metrics for Maintenance 460

15.8 Summary 461

REFERENCES 462

PROBLEMS AND POINTS TO PONDER 464

FURTHER READINGS AND INFORMATION SOURCES 465

PART THREE-APPLYING WEB ENGINEERING 467

CHAPTER 16 WEB ENGINEERING 468

16.1 Attributes of Web-Based Systems and Applications 469

16.2 WebApp Engineering Layers 472

16.2.1 Process 472

16.2.2 Methods 473

16.2.3 Tools and Technology 474

xxvii TABLE OF CONTENTS

16.3 The Web Engineering Process 474

16.3.1 Defining the Framework 475

16.3.2 Refining the Framework 477

16.4 Web Engineering Best Practices 478

16.5 Summary 479

REFERENCES 480

PROBLEMS AND POINTS TO PONDER 480

FURTHER READINGS AND INFORMATION SOURCES 481

CHAPTER 17 INITIATING A WEBAPP PROJECT 482

17.1 Formulating Web-Based Systems 483

17.1.1 Formulation Questions 483

17.1.2 Requirements Gathering for WebApps 485

17.1.3 The Bridge to Analysis Modeling 489

17.2 Planning for Web Engineering Projects 490

17.3 The Web Engineering Team 491

17.3.1 The Players 491

17.3.2 Building the Team 492

17.4 Project Management Issues for Web Engineering 493

17.4.1 WebApp Planning-Outsourcing 494

17.4.2 WebApp Planning-In-House Web Engineering 498

17.5 Metrics for Web Engineering and WebApps 500

17.5.1 Metrics for Web Engineering Effort 501

17.5.2 Metrics for Assessing Business Value 502

17.6 "Worst Practices" for WebApp Projects 502

17.7 Summary 504

REFERENCES 504

PROBLEMS AND POINTS TO PONDER 505

FURTHER READINGS AND INFORMATION SOURCES 506

CHAPTER 18 ANALYSIS FOR WEBAPPS 507

18.1 Requirements Analysis for WebApps 508

18.1.1 The User Hierarchy 509

18.1.2 Developing Use-Cases 510

18.1.3 Refining the Use-Case Model 512

18.2 The Analysis Model for WebApps 513

18.3 The Content Model 513

18.3.1 Defining Content Objects 514

18.3.2 Content Relationships and Hierarchy 514

18.3.3 Analysis Classes for WebApps 515

18.4 The Interaction Model 516

18.5 The Functional Model 519

18.6 The Configuration Model 521

18.7 Relationship-Navigation Analysis 521

18.7.1 Relationship Analysis-Key Questions 522

18.7.2 Navigation Analysis 523

18.8 Summary 524

REFERENCES 525

PROBLEMS AND POINTS TO PONDER 525

FURTHER READINGS AND INFORMATION SOURCES 526

xxviii TABLE OF CONTENTS

CHAPTER 19 DESIGN FOR WEBAPPS 527

19.1 Design Issues for Web Engineering 528

19.1.1 Design and WebApp Quality 528

19.1.2 Design Goals 531

19.2 The WebE Design Pyramid 532

19.3 WebApp Interface Design 533

19.3.1 Interface Design Principles and Guidelines 534

19.3.2 Interface Control Mechanisms 539

19.3.3 Interface Design Workflow 539

19.4 Aesthetic Design 541

19.4.1 Layout Issues 542

19.4.2 Graphic Design Issues 542

19.5 Content Design 543

19.5.1 Content Objects 543

19.5.2 Content Design Issues 544

19.6 Architecture Design 545

19.6.1 Content Architecture 545

19.6.2 WebApp Architecture 547

19.7 Navigation Design 549

19.7.1 Navigation Semantics 549

19.7.2 Navigation Syntax 551

19.8 Component Level Design 552

19.9 Hypermedia Design Patterns 552

19.10 Object-Oriented Hypermedia Design Method (OOHDM) 554

19.10.1 Conceptual Design for OOHDM 554

19.10.2 Navigational Design for OOHDM 555

19.10.3 Abstract Interface Design and Implementation 556

19.11 Design Metrics for WebApps 556

19.12 Summary 557

REFERENCES 558

PROBLEMS AND POINTS TO PONDER 560

FURTHER READINGS AND INFORMATION SOURCES 561

CHAPTER 20 TESTING FOR WEBAPPS 562

20.1 Testing Concepts for WebApps 563

20.1.1 Dimensions of Quality 563

20.1.2 Errors within a WebApp Environment 564

20.1.3 Testing Strategy 565

20.1.4 Test Planning 566

20.2 The Testing Process-An Overview 566

20.3 Content Testing 569

20.3.1 Content Testing Objectives 569

20.3.2 Database Testing 571

20.4 User Interface Testing 573

20.4.1 Interface Testing Strategy 573

20.4.2 Testing Interface Mechanisms 574

20.4.3 Testing Interface Semantics 576

20.4.4 Usability Tests 576

20.4.5 Compatibility Tests 578

20.5 Component-Level Testing 579

xxix TABLE OF CONTENTS

20.6 Navigation Testing 581

20.6.1 Testing Navigation Syntax 581

20.6.2 Testing Navigation Semantics 592

20.7 Configuration Testing 583

20.7.1 Server-Side Issues 584

20.7.2 Client-Side Issues 584

20.8 Security Testing 585

20.9 Performance Testing 587

20.9.1 Performance Testing Objectives 587

20.9.2 Load Testing 588

20.9.3 Stress Testing 588

20.10 Summary 590

REFERENCES 591

PROBLEMS AND POINTS TO PONDER 592

FURTHER READINGS AND INFORMATION SOURCES 593

PART FOUR-MANAGING SOFTWARE PROJECTS 595

CHAPTER 21 PROJECT MANAGEMENT 596

21.1 The Management Spectrum 597

21.1.1 The People 597

21.1.2 The Product 598

21.1.3 The Process 598

21.1.4 The Project 598

21.2 The People 599

21.2.1 The Stakeholders 599

21.2.2 Team Leaders 600

21.2.3 The Software Team 601

21.2.4 Agile Teams 604

21.2.5 Coordination and Communication Issues 605

21.3 The Product 606

21.3.1 Software Scope 606

21.3.2 Problem Decomposition 607

21.4 The Process 608

21.4.1 Melding the Product and the Process 608

21.4.2 Process Decomposition 609

21.5 The Project 610

21.6 The W5HH Principle 612

21.7 Critical Practices 612

21.8 Summary 613

REFERENCES 614

PROBLEMS AND POINTS TO PONDER 614

FURTHER READINGS AND INFORMATION SOURCES 615

CHAPTER 22 METRICS FOR PROCESS AND PROJECTS 617

22.1 Metrics in the Process and Project Domains 618

22.1.1 Process Metrics and Software Process Improvement 618

22.1.2 Project Metrics 621

22.2 Software Measurement 622

22.2.1 Size-Oriented Metrics 623

22.2.2 Function-Oriented Metrics 624

xxx TABLE OF CONTENTS

22.2.3 Reconciling LOC and FP Metrics 624

22.2.4 Object-Oriented Metrics 626

22.2.5 Use-Case Oriented Metrics 627

22.2.6 Web Engineering Project Metrics 627

22.3 Metrics for Software Quality 629

22.3.1 Measuring Quality 630

22.3.2 Defect Removal Efficiency 631

22.4 Integrating Metrics within the Software Process 632

22.4.1 Arguments for Software Metrics 633

22.4.2 Establishing a Baseline 633

22.4.3 Metrics Collection, Computation, and Evaluation 634

22.5 Metrics for Small Organizations 634

22.6 Establishing a Software Metrics Program 636

22.7 Summary 638

REFERENCES 638

PROBLEMS AND POINTS TO PONDER 639

FURTHER READINGS AND INFORMATION SOURCES 640

CHAPTER 23 ESTIMATION 642

23.1 Observations on Estimation 643

23.2 The Project Planning Process 644

23.3 Software Scope and Feasibility 645

23.4 Resources 645

23.4.1 Human Resources 646

23.4.2 Reusable Software Resources 646

23.4.3 Environmental Resources 647

23.5 Software Project Estimation 648

23.6 Decomposition Techniques 649

23.6.1 Software Sizing 649

23.6.2 Problem-Based Estimation 650

23.6.3 An Example of LOC-Based Estimation 651

23.6.4 An Example of FP-Based Estimation 653

23.6.5 Process-Based Estimation 654

23.6.6 An Example of Process-Based Estimation 655

23.6.7 Estimation with Use-Cases 656

23.6.8 An Example of Use-Case Based Estimation 657

23.6.9 Reconciling Estimates 658

23.7 Empirical Estimation Models 659

23.7.1 The Structure of Estimation Models 660

23.7.2 The COCOMO II Model 660

23.7.3 The Software Equation 662

23.8 Estimation for Object-Oriented Projects 663

23.9 Specialized Estimation Techniques 664

23.9.1 Estimation for Agile Development 664

23.9.2 Estimation for Web Engineering Projects 665

23.10 The Make/Buy Decision 666

23.10.1 Creating a Decision Tree 667

23.10.2 Outsourcing 668

23.11 Summary 669

REFERENCES 670

PROBLEMS AND POINTS TO PONDER 671

FURTHER READINGS AND INFORMATION SOURCES 671

xxxi TABLE OF CONTENTS

CHAPTER 24 PROJECT SCHEDULING 673

24.1 Basic Concepts 674

24.2 Project Scheduling 676

24.2.1 Basic Principles 677

24.2.2 The Relationship Between People and Effort 678

24.2.3 Effort Distribution 680

24.3 Defining a Task Set for the Software Project 681

24.3.1 A Task Set Example 682

24.3.2 Refinement of Major Tasks 682

24.4 Defining a Task Network 683

24.5 Scheduling 684

24.5.1 Timeline Charts 685

24.5.2 Tracking the Schedule 686

24.5.3 Tracking Progress for an OO Project 688

24.6 Earned Value Analysis 690

24.7 Summary 691

REFERENCES 692

PROBLEMS AND POINTS TO PONDER 692

FURTHER READINGS AND INFORMATION SOURCES 693

CHAPTER 25 RISK MANAGEMENT 694

25.1 Reactive vs. Proactive Risk Strategies 695

25.2 Software Risks 696

25.3 Risk Identification 697

25.3.1 Assessing Overall Project Risk 698

25.3.2 Risk Components and Drivers 699

25.4 Risk Projection 700

25.4.1 Developing a Risk Table 701

25.4.2 Assessing Risk Impact 703

25.5 Risk Refinement 705

25.6 Risk Mitigation, Monitoring, and Management 705

25.7 The RMMM Plan 708

25.8 Summary 709

REFERENCES 710

PROBLEMS AND POINTS TO PONDER 710

FURTHER READIN20GS AND INFORMATION SOURCES 711

CHAPTER 26 QUALITY MANAGEMENT 712

26.1 Quality Concepts 713

26.1.1 Quality 714

26.1.2 Quality Control 714

26.1.3 Quality Assurance 715

26.1.4 Cost of Quality 715

26.2 Software Quality Assurance 716

26.2.1 Background Issues 717

26.2.2 SQA Activities 717

26.3 Software Reviews 719

26.3.1 Cost Impact of Software Defects 720

26.3.2 Defect Amplification and Removal 720

26.4 Formal Technical Reviews 722

26.4.1 The Review Meeting 722

26.4.2 Review Reporting and Record Keeping 723

xxxii TABLE OF CONTENTS

26.4.3 Review Guidelines 724

26.4.4 Sample-Driven Reviews 725

26.5 Formal Approaches to SQA 727

26.6 Statistical Software Quality Assurance 727

26.6.1 A Generic Example 728

26.6.2 Six Sigma for Software Engineering 729

26.7 Software Reliability 730

26.7.1 Measures of Reliability and Availability 731

26.7.2 Software Safety 731

26.8 The ISO 9000 Quality Standards 733

26.9 The SQA Plan 734

26.10 Summary 735

REFERENCES 736

PROBLEMS AND POINTS TO PONDER 737

FURTHER READINGS AND INFORMATION SOURCES 737

CHAPTER 27 CHANGE MANAGEMENT 739

27.1 Software Configuration Management 740

27.1.1 A SCM Scenario 741

27.1.2 Elements of a Configuration Management System 742

27.1.3 Baselines 743

27.1.4 Software Configuration Items 743

27.2 The SCM Repository 745

27.2.1 The Role of the Repository 745

27.2.2 General Features and Content 746

27.2.3 SCM Features 747

27.3 The SCM Process 748

27.3.1 Identification of Objects in the Software Configuration 749

27.3.2 Version Control 750

27.3.3 Change Control 752

27.3.4 Configuration Audit 755

27.3.5 Status Reporting 756

27.4 Configuration Management for Web Engineering 756

27.4.1 Configuration Management Issues for WebApps 757

27.4.2 WebApp Configuration Objects 758

27.4.3 Content Management 758

27.4.4 Change Management 758

27.4.5 Version Control 761

27.4.6 Auditing and Reporting 763

27.5 Summary 765

REFERENCES 766

PROBLEMS AND POINTS TO PONDER 767

FURTHER READINGS AND INFORMATION SOURCES 768

PART FIVE-ADVANCED TOPICS IN SOFTWARE ENGINEERING 679

CHAPTER 28 FORMAL METHODS 770

28.1 Basic Concepts 771

28.1.1 Deficiencies of Less Formal Approaches 772

28.1.2 Mathematics in Software Development 773

28.1.3 Formal Methods Concepts 773

xxxiii TABLE OF CONTENTS

28.2 Mathematical Preliminaries 776

28.2.1 Sets and Constructive Specification 776

28.2.2 Set Operators 778

28.2.3 Logic Operators 780

28.2.4 Sequences 780

28.3 Applying Mathematical Notation for Formal Specification 781

28.4 Formal Specification Languages 783

28.5 Object Constraint Language (OCL) 784

28.5.1 A Brief Overview of OCL Syntax and Semantics 784

28.5.2 An Example Using OCL 786

28.6 The Z Specification Language 788

28.6.1 A Brief Overview of Z Syntax and Semantics 788

28.6.2 An Example Using Z 788

28.7 The Ten Commandments of Formal Methods 791

28.8 Formal Methods-The Road Ahead 792

28.9 Summary 793

REFERENCES 793

PROBLEMS AND POINTS TO PONDER 794

FURTHER READINGS AND INFORMATION SOURCES 795

CHAPTER 29 CLEANROOM SOFTWARE ENGINEERING 796

29.1 The Cleanroom Approach 797

29.1.1 The Cleanroom Strategy 798

29.1.2 What Makes Cleanroom Different? 800

29.2 Functional Specification 801

29.2.1 Black-Box Specification 802

29.2.2 State-Box Specification 803

29.2.3 Clear-Box Specification 803

29.3 Cleanroom Design 804

29.3.1 Design Refinement and Verification 804

29.3.2 Advantages of Design Verification 808

29.4 Cleanroom Testing 809

29.4.1 Statistical Use Testing 810

29.4.2 Certification 811

29.5 Summary 812

REFERENCES 812

PROBLEMS AND POINTS TO PONDER 813

FURTHER READINGS AND INFORMATION SOURCES 814

CHAPTER 30 COMPONENT-BASED DEVELOPMENT 815

30.1 Engineering of Component-Based Systems 816

30.2 The CBSE Process 818

30.3 Domain Engineering 819

30.3.1 The Domain Analysis Process 819

30.3.2 Characterization Functions 820

30.3.3 Structural Modeling and Structure Points 821

30.4 Component-Based Development 822

30.4.1 Component Qualification, Adaptation, and Composition 822

30.4.2 Component Engineering 825

30.4.3 Analysis and Design for Reuse 826

xxxiv TABLE OF CONTENTS

30.5 Classifying and Retrieving Components 827

30.5.1 Describing Reusable Components 827

30.5.2 The Reuse Environment 829

30.6 Economics of CBSE 830

30.6.1 Impact on Quality, Productivity, and Cost 830

30.6.2 Cost Analysis Using Structure Points 831

30.7 Summary 832

REFERENCES 833

PROBLEMS AND POINTS TO PONDER 834

RURTHER READINGS AND INFORMATION SOURCES 835

CHAPTER 31 REENGINEERING 837

31.1 Business Process Reengineering 838

31.1.1 Business Processes 839

31.1.2 A BPR Model 839

31.2 Software Reengineering 841

31.2.1 Software Maintenance 841

31.2.2 A Software Reengineering Process Model 842

31.3 Reverse Engineering 846

31.3.1 Reverse Engineering to Understand Data 848

31.3.2 Reverse Engineering to Understand Processing 848

31.3.3 Reverse Engineering User Interfaces 849

31.4 Restructuring 850

31.4.1 Code Restructuring 850

31.4.2 Data Restructuring 851

31.5 Forward Engineering 852

31.5.1 Forward Engineering for Client/Server Architectures 853

31.5.2 Forward Engineering for Object-Oriented Architectures 854

31.5.3 Forward Engineering User Interfaces 855

31.6 The Economics of Reengineering 855

31.7 Summary 856

REFERENCES 857

PROBLEMS AND POINTS TO PONDER 858

FURTHER READINGS AND INFORMATION SOURCES 859

CHAPTER 32 THE ROAD AHEAD 860

32.1 The Importance of Software-Revisited 861

32.2 The Scope of Change 861

32.3 People and the Way They Build Systems 863

32.4 The "New" Software Engineering Process 864

32.5 New Modes for Representing Information 865

32.6 Technology as a Driver 867

32.7 The Software Engineer's Responsibility 868

32.8 A Concluding Comment 870

REFERENCES 871

PROBLEMS AND POINTS TO PONDER 871

FURTHER READINGS AND INFORMATION SOURCES 871

Index 873

前言

随着计算机应用面向更广阔和更深入的方向发展,如今计算机软件已涉及到人们社会生活的各个领域。作为计算机系统的核心和灵魂,软件的重要性越来越被人们认识。软件是不可见的智力产品,完全不同于普通制造业的产品。专业人员一直在探讨如何获得高质量和低成本的软件产品,如何把软件工作组织得更加有效且更为合理。人类几千年前就已开始积累起来的工程知识和经验,可以被软件研制工作吸收的成分十分有限。年青的软件工程学科只能在探索中走出自己的道路。

Roger Pressman博士的这本书对软件工程学科的发展起了重要的推动作用。本书在国际软件工程界产生了巨大而深远的影响,从而树立了它无可置疑的权威地位。一本优秀的著作,特别是一本成功的教学用书可以影响一代人,甚至几代人的业务成长。本书从1982年的第1版开始,就受到我国软件工程界的重视,成为高等学校计算机专业软件工程课的重要教学参考书。20多年来,它的各个后继版本一直都是我国软件专业人士熟悉的读物。它在全面而系统、概括而清晰地介绍软件工程有关的概念、原则、方法和工具方面获得了广大读者的好评。此外,本书在给出传统的、对学科发展具有深刻影响的方法时,又适当地介绍了当前发展的且有着生命力的新技术。

本书第6版共32章,分为5个部分,分别属于5个专题:

(1) 第一部分为软件过程,给出了软件过程的不同论点,考虑了所有重要的过程模型,涉及到传统的过程和(近年发展起来的)敏捷过程在指导思想上的争论。

(2) 第二部分为软件工程实践,给出了分析、设计和测试方法,其中重点讨论了面向对象技术和UML建模。

(3) 第三部分为应用Web工程,提供了Web应用系统的分析、设计和测试的全面工程方法。

(4) 第四部分为软件项目管理,给出的是计划、管理和控制软件项目的人员关心的问题。

(5) 第五部分是软件工程的高级课题,涉及到形式化方法、净室软件工程、基于构件的软件工程、再工程以及软件工程未来的发展趋势等问题。

本书为方便阅读,在页面安排上做了精心设计,包括:

(1) 每章首页除给出本章要点(Quick Look)外,在左边栏中还给出了本章涉及的关键术语(KEY CONCEPTS)。

(2) 各章在文中适当的位置,提供了带图标的简要注释,均以纵向长方框形状置于页面的左侧。例如:

    指出该段内容的要点。

指出网上资源的站点。

指出实际工作需要注意的地方,给予指导或建议。

此处所提问题的答案在右侧文中。

(3) 文中插入了说明,以文中自然段之间的通栏长方框形式出现:

(  SAFE HOME  该框以对话形式给出软件工程人员在完成相关工作,将软件工程原则和方法应用到实际问题时的考虑。其意义为“住宅保安系统”,给读者以通俗且生动的印象。

(  INFO  该栏内给出了所讨论内容的补充和扩展信息,使读者对相关概念获得更为广泛而深刻的理解。

(  SOFEWARE TOOL  推荐了当前最为流行且具有代表性的商品化软件工具,指出了相应的工具开发商及其相关信息。

(  TASK SET  简明地列举出需要完成的任务。

文中插入的简短的经典文献引语,也被置于自然段之间的通栏长方框内,其精炼而简明的语句必能给读者以有益的启发。

每章后面均附有参考文献、习题与思考题以及推荐读物与阅读信息。

本书可直接为高校计算机相关专业的教学服务,它为教师备课和学生自学提供了丰富的材料,包括书中可看到的以及间接可以找到的材料。此外,本书可供软件工程研究人员和承担软件项目的专业人员做参考之用。总之,请认真阅读这本优秀的软件工程读物,它会成为你的良师益友。