罗杰·S. 普莱斯曼(Roger S. Pressman)<br />软件工程界国际知名的顾问和作家,作为工程师、经理人、教授、演讲家和企业家奋战在这一领域近50年。他现任一家咨询公司的总裁,致力于协助企业建立有效的软件工程实践;还是一家汽车零部件公司的创始人,专注于为特斯拉汽车设计和生产配件产品。<br />布鲁斯·R. 马克西姆(Bruce R. Maxim) <br />作为软件工程师、项目经理、教授、作家和咨询师,拥有超过30年的从业经验,研究兴趣涉及软件工程、用户体验设计、游戏开发和工程教育等领域。他曾任某游戏开发公司的首席技术官,现任密歇根大学迪尔伯恩分校教授,为该校工程与计算机科学学院建立了游戏实验室。
目录
Table of Contents<br/>Preface xxvii<br/>CHAPTER 1 SOFTWARE AND SOFTWARE ENGINEERING 1<br/>1.1 The Nature of Software 4<br/>1.1.1 Defining Software 5<br/>1.1.2 Software Application Domains 7<br/>1.1.3 Legacy Software 8<br/>1.2 Defining the Discipline 8<br/>1.3 The Software Process 9<br/>1.3.1 The Process Framework 10<br/>1.3.2 Umbrella Activities 11<br/>1.3.3 Process Adaptation 11<br/>1.4 Software Engineering Practice 12<br/>1.4.1 The Essence of Practice 12<br/>1.4.2 General Principles 14<br/>1.5 How It All Starts 15<br/>1.6 Summary 17<br/>PART ONE THE SOFTWARE PROCESS 19<br/>CHAPTER 2 PROCESS MODELS 20<br/>2.1 A Generic Process Model 21<br/>2.2 Defining a Framework Activity 23<br/>2.3 Identifying a Task Set 23<br/>2.4 Prescriptive Process Models 25<br/>2.4.1 The Waterfall Model 25<br/>2.4.2 Prototyping Process Model 26<br/>2.4.3 Evolutionary Process Model 29<br/>2.4.4 Unified Process Model 31<br/>2.5 Product and Process 33<br/>2.6 Summary 35<br/>CHAPTER 3 AGILITY AND PROCESS 37<br/>3.1 What Is Agility? 38<br/>3.2 Agility and the Cost of Change 39<br/>3.3 What Is an Agile Process? 40<br/>3.3.1 Agility Principles 40<br/>3.3.2 The Politics of Agile Development 41<br/>3.4 Scrum 42<br/>3.4.1 Scrum Teams and Artifacts 43<br/>3.4.2 Sprint Planning Meeting 44<br/>3.4.3 Daily Scrum Meeting 44<br/>3.4.4 Sprint Review Meeting 45<br/>3.4.5 Sprint Retrospective 45<br/>3.5 Other Agile Frameworks 46<br/>3.5.1 The XP Framework 46<br/>3.5.2 Kanban 48<br/>3.5.3 DevOps 50<br/>3.6 Summary 51<br/>CHAPTER 4 RECOMMENDED PROCESS MODEL 54<br/>4.1 Requirements Definition 57<br/>4.2 Preliminary Architectural Design 59<br/>4.3 Resource Estimation 60<br/>4.4 First Prototype Construction 61<br/>4.5 Prototype Evaluation 64<br/>4.6 Go, No-Go Decision 65<br/>4.7 Prototype Evolution 67<br/>4.7.1 New Prototype Scope 67<br/>4.7.2 Constructing New Prototypes 68<br/>4.7.3 Testing New Prototypes 68<br/>4.8 Prototype Release 68<br/>4.9 Maintain Release Software 69<br/>4.10 Summary 72<br/>CHAPTER 5 HUMAN ASPECTS OF SOFTWARE ENGINEERING 74<br/>5.1 Characteristics of a Software Engineer 75<br/>5.2 The Psychology of Software Engineering 75<br/>5.3 The Software Team 76<br/>5.4 Team Structures 78<br/>5.5 The Impact of Social Media 79<br/>5.6 Global Teams 80<br/>5.7 Summary 81<br/>PART TWO MODELING 83<br/>CHAPTER 6 UNDERSTANDING REQUIREMENTS 84<br/>6.1 Requirements Engineering 85<br/>6.1.1 Inception 86<br/>6.1.2 Elicitation 86<br/>6.1.3 Elaboration 86<br/>6.1.4 Negotiation 87<br/>6.1.5 Specification 87<br/>6.1.6 Validation 87<br/>6.1.7 Requirements Management 88<br/>6.2 Establishing the Groundwork 89<br/>6.2.1 Identifying Stakeholders 89<br/>6.2.2 Recognizing Multiple Viewpoints 89<br/>6.2.3 Working Toward Collaboration 90<br/>6.2.4 Asking the First Questions 90<br/>6.2.5 Nonfunctional Requirements 91<br/>6.2.6 Traceability 91<br/>CHAPTER 7 REQUIREMENTS MODELING—A RECOMMENDED APPROACH 108<br/>7.1 Requirements Analysis 109<br/>7.1.1 Overall Objectives and Philosophy 110<br/>7.1.2 Analysis Rules of Thumb 110<br/>7.1.3 Requirements Modeling Principles 111<br/>7.2 Scenario-Based Modeling 112<br/>7.2.1 Actors and User Profiles 113<br/>7.2.2 Creating Use Cases 113<br/>7.2.3 Documenting Use Cases 117<br/>7.3 Class-Based Modeling 119<br/>7.3.1 Identifying Analysis Classes 119<br/>7.3.2 Defining Attributes and Operations 122<br/>7.3.3 UML Class Models 123<br/>7.3.4 Class-Responsibility-Collaborator Modeling 126<br/>7.4 Functional Modeling 128<br/>7.4.1 A Procedural View 128<br/>7.4.2 UML Sequence Diagrams 130<br/>7.5 Behavioral Modeling 131<br/>7.5.1 Identifying Events with the Use Case 131<br/>7.5.2 UML State Diagrams 132<br/>7.5.3 UML Activity Diagrams 133<br/>7.6 Summary 136<br/>HAPTER 8 DESIGN CONCEPTS 138<br/>8.1 Design Within the Context of Software Engineering 139<br/>8.2 The Design Process 141<br/>8.2.1 Software Quality Guidelines and Attributes 142<br/>8.2.2 The Evolution of Software Design 143<br/>8.3 Design Concepts 145<br/>8.3.1 Abstraction 145<br/>8.3.2 Architecture 145<br/>8.3.3 Patterns 146<br/>8.3.4 Separation of Concerns 147<br/>8.3.5 Modularity 147<br/>8.3.6 Information Hiding 148<br/>8.3.7 Functional Independence 149<br/>8.3.8 Stepwise Re?nement 149<br/>8.3.9 Refactoring 150<br/>8.3.10 Design Classes 151<br/>8.4 The Design Model 153<br/>8.4.1 Design Modeling Principles 155<br/>8.4.2 Data Design Elements 156<br/>8.4.3 Architectural Design Elements 157<br/>8.4.4 Interface Design Elements 157<br/>8.4.5 Component-Level Design Elements 158<br/>8.4.6 Deployment-Level Design Elements 159<br/>8.5 Summary 160<br/>CHAPTER 9 ARCHITECTURAL DESIGN—<br/>A RECOMMENDED APPROACH 163<br/>9.1 Software Architecture 164<br/>9.1.1 What Is Architecture? 164<br/>9.1.2 Why Is Architecture Important? 165<br/>9.1.3 Architectural Descriptions 165<br/>9.1.4 Architectural Decisions 166<br/>9.2 Agility and Architecture 167<br/>9.3 Architectural Styles 168<br/>9.3.1 A Brief Taxonomy of Architectural Styles 169<br/>9.3.2 Architectural Patterns 174<br/>9.3.3 Organization and Refinement 175<br/>9.4 Architectural Considerations 175<br/>9.5 Architectural Decisions 177<br/>9.6 Architectural Design 178<br/>9.6.1 Representing the System in Context 178<br/>9.6.2 De?ning Archetypes 179<br/>9.6.3 Re?ning the Architecture into Components 180<br/>9.6.4 Describing Instantiations of the System 182<br/>9.7 Assessing Alternative Architectural Designs 183<br/>9.7.1 Architectural Reviews 184<br/>9.7.2 Pattern-Based Architecture Review 185<br/>9.7.3 Architecture Conformance Checking 186<br/>9.8 Summary 186<br/>CHAPTER 10 COMPONENT-LEVEL DESIGN 188<br/>10.1 What Is a Component? 189<br/>10.1.1 An Object-Oriented View 189<br/>10.1.2 The Traditional View 191<br/>10.1.3 A Process-Related View 193<br/>10.2 Designing Class-Based Components 194<br/>10.2.1 Basic Design Principles 194<br/>10.2.2 Component-Level Design Guidelines 197<br/>10.2.3 Cohesion 198<br/>10.2.4 Coupling 200<br/>10.3 Conducting Component-Level Design 201<br/>10.4 Specialized Component-Level Design 207<br/>10.5 Component Refactoring 211<br/>10.6 Summary 212<br/>CHAPTER 11 USER EXPERIENCE DESIGN 215<br/>11.1 User Experience Design Elements 216<br/>11.1.1 Information Architecture 217<br/>11.1.2 User Interaction Design 218<br/>11.1.3 Usability Engineering 218<br/>11.1.4 Visual Design 219<br/>ART THREE QUALITY AND SECURITY 241<br/>CHAPTER 12 QUALITY CONCEPTS 242<br/>12.1 What Is Quality? 243<br/>12.2 Software Quality 244<br/>12.2.1 Quality Factors 244<br/>12.2.2 Qualitative Quality Assessment 246<br/>12.2.3 Quantitative Quality Assessment 247<br/>12.3 The Software Quality Dilemma 247<br/>12.3.1 “Good Enough” Software 248<br/>12.3.2 The Cost of Quality 24912.3.3 Risks 251<br/>12.3.4 Negligence and Liability 252<br/>12.3.5 The Impact of Management Actions 252<br/>12.4 Achieving Software Quality 253<br/>12.4.1 Software Engineering Methods 253<br/>12.4.2 Project Management Techniques 254<br/>12.4.3 Quality Control 254<br/>12.4.4 Quality Assurance 254<br/>12.5 Summary 254<br/>HAPTER 13 REVIEWS—A RECOMMENDED APPROACH 257<br/>13.1 Cost Impact of Software Defects 258<br/>13.2 Defect Ampli?cation and Removal 259<br/>13.3 Review Metrics and Their Use 259<br/>13.4 Criteria for Types of Reviews 262<br/>13.5 Informal Reviews 263<br/>13.6 Formal Technical Reviews 264<br/>13.6.1 The Review Meeting 264<br/>13.6.2 Review Reporting and Record Keeping 265<br/>13.6.3 Review Guidelines 266<br/>13.7 Postmortem Evaluations 268<br/>13.8 Agile Reviews 268<br/>13.9 Summary 269<br/>CHAPTER 14 SOFTWARE QUALITY ASSURANCE 271<br/>14.1 Background Issues 273<br/>14.2 Elements of Software Quality Assurance 273<br/>14.3 SQA Processes and Product Characteristics 275<br/>14.4 SQA Tasks, Goals, and Metrics 275<br/>14.4.1 SQA Tasks 275<br/>14.4.2 Goals, Attributes, and Metrics 277<br/>14.5 27914.5.1 A Generic Example 279<br/>14.5.2 Six Sigma for Software Engineering 281<br/>14.6 The ISO 9000 Quality Standards 281<br/>14.7 The SQA Plan 282<br/>14.8 Summary 283<br/>CHAPTER 15 SOFTWARE TESTING—COMPONENT LEVEL 284<br/>15.1 A Strategic Approach to Software Testing 285<br/>15.1.1 Veri?cation and Validation 285<br/>15.1.2 Organizing for Software Testing 286<br/>15.1.3 The Big Picture 287<br/>15.1.4 Criteria for “Done” 289<br/>15.2 Planning and Recordkeeping 290<br/>15.2.1 Role of Sca?olding 291<br/>15.2.2 Cost-E?ective Testing 291<br/>15.3 Test-Case Design 293<br/>15.3.1 Requirements and Use Cases 294<br/>15.3.2 Traceability 295<br/>15.4 White-Box Testing 295<br/>15.4.1 Basis Path Testing 296<br/>15.4.2 Control Structure Testing 298<br/>15.5 300Black-Box Testing<br/>15.5.1 Interface Testing 300<br/>15.5.2 Equivalence Partitioning 301<br/>15.5.3 Boundary Value Analysis 301<br/>15.6 Object-Oriented Testing 302<br/>15.6.1 Class Testing 302<br/>15.6.2 Behavioral Testing 304<br/>15.7 Summary 305<br/>CHAPTER 16 SOFTWARE TESTING—INTEGRATION LEVEL 307<br/>16.1 Software Testing Fundamentals 308<br/>16.1.1 Black-Box Testing 309<br/>16.1.2 White-Box Testing 309<br/>16.2 Integration Testing 310<br/>16.2.1 Top-Down Integration 310<br/>16.2.2 Bottom-Up Integration 311<br/>16.2.3 Continuous Integration 312<br/>16.2.4 Integration Test Work Products 314<br/>16.3 Artificial Intelligence and Regression Testing 314<br/>16.4 Integration Testing in the OO Context 316<br/>16.4.1 Fault-Based Test-Case Design 317<br/>16.4.2 Scenario-Based Test-Case Design 319<br/>16.5 Validation Testing 319<br/>16.6 Summary 321<br/>CHAPTER 17 SOFTWARE CONFIGURATION MANAGEMENT 323<br/>17.1 Software Con?guration Management 324<br/>17.1.1 An SCM Scenario 325<br/>17.1.2 Elements of a Con?guration Management System 326<br/>17.1.3 Baselines 327<br/>17.1.4 Software Con?guration Items 327<br/>17.1.5 Management of Dependencies and Changes 328<br/>17.2 The SCM Repository 329<br/>17.2.1 General Features and Content 330<br/>17.2.2 SCM Features 330<br/>17.3 Version Control Systems 331<br/>17.4 Continuous Integration 332<br/>17.5 The Change Management Process 333<br/>17.5.1 Change Control 334<br/>17.5.2 Impact Management 337<br/>17.5.3 Con?guration Audit 337<br/>17.5.4 Status Reporting 338<br/>17.6 Summary 338<br/>HAPTER 18 SOFTWARE METRICS AND ANALYTICS 340<br/>18.1 Software Measurement 341<br/>18.1.1 Measures, Metrics, and Indicators 341<br/>18.1.2 Attributes of E?ective Software Metrics 342<br/>18.2 Software Analytics 342<br/>18.3 Product Metrics 343<br/>18.3.1 Metrics for the Requirements Model 344<br/>18.3.2 Design Metrics for Conventional Software 346<br/>18.3.3 Design Metrics for Object-Oriented Software 348<br/>18.3.4 User Interface Design Metrics 351<br/>18.3.5 Metrics for Source Code 353<br/>18.4 Process and Project Metrics 354<br/>18.5 Software Metrics 357<br/>18.6 Metrics for Software Quality 360<br/>18.7 Summary 363<br/>PART FOUR MANAGING SOFTWARE PROJECTS 365<br/>CHAPTER 19 PROJECT MANAGEMENT CONCEPTS 366<br/>19.1 The Management Spectrum 367<br/>19.1.1 The People 367<br/>19.1.2 The Product 367<br/>19.1.3 The Process 368<br/>19.1.4 The Project 368<br/>19.2 People 369<br/>19.2.1 The Stakeholders 369<br/>19.2.2 Team Leaders 369<br/>19.2.3 The Software Team 370<br/>19.2.4 Coordination and Communications Issues 372<br/>19.3 Product 373<br/>19.3.1 Software Scope 373<br/>19.3.2 Problem Decomposition 373<br/>19.4 Process 374<br/>19.4.1 Melding the Product and the Process 374<br/>19.4.2 Process Decomposition 374<br/>19.5 Project 376<br/>19.6 The W5HH Principle 377<br/>19.7 Critical Practices 378<br/>19.8 Summary 378<br/>CHAPTER 20 CREATING A VIABLE SOFTWARE PLAN 380<br/>20.1 Comments on Estimation 381<br/>20.2 The Project Planning Process 382<br/>20.3 Software Scope and Feasibility 383<br/>20.4 Resources 384<br/>20.4.1 uman Resources 384<br/>20.4.2 Reusable Software Resources 385<br/>20.4.3 Environmental Resources 385<br/>20.5 Project Scheduling 386<br/>20.5.1 Basic Principles 387<br/>20.5.2 The Relationship Between People and E?ort 388<br/>20.6 Defining a Project Task Set 389<br/>20.6.1 A Task Set Example 390<br/>20.6.2 efnement of Major Tasks 390<br/>20.7 Defning a Task Network 391<br/>20.8 Scheduling 392<br/>20.8.1 Time-Line Charts 392<br/>20.8.2 racking the Schedule 394<br/>20.9 Summary 396<br/>CHAPTER 21 RISK MANAGEMENT 398<br/>21.1 Reactive Versus Proactive Risk Strategies 399<br/>21.2 Software Risks 400<br/>21.3Risk Identi?cation 401<br/>21.3.1 Assessing Overall Project Risk 402<br/>21.3.2 Risk Components and Drivers 403<br/>21.4 Risk Projection 404<br/>21.4.1 Developing a Risk Table 404<br/>21.4.2 Assessing Risk Impact 406<br/>21.5 Risk Re?nement 408<br/>21.6 Risk Mitigation, Monitoring, and Management 409<br/>21.7 The RMMM Plan 412<br/>21.8 Summary 413<br/>CHAPTER 22 A STRATEGY FOR SOFTWARE SUPPORT 415<br/>22.1 Software Support 416<br/>22.2 Software Maintenance 418<br/>22.3 Proactive Software Support 423<br/>22.3.1 Use of Software Analytics 424<br/>22.3.2 Role of Social Media 425<br/>22.3.3 Cost of Support 425<br/>22.4 Refactoring 426<br/>22.4.1 Data Refactoring 427<br/>22.4.2 Code Refactoring 427<br/>22.4.3 Architecture Refactoring 427<br/>22.5 Software Evolution 428<br/>22.5.1 Inventory Analysis 429<br/>22.5.2 Document Restructuring 430<br/>22.5.3 Reverse Engineering 430<br/>22.5.4 Code Refactoring 430<br/>22.5.5 Data Refactoring 430<br/>22.5.6 Forward Engineering 431<br/>22.6 Summary 431 <br/>APPENDIX 1 <br/>REFERENCES <br/>Online Resources