Unit 0 — Introduction to Software Engineering¶
Learning objectives¶
- Distinguish software engineering from programming alone.
- Explain why software cost is dominated by change, coordination, and lifecycle concerns.
- Identify stakeholders, constraints, risks, and quality attributes in a software-intensive system.
Why engineering?¶
Software is easy to modify syntactically but difficult to modify safely. A local change can affect APIs, data, performance, security, tests, deployment, documentation, and users. Software engineering provides practices for managing this interconnected change.
A useful model is:
Software engineering = technical construction + evidence + coordination + change management.
Essential characteristics¶
Software engineering work includes:
- Understanding the problem and stakeholder goals.
- Managing uncertainty and conflicting requirements.
- Designing interfaces and system structure.
- Implementing and integrating increments.
- Verifying behavior and non-functional qualities.
- Operating, maintaining, and evolving the system.
Product vs. project success¶
A team can deliver on time and still build a product nobody needs. A valuable product can also become unsustainable if its architecture, tests, or operational practices cannot support change. Engineering therefore balances delivery pressure with long-term system health.
Class discussion
Choose a familiar application. List three stakeholders, three quality attributes, and three ways a seemingly small feature could create system-wide effects.