Una herramienta de análisis estático para detectar la fuga de datos de prueba en los cuadernos de Python
Esta es la herramienta del documento ASE'22: fuga de datos en cuadernos: detección estática y mejores procesos. Una demostración en línea también está disponible. Para nuestros scripts y materiales de evaluación, consulte este repositorio.
git submodule update --init --recursive (consulte el submódulo para construir el proyecto).python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h . git submodule update --init --recursive .requirements.txt , que se instalarán en el contenedor y usará Pyright.docker build -t leakage-analysis .docker run -v /path/to/dir:/path/to/dir leakage-analysis /path/to/dir/$FILE -o . Todos los cuadernos para ser analizados deben convertirse en archivos de Python y almacenarse en /path/to/dir . Para -o archivo de entrada test.py test.html
En test.html , mostramos los resultados del análisis junto con el código de entrada. En la parte superior se muestra una tabla de resumen sobre problemas de fuga detectados. Los usuarios también podrían utilizar los botones interactivos para resaltar el código relevante y navegar a través de diferentes segmentos de código.
Dado un archivo de Python, src/main.py primero analiza la entrada a AST. Luego alimenta AST a una instancia de GlobalCollector (de global_collector.py ) que recopila variables globales que no pudimos cambiar el nombre en transformaciones posteriores, que ignoraremos más adelante.
A continuación, alimenta AST a una instancia de Codetransformer (de irgen.py ) que traduce el código Python original a una versión más simple que 1) desglose las declaraciones complejas a múltiples más simples, y 2) traduce el código al formulario de asignación única estática (SSA).
Luego llama al tipo de motor de inferencia de tipo en el archivo de código transformado. Con la información de inferencia de tipo, convierte el archivo de código en datos de datos que el análisis final podría leer, utilizando FactGenerator de factgen.py .
Finalmente, realiza el análisis de datos ( main.dl ) en los resultados generados y salidas en el mismo directorio.
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