# PKU Software Analysis

## Descriptions

- Offered by: Peking University
- Prerequisite: Data Structures and Algorithms, familiar with at least one programming language
- Programming Languages: Java, Python
- Difficulty: 🌟🌟🌟🌟
- Learning Hours: 60 hours

Software Analysis is a course offered by Prof. Yingfei Xiong from Peking University. The course mainly covers the following topics:

1. Program analysis based on abstract interpretation (data flow analysis, inter-procedural analysis, pointer analysis, abstract interpretation, etc.)
2. Program analysis based on constraint solving (SAT, SMT, symbolic execution, etc.)
3. Software analysis applications (program synthesis, bug localization, bug repair, etc.)

Compared with the [Software Analysis course of Nanjing University](./NJU-SoftwareAnalysis.en.md), this course covers **more comprehensive** theoretical and practical content of program analysis, and is more difficult. My main way of learning this course is to listen to the course. Prof. Xiong's lectures are very interesting. In addition to the theoretical content, he occasionally tells some academic related stories :)

The course project of this experiment is to implement a pointer analysis system on Java and a program synthesis tool, which is also a very interesting practice.

## Resources

- Course Website: [Homepage](https://xiongyingfei.github.io/SA/2020/main.htm) This is the course homepage of 2020. More course content can be found on [Prof. Xiong's homepage](https://xiongyingfei.github.io/).
- Course Video: [2020](https://liveclass.org.cn/cloudCourse/#/courseDetail/8mI06L2eRqk8GcsW)
- Course Textbook: None
