'

Интерактивная языконезависимая система поиска шаблонов и дубликатов в программном коде

Понравилась презентация – покажи это...





Слайд 0

Интерактивная языконезависимая система поиска шаблонов и дубликатов в программном коде Куделевский Евгений Валерьевич, 545 группа Научный руководитель: к.ф.-м.н. Мосиенко М.А.


Слайд 1

Поиск дубликатов Известная задача программной инженерии Эквивалентность фрагментов кода Особенности конкретного языка Порядок элементов Опциональный синтаксис def int n = 1 int n = 1 def n = 1 Скобки и блоки (a * 3) + 1 a * 3 + 1 if (b) { print s; } if (b) print s; Зависимость от языка программирования Подходы к решению Лексический Синтаксический


Слайд 2

Поиск по шаблону Применения Извлечение знаний Инспекция кода Поиск с помощью регулярных выражений Сложность составления Не всегда возможно описать шаблон


Слайд 3

Structural Search & Replace Шаблоны описываются на языке программирования, в котором предполагается производить поиск $output$.print($text$) Шаблонные переменные Значения – синтаксические единицы языка либо их последовательности if ($condition$) {$statements$} Дополнительные ограничения на значения переменных Замена на другой шаблон $var$ == 0 $var$ == null Связь с задачей поиска дубликатов


Слайд 4

Цель работы Разработка и внедрение программного инструмента поиска, удовлетворяющего следующим критериям: Языконезависимость реализации Расширяемость. Возможность учитывать особенности конкретного языка программирования


Слайд 5

Механизм работы поиска Синтаксический подход Поиск дубликатов Хэширование синтаксического дерева Хэширование блоков Функция стоимости Роли синтаксических конструкций Structural Search Компиляция шаблона Шаблонные переменные заменяются на идентификаторы Контекст разбора


Слайд 6

Результаты: поиск дубликатов в IntelliJ IDEA Имелось средство поиска дубликатов для Java Реализован инструмент поиска для многих других языков Полная поддержка функциональности, которая имелась ранее для Java Языконезависимость. Простой механизм поддержки нового языка Добавлена поддержка языков PHP, Groovy, JavaScript и HTML


Слайд 7

Результаты: Structural Search & Replace Имелась поддержка языков Java, HTML, XML и JavaScript Реализован инструмент поиска для многих других языков Полная поддержка функциональности, которая имелась ранее для Java, HTML, XML и JavaScript Языконезависимость. Простой механизм поддержки нового языка Добавлена поддержка языков PHP, Groovy и CSS


Слайд 8

Возможности расширения Необходимая работа для поддержки нового языка Класс-наследник DuplicatesProfileBase Роли Блоки GroovyDuplicatesProfile: 47 строк Класс-наследник StructuralSearchProfileBase PhpStructuralSearchProfile: 50 строк Описание эквивалентности По умолчанию используется стандартная эквивалентность


Слайд 9

Апробация Фреймворк MediaWiki 47 Мб кода на языках PHP, JavaScript, HTML и XML Поиск дубликатов Время работы: 95 сек. Найдено более 300 дубликатов Поиск шаблонов Время работы: 5 - 30 сек. в зависимости от сложности шаблона


Слайд 10

Результаты работы Разработан и внедрен языконезависимый и расширяемый программный инструмент поиска На основе существующего плагина Structural Search & Replace и движка поиска дубликатов для Java Возможно учитывать особенности конкретного языка Добавлена поддержка Groovy, PHP, JavaScript, CSS, HTML Проведено тестирование на реальном коде


×

HTML:





Ссылка: