Software Engineering Fundamentals and the SDLC
Software engineering applies systematic, disciplined, quantifiable approaches to development, operation, and maintenance. The software development life cycle (SDLC) is a framework of phases: requirements gathering, analysis, design, implementation, testing, deployment, and maintenance. Candidates must know the major models: waterfall (sequential, document-driven, inflexible to change), iterative (repeats cycles, e.g., spiral with risk analysis), and agile (incremental, collaborative, responsive to change, e.g., Scrum with sprints and roles). A trap is confusing the waterfall model with the V-model (which emphasises verification and validation at each stage). Another trap is thinking agile means no planning; agile uses adaptive planning. Also, know the difference between verification (building the product right) and validation (building the right product). Requirements must be functional (what the system does) and non-functional (how well it does it, e.g., performance, security, usability). A worked example: for a library book-loan system, a functional requirement is 'the system shall allow a member to borrow up to five books'; a non-functional requirement is 'the system shall respond to a search query within two seconds'. Rule of thumb: if a requirement describes a quality attribute or constraint, it is non-functional. Remember that maintenance often consumes the largest portion of the life cycle cost.