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 | |||
February 24, 2025 |
|
Finilize group selection, access coursework repository, plan team collaboration. | |
February 27, 2025 | Discuss branching model and merge policy with your teammates. Optionally, setup GitHub actions. | ||
March 3, 2025 |
|
||
March 6, 2025 | Experiment with Mermaid diagrams to model important parts of your project. | ||
March 10, 2025 | Restructure your code according to studied design principles. | ||
March 13, 2025 | Identify relevant abstraction mechanisms in your langauge of choice to support design principles. | ||
March 17, 2025 | Apply appropriate creational and structural patterns to your code. | ||
March 20, 2025 | Apply appropriate behavioral patterns to your code. | ||
March 24, 2025 | Implement a parser of your choice. | ||
March 27, 2025 | Optionally, apply functional programming patterns in your code. | ||
March 31, 2025 | Create unit tests for your project. | ||
April 3, 2025 | Optionally, apply property-based testing and symbolic execution to test your project. | ||
April 7, 2025 | Optionally, apply fuzzing to your project. | ||
April 10, 2025 | |||
April 14, 2025 |
|
Optionally, apply mutation testing to your project. | |
April 17, 2025 | Analyze your code for the presence of smells and anti-patterns. | ||
April 21, 2025 | Maintain coding style compliance and write system documentation where necessary. | ||
April 24, 2025 | |||
April 28, 2025 | Software Security (tentative), Q&A | ||
May 1, 2025 | - | ||
May 5, 2025 | - | ||
May 8, 2025 | AI in Software Engineering (tentative) | ||
May 12, 2025 | Prof. Earl Barr's Invited Lecture, 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 | Verification (tentative) | ||
June 2, 2025 | Verification Continued (tentative), Q&A | ||
June 6, 2025 | Software Engineering Research (tentative) |