This course aims to present software engineering as a body of knowledge. The course is designed to present software engineering concepts and principles in parallel with the Software Development Life Cycle (SDLC). The course will begin with an introduction to software engineering, giving students a definition of this body of knowledge, as well as a discussion of the main methodologies of software engineering including agile methods i.e., XP. Students will then learn about the five major phases of the SDLC: requirements gathering and analysis, design, coding/implementation, validation, and evolution. This includes software modelling using Unified Modelling Language (UML), a standardized general-purpose modelling language used to create visual models of object-oriented software, for requirements gathering and analysis, and design. Students will also learn about project management and quality management for the purpose of delivering high-quality software that satisfies customer needs and is within budget and schedule. Delivery will be by in-class lectures, recorded lectures, practical sessions in the lab, case studies from different domains (i.e., healthcare domain), and assignments. Assignments will include a term project illustrative of professional practice in developing computer information systems. One or two guest speakers with many years of experience in software engineering will be invited to share their first-hand experience with students.