本書是軟件工程領域的經典著作,自第1版出版至今,幾十年來在軟件工程界產生了巨大而深遠的影響。本書涵蓋軟件過程、建模、質量管理、項目管理等主題,對概念、原則、方法和工具的介紹細致、清晰且實用。
CHAPTER 1SOFTWARE AND SOFTWARE
ENGINEERING.1
1.1The Nature of Software.4
1.1.1Defining Software.5
1.1.2Software Application Domains.7
1.1.3Legacy Software.8
1.2Defining the Discipline.8
1.3The Software Process.9
1.3.1The Process Framework.10
1.3.2Umbrella Activities.11
1.3.3Process Adaptation.11
1.4Software Engineering Practice.12
1.4.1The Essence of Practice.12
1.4.2General Principles.14
1.5How It All Starts.15
1.6Summary.17
PART ONETHE SOFTWARE PROCESS.19
CHAPTER 2PROCESS MODELS.20
2.1A Generic Process Model.21
2.2Defining a Framework Activity.23
2.3Identifying a Task Set.23
2.4Process Assessment and Improvement.24
2.5Prescriptive Process Models.25
2.5.1The Waterfall Model.25
2.5.2Prototyping Process Model.26
2.5.3Evolutionary Process Model.29
2.5.4Unified Process Model.31
2.6Product and Process.33
2.7Summary.35
CHAPTER 3AGILITY AND PROCESS.37
3.1What Is Agility?.38
3.2Agility and the Cost of Change.39
3.3What Is an Agile Process?.40
3.3.1Agility Principles.40
3.3.2The Politics of Agile Development.41
3.4Scrum.42
3.4.1Scrum Teams and Artifacts.43
3.4.2Sprint Planning Meeting.44
3.4.3Daily Scrum Meeting.44
3.4.4Sprint Review Meeting.45
3.4.5Sprint Retrospective.45
3.5Other Agile Frameworks.46
3.5.1The XP Framework.46
3.5.2Kanban.48
3.5.3DevOps.50
3.6Summary.51
CHAPTER 4RECOMMENDED PROCESS MODEL.54
4.1Requirements Definition.57
4.2Preliminary Architectural Design.59
4.3Resource Estimation.60
4.4First Prototype Construction.61
4.5Prototype Evaluation.64
4.6Go, No-Go Decision.65
4.7Prototype Evolution.67
4.7.1New Prototype Scope.67
4.7.2Constructing New Prototypes.68
4.7.3Testing New Prototypes.68
4.8Prototype Release.68
4.9Maintain Release Software.69
4.10Summary.72
CHAPTER 5HUMAN ASPECTS OF SOFTWARE ENGINEERING.74
5.1Characteristics of a Software Engineer.75
5.2The Psychology of Software Engineering.75
5.3The Software Team.76
5.4Team Structures.78
5.5The Impact of Social Media.79
5.6Global Teams.80
5.7Summary.81
PART TWOMODELING.83
CHAPTER 6PRINCIPLES THAT
GUIDE PRACTICE.84
6.1Core Principles.85
6.1.1Principles That Guide Process.85
6.1.2Principles That Guide Practice.86
6.2Principles That Guide Each Framework Activity.88
6.2.1Communication Principles.88
6.2.2Planning Principles.91
6.2.3Modeling Principles.92
6.2.4Construction Principles.95
6.2.5Deployment Principles.98
6.3Summary.100
CHAPTER 7UNDERSTANDING REQUIREMENTS.102
7.1Requirements Engineering.103
7.1.1Inception.104
7.1.2Elicitation.104
7.1.3Elaboration.104
7.1.4Negotiation.105
7.1.5Specification.105
7.1.6Validation.105
7.1.7Requirements Management.106
7.2Establishing the Groundwork.107
7.2.1Identifying Stakeholders.107
7.2.2Recognizing Multiple Viewpoints.107
7.2.3Working Toward Collaboration.108
7.2.4Asking the First Questions.108
7.2.5Nonfunctional Requirements.109
7.2.6Traceability.109
7.3Requirements Gathering.110
7.3.1Collaborative Requirements Gathering.110
7.3.2Usage Scenarios.113
7.3.3Elicitation Work Products.114
7.4Developing Use Cases.114
7.5Building the Analysis Model.118
7.5.1Elements of the Analysis Model.119
7.5.2Analysis Patterns.122
7.6Negotiating Requirements.122
7.7Requirements Monitoring.123
7.8Validating Requirements.123
7.9Summary.124
CHAPTER 8REQUIREMENTS MODELING—
A RECOMMENDED APPROACH.126
8.1Requirements Analysis.127
8.1.1Overall Objectives and Philosophy.128
8.1.2Analysis Rules of Thumb.128
8.1.3Requirements Modeling Principles.129
8.2Scenario-Based Modeling.130
8.2.1Actors and User Profiles.131
8.2.2Creating Use Cases.131
8.2.3Documenting Use Cases.135
8.3Class-Based Modeling.137
8.3.1Identifying Analysis Classes.137
8.3.2Defining Attributes and Operations.140
8.3.3UML Class Models.141
8.3.4Class-Responsibility-Collaborator Modeling.144
8.4Functional Modeling.146
8.4.1A Procedural View.146
8.4.2UML Sequence Diagrams.148
8.5Behavioral Modeling.149
8.5.1Identifying Events with the Use Case.149
8.5.2UML State Diagrams.150
8.5.3UML Activity Diagrams.151
8.6Summary.154
CHAPTER 9DESIGN CONCEPTS.156
9.1Design Within the Context of Software Engineering.157
9.2The Design Process.159
9.2.1Software Quality Guidelines and Attributes.160
9.2.2The Evolution of Software Design.161
9.3Design Concepts.163
9.3.1Abstraction.163
9.3.2Architecture.163
9.3.3Patterns.164
9.3.4Separation of Concerns.165
9.3.5Modularity.165
9.3.6Information Hiding.166
9.3.7Functional Independence.167
9.3.8Stepwise Refinement.167
9.3.9Refactoring.168
9.3.10Design Classes.169
9.4The Design Model.171
9.4.1Design Modeling Principles.173
9.4.2Data Design Elements.174
9.4.3Architectural Design Elements.175
9.4.4Interface Design Elements.175
9.4.5Component-Level Design Elements.176
9.4.6Deployment-Level Design Elements.177
9.5Summary.178
CHAPTER 10ARCHITECTURAL DESIGN—
A RECOMMENDED APPROACH.181
10.1Software Architecture.182
10.1.1What Is Architecture?.182
10.1.2Why Is Architecture Important?.183
10.1.3Architectural Descriptions.183
10.1.4Architectural Decisions.184
10.2Agility and Architecture.185
10.3Architectural Styles.186
10.3.1A Brief Taxonomy of Architectural Styles.187
10.3.2Architectural Patterns.192
10.3.3Organization and Refinement.193
10.4Architectural Considerations.193
10.5Architectural Decisions.195
10.6Architectural Design.196
10.6.1Representing the System in Context.196
10.6.2Defining Archetypes.197
10.6.3Refining the Architecture into Components.198
10.6.4Describing Instantiations of the System.200
10.7Assessing Alternative Architectural Designs.201
10.7.1Architectural Reviews.202
10.7.2Pattern-Based Architecture Review.203
10.7.3Architecture Conformance Checking.204
10.8Summary.204
CHAPTER 11COMPONENT-LEVEL DESIGN.206
11.1What Is a Component?.207
11.1.1An Object-Oriented View.207
11.1.2The Traditional View.209
11.1.3A Process-Related View.211
11.2Designing Class-Based Components.212
11.2.1Basic Design Principles.212
11.2.2Component-Level Design Guidelines.215
11.2.3Cohesion.216
11.2.4Coupling.218
11.3Conducting Component-Level Design.219
11.4Specialized Component-Level Design.225
11.4.1Component-Level Design for WebApps.226
11.4.2Component-Level Design for Mobile Apps.226
11.4.3Designing Traditional Components.227
11.4.4Component-Based Development.228
11.5Component Refactoring.230
11.6Summary.231
CHAPTER 12USER EXPERIENCE DESIGN.233
12.1User Experience Design Elements.234
12.1.1Information Architecture.235
12.1.2User Interaction Design.236
12.1.3Usability Engineering.236
12.1.4Visual Design.237
12.2The Golden Rules.238
12.2.1Place the User in Control.238
12.2.2Reduce the User’s Memory Load.239
12.2.3Make the Interface Consistent.240
12.3User Interface Analysis and Design.241
12.3.1Interface Analysis and Design Models.241
12.3.2The Process.242
12.4User Experience Analysis.243
12.4.1User Research.244
12.4.2User Modeling.245
12.4.3Task Analysis.247
12.4.4Work Environment Analysis.248
12.5User Experience Design.249
12.6User Interface Design.250
12.6.1Applying Interface Design Steps.251
12.6.2User Interface Design Patterns.252
12.7Design Evaluation.253
12.7.1Prototype Review.253
12.7.2User Testing.255
12.8Usability and Accessibility.256
12.8.1Usability Guidelines.257
12.8.2Accessibility Guidelines.259
12.9Conventional Software UX and Mobility.261
12.10Summary.261
CHAPTER 13DESIGN FOR MOBILITY.264
13.1The Challenges.265
13.1.1Development Considerations.265
13.1.2Technical Considerations.266
13.2Mobile Development Life Cycle.268
13.2.1User Interface Design.270
13.2.2Lessons Learned.271
13.3Mobile Architectures.273
13.4Context-Aware Apps.274
13.5Web Design Pyramid.275
13.5.1WebApp Interface Design.275
13.5.2Aesthetic Design.277
13.5.3Content Design.277
13.5.4Architecture Design.278
13.5.5Navigation Design.280
13.6Component-Level Design.282
13.7Mobility and Design Quality.282
13.8Mobility Design Best Practices.285
13.9Summary.287
CHAPTER 14PATTERN-BASED DESIGN.289
14.1Design Patterns.290
14.1.1Kinds of Patterns.291
14.1.2Frameworks.293
14.1.3Describing a Pattern.293
14.1.4Machine Learning and Pattern Discovery.294
14.2Pattern-Based Software Design.295
14.2.1Pattern-Based Design in Context.295
14.2.2Thinking in Patterns.296
14,2.3Design Tasks.297
14.2.4Building a Pattern-Organizing Table.298
14.2.5Common Design Mistakes.298
14.3Architectural Patterns.299
14.4Component-Level Design Patterns.300
14.5Anti-Patterns.302
14.6User Interface Design Patterns.304
14.7Mobility Design Patterns.305
14.8Summary.306
PART THREEQUALITY AND SECURITY.309
CHAPTER 15QUALITY CONCEPTS.310
15.1What Is Quality?.311
15.2Software Quality.312
15.2.1Quality Factors.312
15.2.2Qualitative Quality Assessment.314
15.2.3Quantitative Quality Assessment.315
15.3The Software Quality Dilemma.315
15.3.1“Good Enough” Software.316
15.3.2The Cost of Quality.317
15.3.3Risks.319
15.3.4Negligence and Liability.320
15.3.5Quality and Security.320
15.3.6The Impact of Management Actions.321
15.4Achieving Software Quality.321
15.4.1Software Engineering Methods.322
15.4.2Project Management Techniques.322
15.4.3Machine Learning and Defect Prediction.322
15.4.4Quality Control.322
15.4.5Quality Assurance.323
15.5Summary.323
CHAPTER 16REVIEWS—A RECOMMENDED
APPROACH.325
16.1Cost Impact of Software Defects.326
16.2Defect Amplification and Removal.327
16.3Review Metrics and Their Use.327
16.4Criteria for Types of Reviews.330
16.5Informal Reviews.331
16.6Formal Technical Reviews.332
16.6.1The Review Meeting.332
16.6.2Review Reporting and Record Keeping.333
16.6.3Review Guidelines.334
16.7Postmortem Evaluations.336
16.8Agile Reviews.336
16.9Summary.337
CHAPTER 17SOFTWARE QUALITY
ASSURANCE.339
17.1Background Issues.341
17.2Elements of Software Quality Assurance.341
17.3SQA Processes and Product Characteristics.343
17.4SQA Tasks, Goals, and Metrics.343
17.4.1SQA Tasks.343
17.4.2Goals, Attributes, and Metrics.345
17.5Formal Approaches to SQA.347
17.6Statistical Software Quality Assurance.347
17.6.1A Generic Example.347
17.6.2Six Sigma for Software Engineering.349
17.7Software Reliability.350
17.7.1Measures of Reliability and Availability.350
17.7.2Use of AI to Model Reliability.351
17.7.3Software Safety.352
17.8The ISO 9000 Quality Standards.353
17.9The SQA Plan.354
17.10Summary.355
CHAPTER 18SOFTWARE SECURITY
ENGINEERING.356
18.1Why Software Security Information Is Important.357
18.2Security Life-Cycle Models.357
18.3Secure Development Life-Cycle Activities.359
18.4Security Requirements Engineering.360
18.4.1SQUARE.360
18.4.2The SQUARE Process.360
18.5Misuse and Abuse Cases and Attack Patterns.363
18.6Security Risk Analysis.364
18.7Threat Modeling, Prioritization, and Mitigation.365
18.8Attack Surface.366
18.9Secure Coding.367
18.10Measurement.368
18.11Security Process Improvement and Maturity Models.370
18.12Summary.370
CHAPTER 19SOFTWARE TESTING—COMPONENT LEVEL.372
19.1A Strategic Approach to Software Testing.373
19.1.1Verification and Validation.373
19.1.2Organizing for Software Testing.374
19.1.3The Big Picture.375
19.1.4Criteria for “Done”.377
19.2Planning and Recordkeeping.378
19.2.1Role of Scaffolding.379
19.2.2Cost-Effective Testing.379
19.3Test-Case Design.381
19.3.1Requirements and Use Cases.382
19.3.2Traceability.383
19.4White-Box Testing.383
19.4.1Basis Path Testing.384
19.4.2Control Structure Testing.386
19.5Black-Box Testing.388
19.5.1Interface Testing.388
19.5.2Equivalence Partitioning.389
19.5.3Boundary Value Analysis.389
19.6Object-Oriented Testing.390
19.6.1Class Testing.390
19.6.2Behavioral Testing.392
19.7Summary.393
CHAPTER 20SOFTWARE TESTING—
INTEGRATION LEVEL.395
20.1Software Testing Fundamentals.396
20.1.1Black-Box Testing.397
20.1.2White-Box Testing.397
20.2Integration Testing.398
20.2.1Top-Down Integration.398
20.2.2Bottom-Up Integration.399
20.2.3Continuous Integration.400
20.2.4Integration Test Work Products.402
20.3Artificial Intelligence and Regression Testing.402
20.4Integration Testing in the OO Context.404
20.4.1Fault-Based Test-Case Design.405
20.4.2Scenario-Based Test-Case Design.406
20.5Validation Testing.407
20.6Testing Patterns.409
20.7Summary.409
CHAPTER 21SOFTWARE TESTING—SPECIALIZED
TESTING FOR MOBILITY.412
21.1Mobile Testing Guidelines.413
21.2The Testing Strategies.414
21.3User Experience Testing Issues.415
21.3.1Gesture Testing.415
21.3.2Virtual Keyboard Input.416
21.3.3Voice Input and Recognition.416
21.3.4Alerts and Extraordinary Conditions.417
21.4Web Application Testing.418
21.5Web Testing Strategies.418
21.5.1Content Testing.420
21.5.2Interface Testing.421
21.5.3Navigation Testing.421
21.6Internationalization.423
21.7Security Testing.423
21.8Performance Testing.424
21.9Real-Time Testing.426
21.10Testing AI Systems.428
21.10.1Static and Dynamic Testing.429
21.10.2Model-Based Testing.429
21.11Testing Virtual Environments.430
21.11.1Usability Testing.430
21.11.2Accessibility Testing.432
21.11.3Playability Testing.433
21.12 Testing Documentation and Help Facilities.434
21.13 Summary.435
CHAPTER 22SOFTWARE CONFIGURATION MANAGEMENT.437
22.1Software Configuration Management.438
22.1.1An SCM Scenario.439
22.1.2Elements of a Configuration Management System.440
22.1.3Baselines.441
22.1.4Software Configuration Items.441
22.1.5Management of Dependencies and Changes.442
22.2The SCM Repository.443
22.2.1General Features and Content.444
22.2.2SCM Features.444
22.3Version Control Systems.445
22.4Continuous Integration.446
22.5The Change Management Process.447
22.5.1Change Control.448
22.5.2Impact Management.451
22.5.3Configuration Audit.452
22.5.4Status Reporting.452
22.6Mobility and Agile Change Management.453
22.6.1e-Change Control.453
22.6.2Content Management.455
22.6.3Integration and Publishing.455
22.6.4Version Control.457
22.6.5Auditing and Reporting.458
22.7Summary.458
CHAPTER 23SOFTWARE METRICS
AND ANALYTICS.460
23.1Software Measurement.461
23.1.1Measures, Metrics, and Indicators.461
23.1.2Attributes of Effective Software Metrics.462
23.2Software Analytics.462
23.3Product Metrics.463
23.3.1Metrics for the Requirements Model.464
23.3.2Design Metrics for Conventional Software.466
23.3.3Design Metrics for Object-Oriented Software.468
23.3.4User Interface Design Metrics.471
23.3.5Metrics for Source Code.473
23.4Metrics for Testing.474
23.5Metrics for Maintenance.476
23.6Process and Project Metrics.476
23.7Software Measurement.479
23.8Metrics for Software Quality.482
23.9Establishing Software Metrics Programs.485
23.10Summary.487
PART FOURMANAGING SOFTWARE PROJECTS.489
CHAPTER 24PROJECT MANAGEMENT
CONCEPTS.490
24.1The Management Spectrum.491
24.1.1The People.491
24.1.2The Product.491
24.1.3The Process.492
24.1.4The Project.492
24.2People.493
24.2.1The Stakeholders.493
24.2.2Team Leaders.493
24.2.3The Software Team.494
24.2.4Coordination and Communications Issues.496
24.3Product.497
24.3.1Software Scope.497
24.3.2Problem Decomposition.497
24.4Process.498
24.4.1Melding the Product and the Process.498
24.4.2Process Decomposition.498
24.5Project.500
24.6The W5HH Principle.501
24.7Critical Practices.502
24.8Summary.502
CHAPTER 25CREATING A VIABLE SOFTWARE PLAN.504
25.1Comments on Estimation.505
25.2The Project Planning Process.506
25.3Software Scope and Feasibility.507
25.4Resources.507
25.4.1Human Resources.508
25.4.2Reusable Software Resources.509
25.4.3Environmental Resources.509
25.5Data Analytics and Software Project Estimation.509
25.6Decomposition and Estimation Techniques.511
25.6.1Software Sizing.511
25.6.2Problem-Based Estimation.512
25.6.3An Example of LOC-Based Estimation.512
25.6.4An Example of FP-Based Estimation.514
25.6.5An Example of Process-Based Estimation.515
25.6.6An Example of Estimation Using Use Case Points.517
25.6.7Reconciling Estimates.518
25.6.8Estimation for Agile Development.519
25.7Project Scheduling.520
25.7.1Basic Principles.521
25.7.2The Relationship Between People and Effort.522
25.8Defining a Project Task Set.523
25.8.1A Task Set Example.524
25.8.2Refinement of Major Tasks.524
25.9Defining a Task Network.525
25.10Scheduling.526
25.10.1Time-Line Charts.526
25.10.2Tracking the Schedule.528
25.11Summary.530
CHAPTER 26RISK MANAGEMENT.532
26.1Reactive Versus Proactive Risk Strategies.533
26.2Software Risks.534
26.3Risk Identification.535
26.3.1Assessing Overall Project Risk.536
26.3.2Risk Components and Drivers.537
26.4Risk Projection.538
26.4.1Developing a Risk Table.538
26.4.2Assessing Risk Impact.540
26.5Risk Refinement.542
26.6Risk Mitigation, Monitoring, and Management.543
26.7The RMMM Plan.546
26.8Summary.547
CHAPTER 27A STRATEGY FOR SOFTWARE
SUPPORT.549
27.1Software Support.550
27.2Software Maintenance.552
27.2.1Maintenance Types.553
27.2.2Maintenance Tasks.554
27.2.3Reverse Engineering.555
27.3Proactive Software Support.557
27.3.1Use of Software Analytics.558
27.3.2Role of Social Media.559
27.3.3Cost of Support.559
27.4Refactoring.560
27.4.1Data Refactoring.561
27.4.2Code Refactoring.561
27.4.3Architecture Refactoring.561
27.5Software Evolution.562
27.5.1Inventory Analysis.563
27.5.2Document Restructuring.564
27.5.3Reverse Engineering.564
27.5.4Code Refactoring.564
27.5.5Data Refactoring.564
27.5.6Forward Engineering.565
27.6Summary.565
PART FIVEADVANCED TOPICS.567
CHAPTER 28SOFTWARE PROCESS IMPROVEMENT.568
28.1What Is SPI?.569
28.1.1Approaches to SPI.569
28.1.2Maturity Models.570
28.1.3Is SPI for Everyone?.571
28.2The SPI Process.571
28.2.1Assessment and GAP Analysis.572
28.2.2Education and Training.573
28.2.3Selection and Justification.573
28.2.4Installation/Migration.574
28.2.5Evaluation.575
28.2.6Risk Management for SPI.575
28.3The CMMI.576
28.4Other SPI Frameworks.579
28.4.1SPICE.579
28.4.2TickIT Plus.579
28.5SPI Return on Investment.580
28.6SPI Trends.580
28.7Summary.581
CHAPTER 29EMERGING TRENDS IN SOFTWARE ENGINEERING.583
29.1Technology Evolution.584
29.2Software Engineering as a Discipline.585
29.3Observing Software Engineering Trends.586
29.4Identifying “Soft Trends”.587
29.4.1Managing Complexity.588
29.4.2Open-World Software.589
29.4.3Emergent Requirements.590
29.4.4The Talent Mix.591
29.4.5Software Building Blocks.591
29.4.6Changing Perceptions of “Value”.592
29.4.7Open Source.592
29.5Technology Directions.593
29.5.1Process Trends.593
29.5.2The Grand Challenge.594
29.5.3Collaborative Development.595
29.5.4Requirements Engineering.596
29.5.5Model-Driven Software Development.596
29.5.6Search-Based Software Engineering.597
29.5.7Test-Driven Development.598
29.6Tools-Related Trends.599
29.7Summary.600
CHAPTER 30CONCLUDING COMMENTS.602
30.1The Importance of Software—Revisited.603
30.2People and the Way They Build Systems.603
30.3Knowledge Discovery.605
30.4The Long View.606
30.5The Software Engineer’s Responsibility.607
30.6A Final Comment from RSP.609
APPENDIX 1An Introduction to UML.611
APPENDIX 2Data Science for Software Engineers.629
REFERENCES.639
INDEX.659