Software Engineering Fundamentals
1Introduction
This lecture explains how to manage software quality and changeability throughout the lifecycle from requirements to operation and maintenance.
Producing a computed result is only one aspect of software quality. A system must also be evaluated for conformance to user requirements, reliability under failure, security against attacks, and ease of change. Software engineering treats these concerns through systematic development and operational activities rather than as isolated implementation techniques.
2Requirements and Acceptance Criteria
A
- A
functional requirement specifies behavior or functionality that the system must provide. - A
non-functional requirement specifies quality or constraints such as performance, availability, security, and usability.
An ambiguous statement such as “the system must be fast” does not determine when implementation is complete. An
3Design and Localization of Change
An
4Testing and Levels of Verification
- A
unit test verifies a small unit such as a function or module. - An
integration test verifies interaction across boundaries such as modules, databases, or networks. - A system test verifies the integrated system against system requirements.
- An
acceptance test evaluates acceptance criteria from the perspective of a user or customer.
A change that damages existing behavior causes a
5Change Management, Operation, and Maintenance
Prioritizing a short-term deadline can leave design problems that increase the cost of future change. This future cost can be described as
6Quality Attributes and Trade-offs
Quality comprises multiple attributes, including functional suitability, reliability, performance efficiency, usability, security, and maintainability. These attributes cannot all be maximized without limit. Redundancy, for example, can improve availability while making configuration and operation more complex. A design decision makes the relevant requirements, risks, and costs explicit and establishes an agreed trade-off.
7Example: A Database-Backed Course Registration System
In a course registration system, “a student can register for a course” is a functional requirement. “Do not permit registration beyond capacity” and “prevent duplicate registration” can be verified as acceptance criteria. The design separates the user interface, registration rules, and SQL-based persistence as distinct responsibilities.
Unit tests verify registration rules, integration tests verify transactions between the application and database, and acceptance tests verify the user's workflow. When a requirement change introduces a lottery, separated responsibilities and regression tests clarify the affected scope.
8Key Points
- Requirements and acceptance criteria provide a shared basis for implementation and testing.
- Design defines responsibilities and interfaces to localize the effects of change.
- Testing detects defects but does not generally prove their absence.
- Version control, review, and continuous integration track change and detect integration problems early.
- Trade-offs among quality attributes are decided according to requirements, risks, and costs.
9Next Lecture
Systems spanning multiple devices or sites also require mechanisms that transmit information as signals. The next portal addresses signals, noise, modulation, and other foundations of communication.
data/lecture/information/communications/communications-engineering-portal.lecture.n.md