Overview
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. | Date | Content | Slides | Exercises | Solutions |
---|---|---|---|---|---|
6 | Apr 18, 23 | Introduction to Analysis | |||
7 | Apr 25, April 30 | Mathematical Background for Analysis | |||
9 | May 2 | Application of AI to Numerical | |||
10 | May 7 | Application of AI to Heap | |||
11 | May 14 | Symbolic Execution for Test Case Generation | |||
12 | May 16 | Application of Concepts: Analysis of HPC/GPU programs | |||
13 | May 23 | Dynamic Race Detection |