
Modern Software Engineering: Doing What Works to Build Better Software Faster, 1st edition
BRAND: PEARSON
eBook edition. 1 Year Subscription. Dành cho Cá nhân | Trường ĐH, Nhóm, Thư Viện: Gọi 0915920514 để báo giá Pearson, Vital Source eBook hoặc mua Sách In
Tổng quan sách
Viết cho sinh viên ở mọi cấp độ kinh nghiệm, Farley làm sáng tỏ những nguyên tắc bền vững cốt lõi của việc phát triển phần mềm hiệu quả. Ông chắt lọc nguyên tắc này thành hai bài tập cốt lõi: thứ nhất, học tập và khám phá, và thứ hai, quản lý sự phức tạp. Đối với mỗi lĩnh vực, ông xác định các nguyên tắc có thể giúp sinh viên cải thiện mọi thứ, từ tư duy đến chất lượng mã, đồng thời mô tả các phương pháp đã được chứng minh là có thể thúc đẩy thành công. Các ý tưởng và kỹ thuật của Farley gắn kết thành một cách tiếp cận thống nhất, khoa học và nền tảng để giải quyết các vấn đề phát triển phần mềm thực tế trong những hạn chế kinh tế thực tế. Cách tiếp cận chung, bền vững và phổ biến này đối với công nghệ phần mềm có thể giúp sinh viên giải quyết các vấn đề mà họ chưa gặp phải bằng cách sử dụng các công nghệ ngày nay và ngày mai. Nó cung cấp cho sinh viên cái nhìn sâu sắc hơn về những gì họ làm hàng ngày, giúp họ tạo ra phần mềm tốt hơn, nhanh hơn, mang lại nhiều niềm vui và thỏa mãn cá nhân hơn.
- Foreword xviiPreface xxiAcknowledgments xxvAbout the Author xxviiPart I: What Is Software Engineering? 1
- Chapter 1: Introduction 3Engineering--The Practical Application of Science 3What Is Software Engineering? 4Reclaiming "Software Engineering" 5The Birth of Software Engineering 7Shifting the Paradigm 8Summary 9
- Chapter 2: What Is Engineering? 11Production Is Not Our Problem 11Design Engineering, Not Production Engineering 12A Working Definition of Engineering 17Engineering != Code 17Why Does Engineering Matter? 19The Limits of "Craft" 19Precision and Scalability 20Managing Complexity 21Repeatability and Accuracy of Measurement 22Engineering, Creativity, and Craft 24Why What We Do Is Not Software Engineering 25Trade-Offs 26The Illusion of Progress 26The Journey from Craft to Engineering 27Craft Is Not Enough 28Time for a Rethink? 28Summary 30
- Chapter 3: Fundamentals of an Engineering Approach 31An Industry of Change? 31The Importance of Measurement 32Applying Stability and Throughput 34The Foundations of a Software Engineering Discipline 36Experts at Learning 36Experts at Managing Complexity 37Summary 38Part II: Optimize for Learning 41
- Chapter 4: Working Iteratively 43Practical Advantages of Working Iteratively 45Iteration as a Defensive Design Strategy 46The Lure of the Plan 48Practicalities of Working Iteratively 54Summary 55
- Chapter 5: Feedback 57A Practical Example of the Importance of Feedback 58Feedback in Coding 60Feedback in Integration 61Feedback in Design 63Feedback in Architecture 65Prefer Early Feedback 67Feedback in Product Design 68Feedback in Organization and Culture 68Summary 70
- Chapter 6: Incrementalism 71Importance of Modularity 72Organizational Incrementalism 73Tools of Incrementalism 74Limiting the Impact of Change 76Incremental Design 77Summary 79
- Chapter 7: Empiricism 81Grounded in Reality 82Separating Empirical from Experimental 82"I Know That Bug!" 82Avoiding Self-Deception 84Inventing a Reality to Suit Our Argument 85Guided by Reality 88Summary 89
- Chapter 8: Being Experimental 91What Does "Being Experimental" Mean? 92Feedback 93Hypothesis 94Measurement 95Controlling the Variables 96Automated Testing as Experiments 97Putting the Experimental Results of Testing into Context 98Scope of an Experiment 100Summary 100Part III: Optimize for Managing Complexity 103
- Chapter 9: Modularity 105Hallmarks of Modularity 106Undervaluing the Importance of Good Design 107The Importance of Testability 108Designing for Testability Improves Modularity 109Services and Modularity 115Deployability and Modularity 116Modularity at Different Scales 118Modularity in Human Systems 118Summary 120
- Chapter 10: Cohesion 121Modularity and Cohesion: Fundamentals of Design 121A Basic Reduction in Cohesion 122Context Matters 125High-Performance Software 128Link to Coupling 129Driving High Cohesion with TDD 129How to Achieve Cohesive Software 130Costs of Poor Cohesion 132Cohesion in Human Systems 133Summary 133
- Chapter 11: Separation of Concerns 135Dependency Injection 139Separating Essential and Accidental Complexity 139Importance of DDD 142Testability 144Ports & Adapters 145When to Adopt Ports & Adapters 147What Is an API? 148Using TDD to Drive Separation of Concerns 149Summary 150
- Chapter 12: Information Hiding and Abstraction 151Abstraction or Information Hiding 151What Causes "Big Balls of Mud"? 152Organizational and Cultural Problems 152Technical Problems and Problems of Design 154Fear of Over-Engineering 157Improving Abstraction Through Testing 159Power of Abstraction 160Leaky Abstractions 162Picking Appropriate Abstractions 163Abstractions from the Problem Domain 165Abstract Accidental Complexity 166Isolate Third-Party Systems and Code 168Always Prefer to Hide Information 169Summary 170
- Chapter 13: Managing Coupling 171Cost of Coupling 171Scaling Up 172Microservices 173Decoupling May Mean More Code 175Loose Coupling Isn't the Only Kind That Matters 176Prefer Loose Coupling 177How Does This Differ from Separation of Concerns? 178DRY Is Too Simplistic 179Async as a Tool for Loose Coupling 180Designing for Loose Coupling 182Loose Coupling in Human Systems 182Summary 184Part IV: Tools to Support Engineering in Software 185
- Chapter 14: The Tools of an Engineering Discipline 187What Is Software Development? 188Testability as a Tool 189Measurement Points 192Problems with Achieving Testability 193How to Improve Testability 196Deployability 197Speed 199Controlling the Variables 200Continuous Delivery 201General Tools to Support Engineering 202Summary 203
- Chapter 15: The Modern Software Engineer 205Engineering as a Human Process 207Digitally Disruptive Organizations 207Outcomes vs. Mechanisms 210Durable and Generally Applicable 211Foundations of an Engineering Discipline 214Summary 215Index 217