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コードをより単純なバージョンに変換する1)複雑なステートメントを複数のより単純なステートメントに分割し、2)コードを静的シングル割り当て(SSA)フォームに変換します。
次に、変換されたコードファイルのタイプ推論エンジンを呼び出します。タイプの推論情報を使用すると、 factgen.pyのFactgeneratorを使用して、コードファイルを最終分析で読み取ることができるDatalog Factに変換します。
最後に、同じディレクトリで生成されたファクトと出力結果でDatalog分析( 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