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.

Lectures (Part II)

No. DateContentSlides Exercises Solutions
6 Introduction to Analysis PDF PDF PDF PDF
7 Mathematical Background for Analysis PDF PDF PDF
9 Application of AI to Numerical PDF PDF PDF
10 Application of AI to Heap PDF PDF PDF
11 Symbolic Execution for Test Case Generation PDF PDF ZIP PDF
12 Application of Concepts: Analysis of HPC/GPU programs PDF
13 Dynamic Race Detection PDF PDF PDF