[COURSE] Add NJU Software Analysis (#495)

This commit is contained in:
Qi Zhan 2023-08-19 14:56:38 +08:00 committed by GitHub
parent 775f7e49cf
commit 7fb7acb200
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,27 @@
# NJU Software Analysis
## Descriptions
- Offered by: Nanjing University
- Prerequisite: Data Structures and Algorithms, familiar with at least one programming language
- Programming Languages: Java
- Difficulty: 🌟🌟🌟
- Learning Hours: 60 hours
Software Analysis is a course jointly offered by Yue Li and Tian Tan of Nanjing University. It mainly introduces program analysis, which refers to the theory and practice of static analysis. The idea of static analysis is to obtain **approximate** answers about specific properties of the program without running it. This course starts with the abstract syntax tree, control flow graph and intermediate representation, then introduces the theory and practice of data flow analysis and pointer analysis, and finally introduces several advanced topics, such as IFDS.
In my opinion, there are two reasons why this course is worth learning:
- Teaching. Program analysis is generally not easy to get started, but the two teachers are particularly meticulous in their lectures, and they will also guide you step by step through the process of an algorithm. Personally, I think that as long as you listen carefully in class, there is no problem that you can't understand.
- Assignments. The assignments are based on the Java program analysis framework Tai-e created by the teachers. The eight assignments cover a variety of static analysis techniques, including compiler optimization (liveness analysis, constant propagation, dead code detection), basic program analysis (program call graph construction, non/context-sensitive pointer analysis), and the application of program analysis in software security (taint analysis). The course also provides an online evaluation system available to **everyone**, which is suitable for self-study.
The assignments are mainly to implement the pseudo-code algorithms in class, so as to better help you understand the knowledge taught in class. I feel that the difficulty is not particularly high, especially suitable for completing the corresponding experiments after class to test your mastery of the knowledge taught in class. However, it is still challenging to pass all the test cases of each assignment.
## Resources
- Course Website: [Homepage](https://tai-e.pascal-lab.net/lectures.html)
- Course Video: [Bilibili](https://www.bilibili.com/video/BV1b7411K7P4/?spm_id_from=333.999.0.0&vd_source=b58da8cd0259ee873ef3dc2c9aa36d74)
- Course Textbook: None
- Course Assignments: [Homepage](https://tai-e.pascal-lab.net/intro/overview.html)
- OJ: [OJ](https://oj.pascal-lab.net/problem)

View File

@ -0,0 +1,32 @@
# NJU 软件分析
## 课程简介
- 所属大学:南京大学
- 先修要求:数据结构与算法,至少熟悉一门编程语言
- 编程语言Java
- 课程难度:🌟🌟🌟
- 预计学时60 小时
软件分析是由南京大学李樾老师和谭添老师共同开设的一门课程,主要介绍了程序分析,在这里特指静态分析的理论与实践。
静态分析的理念是在不运行程序的情况下,通过分析其源代码和各种表示来获得关于程序特定性质的**近似**结论。
这门课从程序的抽象语法树,控制流图和中间表示这些基础知识开始介绍,再到数据流分析和指针分析的理论与实践,最后介绍了若干高级主题,如 IFDS 等。
这门课程值得学习的原因在我看来有两部分:
- 授课。程序分析一般来说并不太好上手,但两位老师讲的尤其细致入微,还会在课上带你一步一步走某一个算法的流程。个人认为只要认真听课,对于课上的知识不存在学不懂或者讲的不清楚的问题。
- 作业。作业围绕其自创的 Java 程序分析框架太阿进行。
八个作业涵盖多种静态分析技术,包括编译优化(活跃变量分析、常量传播、死代码检测),基础程序分析(程序调用图构建、非/上下文敏感指针分析),以及程序分析在软件安全性的应用(污点分析)。
课程同时还提供**所有人**可用的在线评测系统,适合自学。
作业主要是实现课上的伪代码算法,从而更好的帮助你理解课上所讲的知识。我感觉难度并不是特别大,特别适合在上完课后完成对应的实验来检验自己对课上知识的掌握程度。
不过想要通过每个作业的所有测试点还是很有难度的。
## 课程资源
- 课程网站:[主页](https://tai-e.pascal-lab.net/lectures.html)
- 课程视频:[Bilibili](https://www.bilibili.com/video/BV1b7411K7P4/?spm_id_from=333.999.0.0&vd_source=b58da8cd0259ee873ef3dc2c9aa36d74)
- 课程教材:无
- 课程作业:[实验主页](https://tai-e.pascal-lab.net/intro/overview.html)
- 在线评测: [OJ](https://oj.pascal-lab.net/problem)

View File

@ -208,6 +208,7 @@ nav:
- "CMU 15-799: Special Topics in Database Systems": "数据库系统/15799.md"
- 编译原理:
- "Stanford CS143: Compilers": "编译原理/CS143.md"
- "NJU 软件分析": "编译原理/NJU-SoftwareAnalysis.md"
- 程序语言设计:
- "Stanford CS242: Programming Languages": "程序语言设计/CS242.md"
- 计算机图形学: