Home / Teaching / 04834580 Software Engineering (Honor Track)

March 2026–June 2026

Monday, class 10–11·Thursday, class 3–4·一教303

Teaching assistants: Yihan Dai, Dimitris Bouras

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, expose students to contemporary software engineering research.

March 2026
2
Mon
5
Thu
lecture

Meet with your team to choose a development process. Agree on communication channels, meeting cadence, and how you will plan and track progress.

9
Mon
lecture

Access coursework repository, discuss branching model and merge policy with your teammates.

12
Thu
lecture Q&A session

Optionally, optimize your Dockerfile, and setup GitHub actions.

16
Mon
lecture student presentations

Experiment with Mermaid diagrams to model important parts of your project.

19
Thu
lecture Q&A session

Restructure your code according to studied design principles.

23
Mon
lecture student presentations

Identify relevant abstraction mechanisms in your language of choice to support design principles.

26
Thu
lecture Q&A session

Apply Visitor design pattern to your project.

30
Mon
lecture student presentations

Apply appropriate creational and structural patterns to your code.

April 2026
2
Thu
lecture Q&A session

Apply appropriate behavioral patterns to your code.

6
Mon
No class
9
Thu
lecture Q&A session
  • Parsing
  • Example: Java + ANTRL
  • Example: Python + Lark
  • Example: Recursive Descent
  • Example: Parser Combinators

Implement a parser of your choice.

13
Mon
lecture student presentations
  • Functional Programming Patterns

Optionally, apply functional programming patterns in your code.

16
Thu
lecture Q&A session
  • Testing
  • xUnit

Write unit tests for your project.

20
Mon
lecture student presentations
  • Property-Based Testing
  • Symbolic Execution

Optionally, apply property-based testing and symbolic execution to test your project

23
Thu
lecture Q&A session
  • Dynamic Analysis & Fuzzing

Optionally, apply fuzzing to your project.

27
Mon
lecture student presentations
  • Debugging
  • Error Handling

Design robust error handling for your project.

30
Thu
lecture Q&A session
  • Mutation Testing
  • Metamorphic Testing

Optionally, apply mutation and metamorphic testing to your project.

May 2026
4
Mon
No class
7
Thu
lecture Q&A session
  • Code Smells & Anti-Patterns

Analyze your code for the presence of smells and anti-patterns.

11
Mon
lecture student presentations
  • Code Style & Documentation

Maintain coding style compliance and write system documentation where necessary.

14
Thu
lecture Q&A session
  • UNIX Environment
18
Mon
lecture student presentations
  • Software Security
21
Thu
lecture Q&A session
  • LLMs for Code
25
Mon
lecture student presentations
  • Coding Agents
28
Thu
lecture Q&A session
  • Program Analysis
  • Abstract Interpretation
June 2026
1
Mon
lecture student presentations
  • Formal Verification
4
Thu
lecture Q&A session
  • Data Flow Analysis
8
Mon
lecture student presentations
  • Program Analysis With Datalog
11
Thu
lecture Q&A session
  • AI4Code Research Overview