Статический инструмент анализа для обнаружения утечки данных тестовых данных в ноутбуках 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 , которые будут установлены в контейнере и используются пирзащиками.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).
Затем он вызывает механизм вывода типа в файле преобразованного кода. С помощью информации о выводе типа он преобразует файл кода в факты Datalog. Окончательный анализ может прочитать, используя FactGenerator из factgen.py .
Наконец, он выполняет анализ данных 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