Overview of Tai-e Assignments
Our key goal is to let students comprehend practical program analysis techniques, and to accomplish this target, we have designed and implemented an easy-to-learn and easy-to-use program analysis framework called Tai-e (太阿) for real-world Java programs. On top of Tai-e, eight programming assignments are designed to cover different program analysis topics introduced in the lectures of "Static Program Analysis".
The assignments include program analyses for compiler optimization (e.g., live variables analysis, constant propagation, dead code detection), fundamental program analyses (e.g., call graph construction, context-insensitive and various kinds of context-sensitive pointer/alias analyses), and client analysis for program security (e.g., taint analysis).
Compared with existing popular program analysis frameworks for Java, such as Soot and Wala, Tai-e is easier to learn and understand. It offers concise IR, clean and easy-to-extend interfaces, plentiful and well-organized analysis algorithms, intuitive framework structure, and instructive documentation. Please note that there are two versions of Tai-e, one for education and the other for research. Compared with the research version, the educational one is easier for students to understand the assignments and the corresponding code, and thus our assignments are built on top of the educational Tai-e. (We will release the research version of Tai-e, which provides more analyses with better designs and performance, after we finish preparing its documentation).
We expect students to benefit not only from the assignments themselves, but also from the related framework code of Tai-e, for understanding how program analysis techniques are implemented in practice; in addition, more knowledge (algorithms and skills) that are not covered in the lectures will be introduced in the assignments. The overview of the assignments is as follows.