leakage analysis
1.0.0
一种静态分析工具,用于检测Python笔记本中的测试数据泄漏
这是ASE'22论文的工具:笔记本中的数据泄漏:静态检测和更好的过程。还可以使用在线演示。有关我们的评估脚本和材料,请参阅此仓库。
git submodule update --init --recursive (请参阅子模块以构建项目)。python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h标志找到更多信息。 git submodule update --init --recursive 。requirements.txt ,将安装在容器中并由Pyright使用。docker build -t leakage-analysis .docker run -v /path/to/dir:/path/to/dir leakage-analysis /path/to/dir/$FILE -o 。所有要分析的笔记本都应转换为Python文件,并存储在/path/to/dir中。 对于给定的输入文件test.py ,如果指定-o标志,将生成输出html文件test.html 。
在test.html中,我们与输入代码一起显示了分析结果。顶部显示了有关检测到的泄漏问题的摘要表。用户还可以利用交互式按钮突出显示相关代码并浏览不同的代码段。
给定一个Python文件, src/main.py首先将输入解析为AST。然后,它将AST馈送到一个GlobalCollector实例(来自global_collector.py ),该实例收集了我们无法在以后的转换中重命名的全局变量,我们将稍后忽略。
接下来,它将AST馈送到CodeTransFormer实例(来自irgen.py ),该实例将原始Python代码转换为更简单的版本,该版本将复杂语句分解为多个简单的语句,而2)将代码转换为静态单分配(SSA)表单。
然后,它调用转换的代码文件上的类型推理引擎。使用类型推理信息,它将代码文件转换为DATALOG事实,最终分析可以使用factgen.py的Factgenerator读取最终分析。
最后,它对生成的事实执行数据分析( main.dl ),并且输出导致相同的目录。
src
├── factgen.py: convert transformed code to datalog facts
├── global_collector.py: collect global variables
├── __init__.py
├── irgen.py: transform code to simpler SSA form
├── main.dl: main datalog analysis that analyzes leakage
├── main.py: run analysis on a single file
├── render.py: output a html file based on analysis results and original code
├── run.py: run analysis on multiple files
└── scope.py: manage variable scopes for renaming purposes