<p><i>For one-semester courses in software engineering.</i></p> <p>Β </p> <p><b>Introduces software engineering techniques for developing software products and apps</b></p> <p>With <b><i>Engineering Software Products</i>, </b>author Ian Sommerville takes a unique approach to teaching software enginee
Modern Software Engineering
β Scribed by David Farley
- Publisher
- Addison-Wesley
- Year
- 2022
- Tongue
- English
- Leaves
- 256
- Category
- Library
No coin nor oath required. For personal study only.
β¦ Table of Contents
Cover
Half Title
Title
Copyright
Dedication
Contents
Foreword
Preface
Acknowledgments
About the Author
Part I: What Is Software Engineering?
1 Introduction
EngineeringβThe Practical Application of Science
What Is Software Engineering?
Reclaiming βSoftware Engineeringβ
How to Make Progress
The Birth of Software Engineering
Shifting the Paradigm
Summary
2 What Is Engineering?
Production Is Not Our Problem
Design Engineering, Not Production Engineering
A Working Definition of Engineering
Engineering != Code
Why Does Engineering Matter?
The Limits of βCraftβ
Precision and Scalability
Managing Complexity
Repeatability and Accuracy of Measurement
Engineering, Creativity, and Craft
Why What We Do Is Not Software Engineering
Trade-Offs
The Illusion of Progress
The Journey from Craft to Engineering
Craft Is Not Enough
Time for a Rethink?
Summary
3 Fundamentals of an Engineering Approach
An Industry of Change?
The Importance of Measurement
Applying Stability and Throughput
The Foundations of a Software Engineering Discipline
Experts at Learning
Experts at Managing Complexity
Summary
Part II: Optimize for Learning
4 Working Iteratively
Practical Advantages of Working Iteratively
Iteration as a Defensive Design Strategy
The Lure of the Plan
Practicalities of Working Iteratively
Summary
5 Feedback
A Practical Example of the Importance of Feedback
Feedback in Coding
Feedback in Integration
Feedback in Design
Feedback in Architecture
Prefer Early Feedback
Feedback in Product Design
Feedback in Organization and Culture
Summary
6 Incrementalism
Importance of Modularity
Organizational Incrementalism
Tools of Incrementalism
Limiting the Impact of Change
Incremental Design
Summary
7 Empiricism
Grounded in Reality
Separating Empirical from Experimental
βI Know That Bug!β
Avoiding Self-Deception
Inventing a Reality to Suit Our Argument
Guided by Reality
Summary
8 Being Experimental
What Does βBeing Experimentalβ Mean?
Feedback
Hypothesis
Measurement
Controlling the Variables
Automated Testing as Experiments
Putting the Experimental Results of Testing into Context
Scope of an Experiment
Summary
Part III: Optimize for Managing Complexity
9 Modularity
Hallmarks of Modularity
Undervaluing the Importance of Good Design
The Importance of Testability
Designing for Testability Improves Modularity
Services and Modularity
Deployability and Modularity
Modularity at Different Scales
Modularity in Human Systems
Summary
10 Cohesion
Modularity and Cohesion: Fundamentals of Design
A Basic Reduction in Cohesion
Context Matters
High-Performance Software
Link to Coupling
Driving High Cohesion with TDD
How to Achieve Cohesive Software
Costs of Poor Cohesion
Cohesion in Human Systems
Summary
11 Separation of Concerns
Dependency Injection
Separating Essential and Accidental Complexity
Importance of DDD
Testability
Ports & Adapters
When to Adopt Ports & Adapters
What Is an API?
Using TDD to Drive Separation of Concerns
Summary
12 Information Hiding and Abstraction
Abstraction or Information Hiding
What Causes βBig Balls of Mudβ?
Organizational and Cultural Problems
Technical Problems and Problems of Design
Fear of Over-Engineering
Improving Abstraction Through Testing
Power of Abstraction
Leaky Abstractions
Picking Appropriate Abstractions
Abstractions from the Problem Domain
Abstract Accidental Complexity
Isolate Third-Party Systems and Code
Always Prefer to Hide Information
Summary
13 Managing Coupling
Cost of Coupling
Scaling Up
Microservices
Decoupling May Mean More Code
Loose Coupling Isnβt the Only Kind That Matters
Prefer Loose Coupling
How Does This Differ from Separation of Concerns?
DRY Is Too Simplistic
Async as a Tool for Loose Coupling
Designing for Loose Coupling
Loose Coupling in Human Systems
Summary
Part IV: Tools to Support Engineering in Software
14 The Tools of an Engineering Discipline
What Is Software Development?
Testability as a Tool
Measurement Points
Problems with Achieving Testability
How to Improve Testability
Deployability
Speed
Controlling the Variables
Continuous Delivery
General Tools to Support Engineering
Summary
15 The Modern Software Engineer
Engineering as a Human Process
Digitally Disruptive Organizations
Outcomes vs. Mechanisms
Durable and Generally Applicable
Foundations of an Engineering Discipline
Summary
Index
A
B
C
D
E
F
G-H
I
J-K-L
M
N
O-P
Q
R
S
T
U-V
W-X-Y-Z
π SIMILAR VOLUMES
Software products, such as stand-alone programs, web apps and services, and mobile apps, have transformed our everyday life and work. There are tens of thousands of software product companies, and hundreds of thousands of software engineers are employed worldwide in software product development.
Introduces software engineering techniques for developing software products and apps. With Engineering Software Products, author Ian Sommerville takes a unique approach to teaching software engineering and focuses on the type of software products and apps that are familiar to students, rather tha
<p> <i>For one-semester courses in software engineering.</i> </p> <p>Β </p> <p> <b>Introduces software engineering techniques for developing software products and apps</b> </p> <p>With <b> <i>Engineering Software Products</i>, </b>author Ian Sommerville takes a unique approach to teaching software en
Presenting the most comprehensive and practical introduction to the principles of software engineering and how to apply them, this updated edition follows an object-oriented perspectiveIncludes new and expanded material on agile and emerging methods, metrics, quality assurance security, real-world c