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