Ein statisches Analyse -Tool zum Erkennen von Testdatenleckagen in Python -Notizbüchern
Dies ist das Tool des ASE'22 -Papiers: Datenleckage in Notebooks: statische Erkennung und bessere Prozesse. Eine Online -Demo ist ebenfalls verfügbar. Für unsere Bewertungsskripte und -materialien finden Sie dieses Repo.
git submodule update --init --recursive (siehe Submodule zum Erstellen des Projekts).python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h gefunden werden. git submodule update --init --recursive .requirements.txt , die im Container installiert und von Pyright verwendet werden.docker build -t leakage-analysis .docker run -v /path/to/dir:/path/to/dir leakage-analysis /path/to/dir/$FILE -o . Alle zu analysierten Notizbücher sollten in Python-Dateien konvertiert und in /path/to/dir gespeichert werden. Für einen bestimmten Eingabedatei test.py wird ein Ausgang HTML -Datei test.html generiert, wenn das Flag -o -Flag angegeben ist.
In test.html zeigen wir die Analyseergebnisse neben Eingabescode. Eine zusammenfassende Tabelle zu erkannten Leckageproblemen wird oben angezeigt. Benutzer können auch die interaktiven Schaltflächen verwenden, um den relevanten Code hervorzuheben und durch verschiedene Codesegmente zu navigieren.
Bei einer Python -Datei analysiert src/main.py die Eingabe zuerst in AST. Anschließend wird AST zu einer GlobalCollector -Instanz (von global_collector.py ) eingeführt, die globale Variablen sammelt, die wir in späteren Transformationen nicht umbenennen konnten, die wir später ignorieren werden.
Als nächstes füttert es AST zu einer CodetRansformer -Instanz (von irgen.py ), die den ursprünglichen Python -Code in eine einfachere Version übersetzt, die 1) komplexe Anweisungen auf mehrere einfachere, und 2) den Code in das SSA -Formular (SSA) übersetzt.
Anschließend ruft es die Typ -Inferenz -Engine in der transformierten Codedatei auf. Mit Informationen von Typ -Inferenz werden die Codedatei in Datalog -Fakten umgewandelt, die die endgültige Analyse unter Verwendung von FactGenerator von factgen.py unter Verwendung des Fakteners konvertiert.
Schließlich führt es die Datalog -Analyse ( main.dl ) für generierte Fakten und Ausgänge aus.
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