This course offers an introduction to software engineering, spanning a broad array of topics and employing a problem-based learning approach. Central to the course is a practical group project, where students apply modern software development principles and tools. The course discusses the software development lifecycle, with an exploration of Agile methodologies and DevOps practices. Students will gain a foundation in software design principles, such as abstraction mechanisms and design patterns, and how they are realized in procedural, object-oriented and functional programming paradigms. A strong emphasis is placed on quality assurance, equipping students with robust techniques for software testing, debugging, and maintaining high code reliability. The course examines program analysis and verification through both static and dynamic analysis methods. Advanced topics, such as AI-driven development tools and automated program repair, expose students to contemporary software engineering research.

Date Materials Assignment
February 17, 2025 Form groups of three by February 24
February 20, 2025 Development Lifecycle, Agile (tentative)
February 24, 2025 Git (tentative), Q&A
February 27, 2025 GitHub, Continuous Integration (tentative)
March 3, 2025 Docker (tentative), Q&A
March 6, 2025 Modelling (tentative)
March 10, 2025 Design Principles (tentative), Q&A
March 13, 2025 Abstraction Mechanisms (tentative)
March 17, 2025 Design Patterns (tentative), Q&A
March 20, 2025 Design Patterns Continued (tentative)
March 24, 2025 Parsing (tentative), Q&A
March 27, 2025 Functional Patterns (tentative)
March 31, 2025 Testing (tentative), Q&A
April 3, 2025 xUnit (tentative)
April 7, 2025 Property-based Testing, Mutation Testing (tentative), Q&A
April 10, 2025 Symbolic Execution (tentative)
April 14, 2025 Fuzzing (tentative), Q&A
April 17, 2025 Debugging (tentative)
April 21, 2025 Error Handling (tentative), Q&A
April 24, 2025 Code Smells, Anti-Patterns (tentative)
April 28, 2025 Code Style, Documentation (tentative), Q&A
May 1, 2025 -
May 5, 2025 -
May 8, 2025 LLM in Software Engineering (tentative)
May 12, 2025 Invited Lecture (tentative), Q&A
May 15, 2025 Automated Program Repair (tentative)
May 19, 2025 LLM Agents (tentative), Q&A
May 22, 2025 Static Program Analysis (tentative)
May 26, 2025 Static Program Analysis Continued (tentative), Q&A
May 29, 2025 Dynamic Program Analysis (tentative)
June 2, 2025 Verification (tentative), Q&A
June 6, 2025 Software Engineering Research (tentative)