Об универсальном анализе кода или Зачем нам ещё один анализатор, как его можно сделать и куда применять презентация

Содержание

Слайд 2

Зачем SAST? 15.05.2019 Никита Субботин

Зачем SAST?

15.05.2019

Никита Субботин

Слайд 3

Ладно, зачем ещё один? 15.05.2019 Никита Субботин

Ладно, зачем ещё один?

15.05.2019

Никита Субботин

Слайд 4

SQL-инъекции в 2к17?! 15.05.2019 Никита Субботин

SQL-инъекции в 2к17?!

15.05.2019

Никита Субботин

Слайд 5

А языки правда отличаются? Java String query = "SELECT *

А языки правда отличаются?

Java
String query = "SELECT * FROM user WHERE

name = " + name;
Python
query = "SELECT * FROM user WHERE name = " + name
C++
std::string query = "SELECT * FROM user WHERE name = " + name;
PHP
$query = "SELECT * FROM user WHERE name = " . $name;

15.05.2019

Никита Субботин

Спойлер: иногда не очень

Слайд 6

Классика 15.05.2019 Никита Субботин

Классика

15.05.2019

Никита Субботин

Слайд 7

15.05.2019 Никита Субботин

15.05.2019

Никита Субботин

Слайд 8

Сужаем область Цель – расширение класса задач модуля PT.PM путем

Сужаем область

Цель – расширение класса задач модуля PT.PM путем интеграции подсистемы

анализа языка Python.
Почему Python:
популярный (топы: Tiobe, PYPL, RedMonk)
простой (КС-грамматика по Хомскому)
могу, умею, практикую ☺

15.05.2019

Никита Субботин

Слайд 9

Что и как делаем? - 1 15.05.2019 Никита Субботин Как:

Что и как делаем? - 1

15.05.2019

Никита Субботин

Как: ANTLR4 +
репозиторий

antrl4-grammars +
документация Python +
официальная грамматика Python

Looks good!

Слайд 10

Что и как делаем? - 2 15.05.2019 Никита Субботин Как:

Что и как делаем? - 2

15.05.2019

Никита Субботин

Как: PT.PM API +

C#-парсер +
руки

Still looks good!

Слайд 11

Но… - 1 15.05.2019 Никита Субботин Источник: https://docs.python.org/3/reference/grammar.html

Но… - 1

15.05.2019

Никита Субботин

Источник: https://docs.python.org/3/reference/grammar.html

Слайд 12

Но… - 2 decorated : decorators (classdef | funcdef |

Но… - 2

decorated
: decorators (classdef | funcdef | async_funcdef)

here>
compound_stmt : if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated // added later | async_stmt // added even later

15.05.2019

Никита Субботин

Слайд 13

Но… - 3 15.05.2019 Никита Субботин VS.

Но… - 3

15.05.2019

Никита Субботин

VS.

Слайд 14

Но… - n INDENTS & DEDENTS Неэффективные алгоритмы Мало документации

Но… - n

INDENTS & DEDENTS
Неэффективные алгоритмы
Мало документации по ANTLR4 в свободном

доступе
Устаревшая документация на PT.PM
Меняющийся API PT.PM
И так далее …

15.05.2019

Никита Субботин

Слайд 15

Так что в итоге? Полный рефакторинг грамматики Порт парсера в

Так что в итоге?

Полный рефакторинг грамматики
Порт парсера в C#
Порт AST в

UST
Полное покрытие грамматики тестами
Несколько тестов на матчинг шаблонов

15.05.2019

Никита Субботин

Слайд 16

Что дальше? Увеличение базы шаблонов Рефакторинг кода Документация Покрытие шаблонов

Что дальше?

Увеличение базы шаблонов
Рефакторинг кода
Документация
Покрытие шаблонов тестами
Фикс документации Python

15.05.2019

Никита Субботин

Имя файла: Об-универсальном-анализе-кода-или-Зачем-нам-ещё-один-анализатор,-как-его-можно-сделать-и-куда-применять.pptx
Количество просмотров: 35
Количество скачиваний: 0