Introduction xxvii Part I: Software Engineering Step- By- Step Chapter 1: Software Engineering From 20,000 Feet 3 Requirements Gathering 4 High- Level Design 5 Low- Level Design 6 Development 6 Testing 7 Deployment 9 Maintenance 10 Wrap- Up 10 Everything All at Once 11 Summary 12 What You Learned in This Chapter 13 Chapter 2: Before the Beginning 15 Document Management 16 Historical Documents 19 Email 19 Code 22 Code Documentation 22 Application Documentation 25 Summary 26 What You Learned in This Chapter 27 Chapter 3: the Team 29 Team Features 30 Clear Roles 30 Effective Leadership 30 Clear Goals 31 Consensus 32 Open Communication 32 Support for Risk- Taking 33 Shared Accountability 33 Informal Atmosphere 34 Trust 34 Team Roles 34 Common Roles 35 More- Specialized Roles 36 Informal Roles 36 Roles Wrap- Up 37 Team Culture 37 Interviews 40 Interview Puzzles 40 The Bottom Line 41 Physical Environment 41 Creativity 41 Office Space 43 Ergonomics 43 Work- Life Balance 45 Collaboration Software 46 Searching 46 Overload 47 Outsourcing 47 Summary 48 What You Learned in This Chapter 50 Chapter 4: Project Management 53 Executive Support 54 Project Management 56 PERT Charts 57 Critical Path Methods 62 Gantt Charts 65 Scheduling Software 67 Predicting Times 68 Get Experience 69 Break Unknown Tasks into Simpler Pieces 70 Look for Similarities 71 Expect the Unexpected 71 Track Progress 73 Risk Management 74 Summary 76 What You Learned in This Chapter 79 Chapter 5: Requirements Gathering 81 Requirements Defined 82 Clear 82 Unambiguous 83 Consistent 84 Prioritized 84 Verifiable 88 Words to Avoid 89 Requirement Categories 89 Audience- Oriented Requirements 90 Business Requirements 90 User Requirements 90 Functional Requirements 91 Nonfunctional Requirements 92 Implementation Requirements 92 FURPS 92 FURPS+ 93 Common Requirements 96 Gathering Requirements 96 Listen to Customers (and Users) 97 Use the Five Ws (and One H) 98 Who 98 What 98 When 98 Where 98 Why 99 How 99 Study Users 99 Refining Requirements 100 Copy Existing Systems 101 Clairvoyance 102 Brainstorm 103 Recording Requirements 106 UML 107 User Stories 107 Use Cases 108 Prototypes 108 Requirements Specification 109 Validation and Verification 110 Changing Requirements 110 Digital Transformation 111 What to Digitize 111 How to Digitize 112 Summary 113 What You Learned in This Chapter 116 Chapter 6: High- Level Design 117 The Big Picture 118 What to Specify 119 Security 119 Hardware 120 User Interface 121 Internal Interfaces 122 External Interfaces 123 Architecture 124 Monolithic 124 Client/Server 125 Component- Based 127 Service- Oriented 128 Data- Centric 130 Event- Driven 130 Rule- Based 130 Distributed 131 MIX and Match 132 Reports 133 Other Outputs 134 Database 135 Audit Trails 136 User Access 136 Database Maintenance 137 NoSQL 137 Cloud Databases 138 Configuration Data 138 Data Flows and States 139 Training 139 UML 141 Structure Diagrams 142 Behavior Diagrams 145 Activity Diagrams 145 Use Case Diagram 146 State Machine Diagram 147 Interaction Diagrams 148 Sequence Diagram 148 Communication Diagram 150 Timing Diagram 150 Interaction Overview Diagram 151 UML Summary 151 Summary 151 What You Learned in This Chapter 152 Chapter 7: Low- Level Design 155 Design Approaches 156 Design- to- Schedule 157 Design- to- Tools 158 Process- Oriented Design 158 Data- Oriented Design 159 Object- Oriented Design 159 Hybrid Approaches 159 High, Low, and Iterative Design 160 OO Design 160 Identifying Classes 161 Building Inheritance Hierarchies 162 Refinement 163 Generalization 165 Hierarchy Warning Signs 167 Object Composition 167 Database Design 168 Relational Databases 168 First Normal Form 170 Second Normal Form 174 Third Normal Form 176 Higher Levels of Normalization 179 When to Optimize 180 Summary 180 What You Learned in This Chapter 182 Chapter 8: Security Design 185 Security Goals 186 Security Types 186 Cybersecurity 188 Shift- Left Security 189 Malware Menagerie 189 Phishing and Spoofing 193 Social Engineering Attacks 195 Crapware 197 Password Attacks 198 User Access 201 Countermeasures 201 Cyber Insurance 202 Summary 203 What You Learned in This Chapter 207 Chapter 9: User Experience Design 209 Design Mindset 210 UI vs. UX 210 UX Designers 211 Platform 212 User Skill Level 214 Beginners and Beyond 216 Configuration 217 Hidden Configuration 218 Models 219 Metaphors and Idioms 220 Case Study: Microsoft Word 221 Design Guidelines 225 Allow Exploration 225 Make the Interface Immutable 227 Support Commensurate Difficulty 227 Avoid State 228 Make Similar Things Similar 228 Provide Redundant Commands 230 Do the Right Thing 231 Show Qualitative Data, Explain Quantitative Data 232 Give Forms Purpose 232 Gather All Information at Once 233 Provide Reasonable Performance 234 Only Allow What''s Right 235 Flag Mistakes 235 Form Design 236 Use Standard Controls 236 Decorating 237 Displaying 237 Arranging 237 Commanding 238 Selecting 238 Entering 239 Display Five Things 240 Arrange Controls Nicely 241 Summary 241 What You Learned in This Chapter 242 Chapter 10: Programming 245 Tools 246 Hardware 246 Network 247 Development Environment 248 Source Code Control 249 Profilers 249 Static Analysis Tools 249 Testing Tools 249 Source Code Formatters 250 Refactoring Tools 250 Training 250 Collaboration Tools 250 Algorithms 251 Top- Down Design 252 Programming Tips and Tricks 255 Be Alert 255 Write for People, Not the Computer 255 Comment First 256 Write Self- Documenting Code 259 Keep It Small 259 Stay Focused 261 Avoid Side Effects 261 Validate Results 262 Practice Offensive Programming 264 Use Exceptions 266 Write Exception Handlers First 266 Don''t Repeat Code 267 Defer Optimization 267 Summary 269 What You Learned in This Chapter 270 Chapter 11: Algorithms 273 Algorithm Study 274 Algorithmic Approaches 275 Decision Trees 275 Knapsack 275 The Eight Queens Problem 276 Exhaustive Search 277 Backtracking 278 Pruning Trees 279 Branch and Bound 279 Heuristics 280 Greedy 281 Divide and Conquer 282 Recursion 283 Dynamic Programming 285 Caching 287 Randomization 287 Monte Carlo Algorithms 287 Las Vegas Algorithms 288 Atlantic City Algorithms 289 State Diagrams 289 Design Patterns 290 Creational Patterns 291 Structural Patterns 291 Behavioral Patterns 292 Design Pattern Summary 293 Parallel Programming 293 Artificial Intelligence 295 Definitions 295 Learning Systems 296 Natural Language Processing 297 Artificial Neural Network 297 Deep Learning 297 Expert System 298 Artificial General Intelligence 298 Algorithm Characteristics 301 Summary 302 What You Learned in This Chapter 304 Chapter 12: Programming Languages 307 The Myth of Picking a Language 308 Language Generations 311 First Generation 311 Second Generation 311 Third Generation (3GL) 312 Fourth Generation 313 Fifth Generation 314 Sixth Generation 314 IDEs 315 Language Families 316 Assembly 316 Imperative 317 Procedural 317 Declarative 318 Object- Oriented 318 Functional 319 Specialized 319 Language Family Summary 319 The Best Language 319 Summary 323 What You Learned in This Chapter 324 Chapter 13: Testing 327 Testing Goals 329 Reasons Bugs Never Die 330 Diminishing Returns 330 Deadlines 330 Consequences 330 It''s Too Soon 330 Usefulness 331 Obsolescence 331 It''s Not a Bug 331 It Never Ends 332 It''s Better Than Nothing 333 Fixing Bugs Is Dangerous 333 Which Bugs to Fix 334 Levels of Testing 334 Unit Testing 335 Integration Testing 336 Regression Testing 337 Automated Testing 33.
Beginning Software Engineering