
- •Содержание
- •Введение Актуальность магистерской диссертации
- •Понятие плагиата
- •Специфика понятия «плагиат» в программировании: окончательный вывод о заимствовании делает человек
- •Постановка задачи
- •1.1 Необходимость дополнительной проверки на основе анализа структурного анализа кодов
- •1.2 Общая схема работы модулей инструментальной системы поиска плагиата
- •Теоретические основы поиска плагиата в исходных кодах программ
- •2.1 Классификация методов поиска плагиата в программировании
- •2.2 Атрибутные методы поиска плагиата
- •2.3 Структурные методы поиска плагиата
- •2.3.1 Строковое выравнивание
- •2.3.2 Метод поиска на xml-представлении
- •2.3.3 Использование приближения Колмогоровской сложности
- •2.3.4 Метод идентификационных меток
- •2.3.5 Нейросетевые методы обнаружения плагиата
- •2.4 Другие методы
- •Методы поиска плагиата в произвольных текстах
- •3.1 Локальные методы
- •3.1.2 Методы на основе меры tf
- •3.1.3 Методы, использующие понятия шинглов
- •3.1.4 Методы, использующие семантические сети
- •3.2 Глобальные методы
- •3.2.1 Методы на основе меры tf-idf
- •3.2.3 Метод «опорных» слов
- •3.3 Метод шинглов
- •Разбиение на шинглы;
- •Вычисление хешей шинглов;
- •3.3.1 Канонизация текстов
- •3.3.2 Разбиение на шинглы
- •3.3.3 Вычисление хешей шинглов
- •3.4 Дистанция (расстояние) Левенштейна
- •3.4.1 Алгоритм Вагнера — Фишера
- •3.5. Наибольшая общая последовательность (longest common subsequence, lcs)
- •3.6 Вычисление хеш-функции
- •3.6.1 Параметры вычисление хеш-функции: полином-генератор, разрядность и стартовое слово
- •3.6.2 Популярные и стандартизованные полиномы
- •3.7 Виды представления исходного кода
- •3.8 Представление исходного кода в виде токенов
- •Обзор инструментальных средств и сервисов анализа плагиата в программах и произвольных текстах
- •4.1 Обзор программ поиска плагиата в программировании
- •4.2 Обзор сервисов поиска плагиата
- •4.3 Обзор программ поиска плагиата в произвольных текстах
- •Описание используемых методов поиска плагиата в исходных кодах и произвольных текстах
- •5.1 Общая схема поиска
- •5.1.1 Cхема поиска для исходных кодов
- •5.1.2 Основной структурный метод для анализа исходных кодов
- •5.1.2.1 Достоинства и недостатки
- •5.1.3 Дополнительный атрибутный метод для исходных текстов
- •5.1.3.1 Достоинства и недостатки
- •5.2.1 Cхема поиска для произвольных текстов (в том числе и программ)
- •Программная реализация модуля поиска плагиата методами анализа исходных кодов программ
- •6.1 Интерфейс модуля поиска плагиата в исходных кодах программ
- •6.1.1 Главное окно модуля поиска плагиата методами анализа исходных кодов
- •6.1.2 Окно групповых режимов анализа
- •6.2 Взаимодействие модуля поиска плагиата методами анализа исходных кодов
- •6.2.1 Взаимодействие модуля с архивом работ и базой языков (добавление файла в базу)
- •6.2.2 Взаимодействие модуля с архивом работ и базой языков (частотный анализ, автоматический частотный анализ)
- •6.2.3 Взаимодействие модуля с архивом работ и базой языков (автоматический анализ последовательностей операторов)
- •6.2.4. Взаимодействие модуля с архивом работ и базой языков (анализ последовательностей операторов, просчет всех пиков)
- •6.2.5 Взаимодействие модуля с архивом работ и базой языков (удаление файла/языка из базы)
- •6.2.6 Взаимодействие модуля с базой языков (добавление языка в базу)
- •6.2.9 Поиск первоисточника и списка первоисточников
- •6.2.10 Некоторые особенности модуля
- •6.3 Описание отчетов по анализу плагиата
- •6.3.1 Критерии автоматического заключения о наличии плагиата при пакетном и полном анализе
- •6.3.2 Алгоритм поиска первоисточника для файла или списка первоисточников при полном анализе
- •6.3.3 Сводный отчет
- •6.3.4 Итоговый отчет
- •6.3.5 Экспорт итогового протокола в Excel
- •6.3.5.1 Исследование итогового протокола по полученным диаграммам Excel
- •6.3.6 Экспорт списка первоисточников в Excel
- •6.3.6.1 Исследование списка первоисточников в Excel
- •6.4 Пример работы модуля
- •6.4.1 Пример 1 анализа последовательности операторов
- •Режим работы модуля PlagiatSearch с произвольным текстом
- •Режим работы модуля PlagiatSearch с исходным кодом
- •7.1.2 Меню «Анализ» и его возможности для поиска плагиата в произвольных текстах
- •7.1.3 Информационное окно модуля PlagiatSearch поиска плагиата в произвольных текстах с результатами вычисления дистанции Левенштейна
- •7.1.4 Представление результатов нахождения наибольшей общей подпоследовательности (longest common subsequence, lcs)
- •7.1.5 Представление метода шинглов для сравнения произвольных текстов
- •7.1.6 Применение метода шинглов для сравнения исходных кодов
- •Заключение
- •Список использованных источников (библиографический список)
- •Приложение Доработанная блок-схема алгоритма анализа последовательности операторов (с показом наиболее длинного совпадающего фрагмента кода)
- •55. Мд.Иу.Мсавпсрит.Пз
2.3 Структурные методы поиска плагиата
Другой, более современный и перспективный подход состоит в сравнении программ с учетом их структуры. Эта процедура более сложная, чем сравнение численных выражений отдельных свойств программы. Структурные методы исследуют свойства программы не изолированно, а как бы в контексте, устанавливают взаимосвязь различных характеристик, их совместное поведение.
Чтобы отбросить лишнюю информацию и выделить нужные зависимости, программу предварительно переводят в более компактное представление. Как правило, сами по себе атрибутные методы малоэффективны, структурные методы превосходят их по качеству. Недостатком структурных методов является их сложность и вычислительная трудоемкость. Классическим примером структурного подхода является построение дерева программы с последующим сравнением деревьев для разных программ. Трудоемкость такого метода кубическая, что не даёт возможности сколько-нибудь эффективно его применять для большого числа достаточно длинных программ. Кроме того, структурные методы обычно опираются на синтаксис конкретного языка программирования. Адаптация метода для другого языка требует значительных усилий. Сложность реализации алгоритмов, сравнивающих структуру программ, является платой за их точность.
2.3.1 Строковое выравнивание
Пусть есть две программы, представим их в виде строк токенов a и b соответственно (возможно различной длины). Теперь можно воспользоваться методом локального выравнивания строк. Выравнивание двух строк получается с помощью вставки в них пробелов таким образом, чтобы их длины стали одинаковыми. Для этого меньшую последовательность необходимо разбить на блоки и произвести оптимальное выравнивание (то есть такое, при котором будет максимальное количество совпадений при сравнении выравненных строк a и b). Алгоритм очень зависим от токенизации кода программы, что делает его зависимым от языка программирования.
2.3.2 Метод поиска на xml-представлении
Представление программы в виде дерева (рисунок 3) отражает ее полезные для поиска плагиата свойства (такие как логика управления), и не учитывает бесполезные (например, порядок следования независимых операторов). Метод поиска плагиата основан на представлении программы в виде дерева, описание которого хранится в формате XML. Использование стандартных инструментов для работы с XML значительно упрощает архитектуру детектора плагиата. Программы, написанные на процедурных языках, таких как Pascal и С, хорошо структурированы, поэтому получить их XML-представление легко. Для оценки близости двух программ используются числовые матрицы, построенные на основе XML описаний.
Рисунок 3 Представление программы в виде дерева
2.3.3 Использование приближения Колмогоровской сложности
В алгоритме используется расстояние между последовательностями, основанное на теории информации (an information based sequence distance):
где К(х) — Колмогоровская сложность последовательности х. Она показывает сколько информации содержит последовательность х. По определению, К(х) — длина самой короткой программы, которая на пустой ввод печатает х, К(х|у) — количество информации, полученной х от у, если пусто, то оно равно К(х); (К(х) — К(х|у)) — сколько у "знает" о х. По определению, К(х|у) — это длина самой короткой программы, которая на ввод у печатает х.