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
8 April 8Introduction to Analysis PDF PDF PDF PDF
9 April 15Mathematical Background for Analysis PDF PDF PDF
10 April 29Applying the Theory: Intervals PDF PDF PDF
11 May 6Alias and Pointer Analysis PDF PDF PDF
12 May 8Application of Concepts: Analysis of HPC/GPU programs PDF PDF PDF
13 May 20Symbolic Execution for Testing PDF PDF ZIP PDF
14 May 22VerX: Combining AI with Symbolic Execution for Smart Contract Security PDF

Project (Part II)

The project description can be found here.