Table of Contents
Preface xxvii
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 Prescriptive Process Models 25
2.4.1 The Waterfall Model 25
2.4.2 Prototyping Process Model 26
2.4.3 Evolutionary Process Model 29
2.4.4 Unified Process Model 31
2.5 Product and Process 33
2.6 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 UNDERSTANDING REQUIREMENTS 84
6.1 Requirements Engineering 85
6.1.1 Inception 86
6.1.2 Elicitation 86
6.1.3 Elaboration 86
6.1.4 Negotiation 87
6.1.5 Specification 87
6.1.6 Validation 87
6.1.7 Requirements Management 88
6.2 Establishing the Groundwork 89
6.2.1 Identifying Stakeholders 89
6.2.2 Recognizing Multiple Viewpoints 89
6.2.3 Working Toward Collaboration 90
6.2.4 Asking the First Questions 90
6.2.5 Nonfunctional Requirements 91
6.2.6 Traceability 91
CHAPTER 7 REQUIREMENTS MODELING—A RECOMMENDED APPROACH 108
7.1 Requirements Analysis 109
7.1.1 Overall Objectives and Philosophy 110
7.1.2 Analysis Rules of Thumb 110
7.1.3 Requirements Modeling Principles 111
7.2 Scenario-Based Modeling 112
7.2.1 Actors and User Profiles 113
7.2.2 Creating Use Cases 113
7.2.3 Documenting Use Cases 117
7.3 Class-Based Modeling 119
7.3.1 Identifying Analysis Classes 119
7.3.2 Defining Attributes and Operations 122
7.3.3 UML Class Models 123
7.3.4 Class-Responsibility-Collaborator Modeling 126
7.4 Functional Modeling 128
7.4.1 A Procedural View 128
7.4.2 UML Sequence Diagrams 130
7.5 Behavioral Modeling 131
7.5.1 Identifying Events with the Use Case 131
7.5.2 UML State Diagrams 132
7.5.3 UML Activity Diagrams 133
7.6 Summary 136
HAPTER 8 DESIGN CONCEPTS 138
8.1 Design Within the Context of Software Engineering 139
8.2 The Design Process 141
8.2.1 Software Quality Guidelines and Attributes 142
8.2.2 The Evolution of Software Design 143
8.3 Design Concepts 145
8.3.1 Abstraction 145
8.3.2 Architecture 145
8.3.3 Patterns 146
8.3.4 Separation of Concerns 147
8.3.5 Modularity 147
8.3