Software Engineering: A Practitioner's Approach

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

For almost four decades, Software Engineering: A Practitioner's Approach (SEPA) has been the world's leading textbook in software engineering. The ninth edition represents a major restructuring and update of previous editions, solidifying the book's position as the most comprehensive guide to this important subject.

Author(s): Roger Pressman, Bruce Maxim
Edition: 9
Publisher: McGraw-Hill Education
Year: 2019

Language: English
Commentary: Vector PDF
Pages: 704
City: New York, NY
Tags: Software Engineering;Security;Psychology;Web Applications;Design Patterns;Best Practices;Risk Management;Design;User Experience;Waterfall;Agile;Scrum;Kanban;Project Management;Software Requirements;Unit Testing;Software Architecture;Integration Testing;Regression Testing;Testing;Quality Assurance;Legacy Code;Configuration Management;Process Management;Teamwork;Mobile Applications;Software Quality;Stakeholders;White-Box Testing;Black-Box Testing;Object-Oriented Testing;Test-Case Design

Cover
Title Page
Copyright Page
Dedication
About the Authors
Contents at a Glance
Table of Contents
Preface
CHAPTER 1 SOFTWARE AND SOFTWARE ENGINEERING
1.1 The Nature of Software
1.1.1 Defining Software
1.1.2 Software Application Domains
1.1.3 Legacy Software
1.2 Defining the Discipline
1.3 The Software Process
1.3.1 The Process Framework
1.3.2 Umbrella Activities
1.3.3 Process Adaptation
1.4 Software Engineering Practice
1.4.1 The Essence of Practice
1.4.2 General Principles
1.5 How It All Starts
1.6 Summary
PART ONE THE SOFTWARE PROCESS
CHAPTER 2 PROCESS MODELS
2.1 A Generic Process Model
2.2 Defining a Framework Activity
2.3 Identifying a Task Set
2.4 Process Assessment and Improvement
2.5 Prescriptive Process Models
2.5.1 The Waterfall Model
2.5.2 Prototyping Process Model
2.5.3 Evolutionary Process Model
2.5.4 Unified Process Model
2.6 Product and Process
2.7 Summary
CHAPTER 3 AGILITY AND PROCESS
3.1 What Is Agility?
3.2 Agility and the Cost of Change
3.3 What Is an Agile Process?
3.3.1 Agility Principles
3.3.2 The Politics of Agile Development
3.4 Scrum
3.4.1 Scrum Teams and Artifacts
3.4.2 Sprint Planning Meeting
3.4.3 Daily Scrum Meeting
3.4.4 Sprint Review Meeting
3.4.5 Sprint Retrospective
3.5 Other Agile Frameworks
3.5.1 The XP Framework
3.5.2 Kanban
3.5.3 DevOps
3.6 Summary
CHAPTER 4 RECOMMENDED PROCESS MODEL
4.1 Requirements Definition
4.2 Preliminary Architectural Design
4.3 Resource Estimation
4.4 First Prototype Construction
4.5 Prototype Evaluation
4.6 Go, No-Go Decision
4.7 Prototype Evolution
4.7.1 New Prototype Scope
4.7.2 Constructing New Prototypes
4.7.3 Testing New Prototypes
4.8 Prototype Release
4.9 Maintain Release Software
4.10 Summary
CHAPTER 5 HUMAN ASPECTS OF SOFTWARE ENGINEERING
5.1 Characteristics of a Software Engineer
5.2 The Psychology of Software Engineering
5.3 The Software Team
5.4 Team Structures
5.5 The Impact of Social Media
5.6 Global Teams
5.7 Summary
PART TWO MODELING
CHAPTER 6 PRINCIPLES THAT GUIDE PRACTICE
6.1 Core Principles
6.1.1 Principles That Guide Process
6.1.2 Principles That Guide Practice
6.2 Principles That Guide Each Framework Activity
6.2.1 Communication Principles
6.2.2 Planning Principles
6.2.3 Modeling Principles
6.2.4 Construction Principles
6.2.5 Deployment Principles
6.3 Summary
CHAPTER 7 UNDERSTANDING REQUIREMENTS
7.1 Requirements Engineering
7.1.1 Inception
7.1.2 Elicitation
7.1.3 Elaboration
7.1.4 Negotiation
7.1.5 Specification
7.1.6 Validation
7.1.7 Requirements Management
7.2 Establishing the Groundwork
7.2.1 Identifying Stakeholders
7.2.2 Recognizing Multiple Viewpoints
7.2.3 Working Toward Collaboration
7.2.4 Asking the First Questions
7.2.5 Nonfunctional Requirements
7.2.6 Traceability
7.3 Requirements Gathering
7.3.1 Collaborative Requirements Gathering
7.3.2 Usage Scenarios
7.3.3 Elicitation Work Products
7.4 Developing Use Cases
7.5 Building the Analysis Model
7.5.1 Elements of the Analysis Model
7.5.2 Analysis Patterns
7.6 Negotiating Requirements
7.7 Requirements Monitoring
7.8 Validating Requirements
7.9 Summary
CHAPTER 8 REQUIREMENTS MODELING—A RECOMMENDED APPROACH
8.1 Requirements Analysis
8.1.1 Overall Objectives and Philosophy
8.1.2 Analysis Rules of Thumb
8.1.3 Requirements Modeling Principles
8.2 Scenario-Based Modeling
8.2.1 Actors and User Profiles
8.2.2 Creating Use Cases
8.2.3 Documenting Use Cases
8.3 Class-Based Modeling
8.3.1 Identifying Analysis Classes
8.3.2 Defining Attributes and Operations
8.3.3 UML Class Models
8.3.4 Class-Responsibility-Collaborator Modeling
8.4 Functional Modeling
8.4.1 A Procedural View
8.4.2 UML Sequence Diagrams
8.5 Behavioral Modeling
8.5.1 Identifying Events with the Use Case
8.5.2 UML State Diagrams
8.5.3 UML Activity Diagrams
8.6 Summary
CHAPTER 9 DESIGN CONCEPTS
9.1 Design Within the Context of Software Engineering
9.2 The Design Process
9.2.1 Software Quality Guidelines and Attributes
9.2.2 The Evolution of Software Design
9.3 Design Concepts
9.3.1 Abstraction
9.3.2 Architecture
9.3.3 Patterns
9.3.4 Separation of Concerns
9.3.5 Modularity
9.3.6 Information Hiding
9.3.7 Functional Independence
9.3.8 Stepwise Refinement
9.3.9 Refactoring
9.3.10 Design Classes
9.4 The Design Model
9.4.1 Design Modeling Principles
9.4.2 Data Design Elements
9.4.3 Architectural Design Elements
9.4.4 Interface Design Elements
9.4.5 Component-Level Design Elements
9.4.6 Deployment-Level Design Elements
9.5 Summary
CHAPTER 10 ARCHITECTURAL DESIGN—A RECOMMENDED APPROACH
10.1 Software Architecture
10.1.1 What Is Architecture?
10.1.2 Why Is Architecture Important?
10.1.3 Architectural Descriptions
10.1.4 Architectural Decisions
10.2 Agility and Architecture
10.3 Architectural Styles
10.3.1 A Brief Taxonomy of Architectural Styles
10.3.2 Architectural Patterns
10.3.3 Organization and Refinement
10.4 Architectural Considerations
10.5 Architectural Decisions
10.6 Architectural Design
10.6.1 Representing the System in Context
10.6.2 Defining Archetypes
10.6.3 Refining the Architecture into Components
10.6.4 Describing Instantiations of the System
10.7 Assessing Alternative Architectural Designs
10.7.1 Architectural Reviews
10.7.2 Pattern-Based Architecture Review
10.7.3 Architecture Conformance Checking
10.8 Summary
CHAPTER 11 COMPONENT-LEVEL DESIGN
11.1 What Is a Component?
11.1.1 An Object-Oriented View
11.1.2 The Traditional View
11.1.3 A Process-Related View
11.2 Designing Class-Based Components
11.2.1 Basic Design Principles
11.2.2 Component-Level Design Guidelines
11.2.3 Cohesion
11.2.4 Coupling
11.3 Conducting Component-Level Design
11.4 Specialized Component-Level Design
11.4.1 Component-Level Design for WebApps
11.4.2 Component-Level Design for Mobile Apps
11.4.3 Designing Traditional Components
11.4.4 Component-Based Development
11.5 Component Refactoring
11.6 Summary
CHAPTER 12 USER EXPERIENCE DESIGN
12.1 User Experience Design Elements
12.1.1 Information Architecture
12.1.2 User Interaction Design
12.1.3 Usability Engineering
12.1.4 Visual Design
12.2 The Golden Rules
12.2.1 Place the User in Control
12.2.2 Reduce the User’s Memory Load
12.2.3 Make the Interface Consistent
12.3 User Interface Analysis and Design
12.3.1 Interface Analysis and Design Models
12.3.2 The Process
12.4 User Experience Analysis
12.4.1 User Research
12.4.2 User Modeling
12.4.3 Task Analysis
12.4.4 Work Environment Analysis
12.5 User Experience Design
12.6 User Interface Design
12.6.1 Applying Interface Design Steps
12.6.2 User Interface Design Patterns
12.7 Design Evaluation
12.7.1 Prototype Review
12.7.2 User Testing
12.8 Usability and Accessibility
12.8.1 Usability Guidelines
12.8.2 Accessibility Guidelines
12.9 Conventional Software UX and Mobility
12.10 Summary
CHAPTER 13 DESIGN FOR MOBILITY
13.1 The Challenges
13.1.1 Development Considerations
13.1.2 Technical Considerations
13.2 Mobile Development Life Cycle
13.2.1 User Interface Design
13.2.2 Lessons Learned
13.3 Mobile Architectures
13.4 Context-Aware Apps
13.5 Web Design Pyramid
13.5.1 WebApp Interface Design
13.5.2 Aesthetic Design
13.5.3 Content Design
13.5.4 Architecture Design
13.5.5 Navigation Design
13.6 Component-Level Design
13.7 Mobility and Design Quality
13.8 Mobility Design Best Practices
13.9 Summary
CHAPTER 14 PATTERN-BASED DESIGN
14.1 Design Patterns
14.1.1 Kinds of Patterns
14.1.2 Frameworks
14.1.3 Describing a Pattern
14.1.4 Machine Learning and Pattern Discovery
14.2 Pattern-Based Software Design
14.2.1 Pattern-Based Design in Context
14.2.2 Thinking in Patterns
14.2.3 Design Tasks
14.2.4 Building a Pattern-Organizing Table
14.2.5 Common Design Mistakes
14.3 Architectural Patterns
14.4 Component-Level Design Patterns
14.5 Anti-Patterns
14.6 User Interface Design Patterns
14.7 Mobility Design Patterns
14.8 Summary
PART THREE QUALITY AND SECURITY
CHAPTER 15 QUALITY CONCEPTS
15.1 What Is Quality?
15.2 Software Quality
15.2.1 Quality Factors
15.2.2 Qualitative Quality Assessment
15.2.3 Quantitative Quality Assessment
15.3 The Software Quality Dilemma
15.3.1 “Good Enough” Software
15.3.2 The Cost of Quality
15.3.3 Risks
15.3.4 Negligence and Liability
15.3.5 Quality and Security
15.3.6 The Impact of Management Actions
15.4 Achieving Software Quality
15.4.1 Software Engineering Methods
15.4.2 Project Management Techniques
15.4.3 Machine Learning and Defect Prediction
15.4.4 Quality Control
15.4.5 Quality Assurance
15.5 Summary
CHAPTER 16 REVIEWS—A RECOMMENDED APPROACH
16.1 Cost Impact of Software Defects
16.2 Defect Amplification and Removal
16.3 Review Metrics and Their Use
16.4 Criteria for Types of Reviews
16.5 Informal Reviews
16.6 Formal Technical Reviews
16.6.1 The Review Meeting
16.6.2 Review Reporting and Record Keeping
16.6.3 Review Guidelines
16.7 Postmortem Evaluations
16.8 Agile Reviews
16.9 Summary
CHAPTER 17 SOFTWARE QUALITY ASSURANCE
17.1 Background Issues
17.2 Elements of Software Quality Assurance
17.3 SQA Processes and Product Characteristics
17.4 SQA Tasks, Goals, and Metrics
17.4.1 SQA Tasks
17.4.2 Goals, Attributes, and Metrics
17.5 Formal Approaches to SQA
17.6 Statistical Software Quality Assurance
17.6.1 A Generic Example
17.6.2 Six Sigma for Software Engineering
17.7 Software Reliability
17.7.1 Measures of Reliability and Availability
17.7.2 Use of AI to Model Reliability
17.7.3 Software Safety
17.8 The ISO 9000 Quality Standards
17.9 The SQA Plan
17.10 Summary
CHAPTER 18 SOFTWARE SECURITY ENGINEERING
18.1 Why Software Security Information Is Important
18.2 Security Life-Cycle Models
18.3 Secure Development Life-Cycle Activities
18.4 Security Requirements Engineering
18.4.1 SQUARE
18.4.2 The SQUARE Process
18.5 Misuse and Abuse Cases and Attack Patterns
18.6 Security Risk Analysis
18.7 Threat Modeling, Prioritization, and Mitigation
18.8 Attack Surface
18.9 Secure Coding
18.10 Measurement
18.11 Security Process Improvement and Maturity Models
18.12 Summary
CHAPTER 19 SOFTWARE TESTING—COMPONENT LEVEL
19.1 A Strategic Approach to Software Testing
19.1.1 Verification and Validation
19.1.2 Organizing for Software Testing
19.1.3 The Big Picture
19.1.4 Criteria for “Done”
19.2 Planning and Recordkeeping
19.2.1 Role of Scaffolding
19.2.2 Cost-Effective Testing
19.3 Test-Case Design
19.3.1 Requirements and Use Cases
19.3.2 Traceability
19.4 White-Box Testing
19.4.1 Basis Path Testing
19.4.2 Control Structure Testing
19.5 Black-Box Testing
19.5.1 Interface Testing
19.5.2 Equivalence Partitioning
19.5.3 Boundary Value Analysis
19.6 Object-Oriented Testing
19.6.1 Class Testing
19.6.2 Behavioral Testing
19.7 Summary
CHAPTER 20 SOFTWARE TESTING—INTEGRATION LEVEL
20.1 Software Testing Fundamentals
20.1.1 Black-Box Testing
20.1.2 White-Box Testing
20.2 Integration Testing
20.2.1 Top-Down Integration
20.2.2 Bottom-Up Integration
20.2.3 Continuous Integration
20.2.4 Integration Test Work Products
20.3 Artificial Intelligence and Regression Testing
20.4 Integration Testing in the OO Context
20.4.1 Fault-Based Test-Case Design
20.4.2 Scenario-Based Test-Case Design
20.5 Validation Testing
20.6 Testing Patterns
20.7 Summary
CHAPTER 21 SOFTWARE TESTING—SPECIALIZED TESTING FOR MOBILITY
21.1 Mobile Testing Guidelines
21.2 The Testing Strategies
21.3 User Experience Testing Issues
21.3.1 Gesture Testing
21.3.2 Virtual Keyboard Input
21.3.3 Voice Input and Recognition
21.3.4 Alerts and Extraordinary Conditions
21.4 Web Application Testing
21.5 Web Testing Strategies
21.5.1 Content Testing
21.5.2 Interface Testing
21.5.3 Navigation Testing
21.6 Internationalization
21.7 Security Testing
21.8 Performance Testing
21.9 Real-Time Testing
21.10 Testing AI Systems
21.10.1 Static and Dynamic Testing
21.10.2 Model-Based Testing
21.11 Testing Virtual Environments
21.11.1 Usability Testing
21.11.2 Accessibility Testing
21.11.3 Playability Testing
21.12 Testing Documentation and Help Facilities
21.13 Summary
CHAPTER 22 SOFTWARE CONFIGURATION MANAGEMENT
22.1 Software Configuration Management
22.1.1 An SCM Scenario
22.1.2 Elements of a Configuration Management System
22.1.3 Baselines
22.1.4 Software Configuration Items
22.1.5 Management of Dependencies and Changes
22.2 The SCM Repository
22.2.1 General Features and Content
22.2.2 SCM Features
22.3 Version Control Systems
22.4 Continuous Integration
22.5 The Change Management Process
22.5.1 Change Control
22.5.2 Impact Management
22.5.3 Configuration Audit
22.5.4 Status Reporting
22.6 Mobility and Agile Change Management
22.6.1 e-Change Control
22.6.2 Content Management
22.6.3 Integration and Publishing
22.6.4 Version Control
22.6.5 Auditing and Reporting
22.7 Summary
CHAPTER 23 SOFTWARE METRICS AND ANALYTICS
23.1 Software Measurement
23.1.1 Measures, Metrics, and Indicators
23.1.2 Attributes of Effective Software Metrics
23.2 Software Analytics
23.3 Product Metrics
23.3.1 Metrics for the Requirements Model
23.3.2 Design Metrics for Conventional Software
23.3.3 Design Metrics for Object-Oriented Software
23.3.4 User Interface Design Metrics
23.3.5 Metrics for Source Code
23.4 Metrics for Testing
23.5 Metrics for Maintenance
23.6 Process and Project Metrics
23.7 Software Measurement
23.8 Metrics for Software Quality
23.9 Establishing Software Metrics Programs
23.10 Summary
PART FOUR MANAGING SOFTWARE PROJECTS
CHAPTER 24 PROJECT MANAGEMENT CONCEPTS
24.1 The Management Spectrum
24.1.1 The People
24.1.2 The Product
24.1.3 The Process
24.1.4 The Project
24.2 People
24.2.1 The Stakeholders
24.2.2 Team Leaders
24.2.3 The Software Team
24.2.4 Coordination and Communications Issues
24.3 Product
24.3.1 Software Scope
24.3.2 Problem Decomposition
24.4 Process
24.4.1 Melding the Product and the Process
24.4.2 Process Decomposition
24.5 Project
24.6 The W5HH Principle
24.7 Critical Practices
24.8 Summary
CHAPTER 25 CREATING A VIABLE SOFTWARE PLAN
25.1 Comments on Estimation
25.2 The Project Planning Process
25.3 Software Scope and Feasibility
25.4 Resources
25.4.1 Human Resources
25.4.2 Reusable Software Resources
25.4.3 Environmental Resources
25.5 Data Analytics and Software Project Estimation
25.6 Decomposition and Estimation Techniques
25.6.1 Software Sizing
25.6.2 Problem-Based Estimation
25.6.3 An Example of LOC-Based Estimation
25.6.4 An Example of FP-Based Estimation
25.6.5 An Example of Process-Based Estimation
25.6.6 An Example of Estimation Using Use Case Points
25.6.7 Reconciling Estimates
25.6.8 Estimation for Agile Development
25.7 Project Scheduling
25.7.1 Basic Principles
25.7.2 The Relationship Between People and Effort
25.8 Defining a Project Task Set
25.8.1 A Task Set Example
25.8.2 Refinement of Major Tasks
25.9 Defining a Task Network
25.10 Scheduling
25.10.1 Time-Line Charts
25.10.2 Tracking the Schedule
25.11 Summary
CHAPTER 26 RISK MANAGEMENT
26.1 Reactive Versus Proactive Risk Strategies
26.2 Software Risks
26.3 Risk Identification
26.3.1 Assessing Overall Project Risk
26.3.2 Risk Components and Drivers
26.4 Risk Projection
26.4.1 Developing a Risk Table
26.4.2 Assessing Risk Impact
26.5 Risk Refinement
26.6 Risk Mitigation, Monitoring, and Management
26.7 The RMMM Plan
26.8 Summary
CHAPTER 27 A STRATEGY FOR SOFTWARE SUPPORT
27.1 Software Support
27.2 Software Maintenance
27.2.1 Maintenance Types
27.2.2 Maintenance Tasks
27.2.3 Reverse Engineering
27.3 Proactive Software Support
27.3.1 Use of Software Analytics
27.3.2 Role of Social Media
27.3.3 Cost of Support
27.4 Refactoring
27.4.1 Data Refactoring
24.4.2 Code Refactoring
27.4.3 Architecture Refactoring
27.5 Software Evolution
27.5.1 Inventory Analysis
27.5.2 Document Restructuring
27.5.3 Reverse Engineering
27.5.4 Code Refactoring
27.5.5 Data Refactoring
27.5.6 Forward Engineering
27.6 Summary
PART FIVE ADVANCED TOPICS
CHAPTER 28 SOFTWARE PROCESS IMPROVEMENT
28.1 What Is SPI?
28.1.1 Approaches to SPI
28.1.2 Maturity Models
28.1.3 Is SPI for Everyone?
28.2 The SPI Process
28.2.1 Assessment and GAP Analysis
28.2.2 Education and Training
28.2.3 Selection and Justification
28.2.4 Installation/Migration
28.2.5 Evaluation
28.2.6 Risk Management for SPI
28.3 The CMMI
28.4 Other SPI Frameworks
28.4.1 SPICE
28.4.2 TickIT Plus
28.5 SPI Return on Investment
28.6 SPI Trends
28.7 Summary
CHAPTER 29 EMERGING TRENDS IN SOFTWARE ENGINEERING
29.1 Technology Evolution
29.2 Software Engineering as a Discipline
29.3 Observing Software Engineering Trends
29.4 Identifying “Soft Trends”
29.4.1 Managing Complexity
29.4.2 Open-World Software
29.4.3 Emergent Requirements
29.4.4 The Talent Mix
29.4.5 Software Building Blocks
29.4.6 Changing Perceptions of “Value”
29.4.7 Open Source
29.5 Technology Directions
29.5.1 Process Trends
29.5.2 The Grand Challenge
29.5.3 Collaborative Development
29.5.4 Requirements Engineering
29.5.5 Model-Driven Software Development
29.5.6 Search-Based Software Engineering
29.5.7 Test-Driven Development
29.6 Tools-Related Trends
29.7 Summary
CHAPTER 30 CONCLUDING COMMENTS
30.1 The Importance of Software—Revisited
30.2 People and the Way They Build Systems
30.3 Knowledge Discovery
30.4 The Long View
30.5 The Software Engineer’s Responsibility
30.6 A Final Comment from RSP
APPENDIX 1 An Introduction to UML
APPENDIX 2 Data Science for Software Engineers
REFERENCES
INDEX