Uma ferramenta de análise estática para detectar vazamento de dados de teste em notebooks Python
Esta é a ferramenta do artigo ASE'22: vazamento de dados nos notebooks: detecção estática e melhores processos. Uma demonstração online também está disponível. Para nossos scripts e materiais de avaliação, consulte este repositório.
git submodule update --init --recursive (consulte o submodule para criar o projeto).python3 -m src.main /path/to/filepython3 -m src.run /path/to/dir-h . git submodule update --init --recursive .requirements.txt , que serão instalados no contêiner e usados pelo Pyright.docker build -t leakage-analysis .docker run -v /path/to/dir:/path/to/dir leakage-analysis /path/to/dir/$FILE -o . Todos os notebooks a serem analisados devem ser convertidos em arquivos python e armazenados em /path/to/dir . Para um determinado arquivo de entrada test.py , um arquivo html de saída test.html será gerado se -o sinalizador -o for especificado.
Em test.html , mostramos os resultados da análise ao lado do código de entrada. Uma tabela de resumo sobre problemas de vazamento detectada é mostrada na parte superior. Os usuários também podem utilizar os botões interativos para destacar o código relevante e navegar por diferentes segmentos de código.
Dado um arquivo python, src/main.py primeiro analisa a entrada no AST. Em seguida, alimenta a AST a uma instância globalColector (de global_collector.py ) que coleta variáveis globais que não poderíamos renomear em transformações posteriores, que ignoraremos mais adiante.
Em seguida, ele alimenta AST para uma instância do CodeTransformer (do irgen.py ) que traduz o código Python original para uma versão mais simples que 1) divide declarações complexas para múltiplas mais simples e 2) traduz o código para o formulário estático de atribuição única (SSA).
Em seguida, ele chama o mecanismo de inferência do tipo no arquivo de código transformado. Com as informações de inferência do tipo, ele converte o arquivo de código em fatos do Datalog que a análise final poderia ler, usando o FactGenerator do factgen.py .
Finalmente, ele executa a análise Datalog ( main.dl ) em fatos e saídas gerados resulta no mesmo diretório.
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