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