Software engineering is an engineering discipline whose focus is the cost-effective development of high-quality software systems. The emphasis in software engineering is on both words, software and engineering. An engineer is able to build a high-quality product using off-the-shelf components and integrating them under time and budget constraints.

This course will cover key techniques for building reliable software. These include: modeling, design patterns, code refactoring, testing, symbolic execution, as well as static and dynamic program analysis. To gain a deeper understanding of how to apply these techniques in practice, the course will also involve two hands-on projects based on the principles introduced in the lectures.

Project (Part II) Description

Please see the project (part II) description here.

Lectures (Part II)

No. DateContentSlides Exercises Solutions
6 Apr 18, 23Introduction to Analysis PDF PDF PDF PDF
7 Apr 25, April 30Mathematical Background for Analysis PDF PDF PDF
9 May 2Application of AI to Numerical PDF PDF PDF
10 May 7Application of AI to Heap PDF PDF PDF
11 May 14Symbolic Execution for Test Case Generation PDF PDF ZIP PDF
12 May 16Application of Concepts: Analysis of HPC/GPU programs PDF
13 May 23Dynamic Race Detection PDF PDF PDF