This course provides a general introduction to software engineering. It introduces concepts such as software processes and agile methods, and essential software development activities, from initial specification through to system maintenance. The course also includes practice in lab to express the role of UML for visualizing, specifying, constructing, and documenting software system. Project management and professional software engineering practice will also be covered. Case studies provide practical examples for many of these concepts.