Сделай Сам Свою Работу на 5

Средства поиска на основе шаблонов





Средства поиска на основе шаблонов в качестве входных данных получают исходный код на языке программирования и запрос на языке шаблонов (образцов). На выходе выдается информация о том, какие строки исходного программного кода соответствуют спецификации шаблона.

В запросе можно также указать поиск последовательности операторов. В таком случае запрос понимается как поиск указанной последовательности операторов в любом месте исследуемого кода. Вся последовательность воспринимается как один запрос.

Для того чтобы специфицировать запрос к исходному коду, используется язык образцов. Язык образцов для спецификации запроса является расширением базового языка. Расширения включают набор специальных символов, которые используются для замены синтаксических сущностей базового языка. Без учета дополнительных расширений запрос может состоять из участка программы для осуществления конкретного поиска по исходному тексту. Когда же спецификация запроса включает дополнительный символ или символы, то они играют роль абстрактных шаблонов. Шаблоны потенциально могут быть заменены реальными фрагментами кода в соответствии с семантикой того или иного символа.



Специальные символы языка запросов применяются для замены синтаксических сущностей, таких как:

  • декларация произвольной переменной с указанием произвольного типа;
  • произвольный идентификатор, константа или выражение;
  • произвольный формальный параметр или группа формальных параметров;
  • произвольный оператор или группа операторов.

Запросы могут быть следующих типов:

  • поиск декларации (как локальной, так и глобальной);
  • поиск определения функции, спецификация кода которой описана в запросе;
  • поиск группы операторов в произвольном участке кода.

Для примера приведено несколько конструкций запросов. В качестве базового языка выбран язык С.

  • Найти все операторы цикла while, в которых происходит сравнение какого-нибудь выражения на неравенство его нулю. Запрос будет выглядеть так: while (# != 0) @. На основе данного запроса система производит поиск всех операторов while, удовлетворяющих вышесказанному условию, на любом уровне вложенности. Знак # - это шаблон для произвольного выражения, а @ - шаблон для произвольного оператора. Такой запрос может оказаться полезным, если необходимо выявить все конструкции в программе с таким условием, с целью их замены на while (#) @.
  • Найти все вхождения трех подряд идущих операторов if. Запрос будет выглядеть так: if (#) @ if (#} @ if (#) @. Целью такого запроса может стать локализация потенциальных кандидатов на преобразование последовательных операторов if в оператор switch.
  • Найти все вхождения оператора if, где в качестве условия возможно ошибочное использование оператора присваивания = вместо равенства ==. Запрос будет выглядеть так: if (# = #) @. Целью такого запроса может стать локализация часто встречающейся ошибки в коде на языке С, когда в выражениях сравнения используется оператор присваивания.
  • Найти последовательности операторов, в которых три или более операторов if встречаются подряд, причем возможно их разделение другими операторами. Запрос будет выглядеть так: if (#) @ @* if (#) @ @* if (#) @. Целью такого поиска может стать локализация участков с большой цикломатической сложностью - в данном примере имеется восемь различных путей управления через данную последовательность операторов.

Обозреватели и базы данных программ



Обозреватели генерируют базу данных программы, куда в качестве сущностей включаются имена файлов, имена функций, переменные и другие сущности программы с хорошо определенными отношениями между ними. Чтобы получить информацию о том, какая функция вызывает определенную процедуру или глобальные данные, используемые какой-то определенной Функцией, могут быть сделаны запросы к этой базе данных программы.



Хотя такие средства очень мощны и полезны, все же они поддерживают ограниченный диапазон запросов, которые базируются на концепции "сущность-отношение-атрибут". При таком рассмотрении отсутствует структурность, присущая исходному программному коду.

Примеры инструментов, разработанных для выполнения запросов к исходному коду и упрощающих просмотр текста:

  • Omega [Linton 1984];
  • CIA [Chert, Nishimoto, Ramamoorthy 1990] и CIA++ [Grass 1992];
  • Microscope [Ambras, O'Day 1987].

Средства обнаружения плагиата

Инструменты для определения плагиата в программах (особенно академических) в основном базируются на метриках Холстеда. Другая категория таких инструментов использует статическое дерево исполнения (граф потока управления) программы, чтобы составить "отпечаток пальцев" программы. Далее дерево исполнения анализируется, и на основе анализа делаются выводы о том, была ли программа заимствована. Основное ограничение таких систем состоит в том, что сравнение программ в них зависит от статистической информации.

В работе (http://www.iam.unibe.ch/~scg/) представлено средство обнаружения повторяющихся участков кода. В нем используется техника абстракции от языка. Это осуществляется с помощью подхода, названного авторами визуализацией кода. Он основан на первоначальном преобразовании кода к удобному для дальнейшего исследования виду. Данный подход базируется на преобразовании текста, а не на синтаксических сущностях.

Текстовые редакторы

Текстовый редактор - программа, позволяющая вводить в файл символьную информацию и модифицировать ее. Можно выделить несколько разновидностей текстовых редакторов.

  • Строковые редакторы, позволяющие смотреть и редактировать текст только на одной строке. При этом текст воспринимается как последовательность строк, разделенных символом "конец строки".
  • Потоковые редакторы, позволяющие воспринимать текст в виде потока символов. При этом признаки конца строки также являются символами.
  • Экранные редакторы, позволяющие перемещать по тексту окно, в котором можно передвигать курсор и устанавливать его в нужные позиции. Многие экранные текстовые редакторы позволяют видеть на экране текст в том виде, в котором он будет напечатан (концепция What You See Is What You Get - WYSIWYG).

Сейчас распространены универсальные текстовые редакторы, которые избыточны для большинства конкретных задач. Рассмотрим несколько уровней текстовых редакторов, каждый из которых обладает дополнительными возможностями по сравнению с предыдущими:

1. Редакторы для составления программ. Их основные возможности - поддержка средств работы с блоками текста, поиск и замена по файлу.

2. Редакторы для подготовки статей без графики и сложных формул. Добавляются возможности форматирования абзацев, расстановки переносов и разбиения текста на страницы.

3. Редакторы для подготовки статей со сложными рисунками и формулами. Добавляются возможности включения графики в текст, поддержки многих кодировок и управления шрифтами.

4. Редакторы для подготовки книг и журналов. Добавляются возможности работы с большими файлами и сбор оглавления.

5. Редакторы для подготовки научно-технической документации. Добавляются возможности поддержки" листов изменений, колонтитулов и предметных указателей.

Редакторы для составления программ могут учитывать синтаксическую структуру обрабатываемой программы и выполнять дополнительный анализ и проверку (см. разд. 5.3.1.7).

Вот несколько наиболее известных и популярных текстовых редакторов:

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.