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