
- •Содержание
- •Введение Актуальность магистерской диссертации
- •Понятие плагиата
- •Специфика понятия «плагиат» в программировании: окончательный вывод о заимствовании делает человек
- •Постановка задачи
- •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. Мд.Иу.Мсавпсрит.Пз
6.4 Пример работы модуля
Примеры работа программы даны на основе базы работ студентов по предмету «Защита информации», сданных в ВУЗе. База содержит не все работы прошлых лет, а только некоторые, сохранившиеся у преподавателя, однако это не помешало обнаружить плагиат.
6.4.1 Пример 1 анализа последовательности операторов
Пример 1 анализа последовательности операторов приведен на рисунке 22.
Рисунок 22 Пример 1 анализа последовательности операторов
Отчет программы:
Максимальное совпадение последовательности операторов в файлах обнаружено в 1 файле с 50 по 71 строку, во 2 файле c 59 по 81 строку.
*************** 1 Файл: ***************
if (Static3!=NULL) Static3->Create("Результат",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(495,5,880,20),this);
Edit3 = new CEdit();
if (Edit3!=NULL) Edit3->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|ES_MULTILINE, CRect(60,530,590,550),this,IDC_EDIT3);
Static1 = new CStatic();
if (Static1!=NULL) Static1->Create("Ключ",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(10,530,60,550),this);
Button1 = new CButton();
if (Button1!=NULL) Button1->Create("Шифрование",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(60,560,230,580),this,IDC_BUTTON1);
Button2 = new CButton();
if (Button2!=NULL) Button2->Create("Выход",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(610,600,780,620),this,IDC_BUTTON2);
Button3 = new CButton();
if (Button3!=NULL) Button3->Create("Таблица Вижинера",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(610,530,780,550),this,IDC_BUTTON3);
Button4 = new CButton();
if (Button4!=NULL) Button4->Create("Расшифровать ключом",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(240,560,410,580),this,IDC_BUTTON4);
Button6 = new CButton();
if (Button6!=NULL) Button6->Create("<<",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(400,250,490,300),this,IDC_BUTTON6);
*************** 2 Файл: ***************
if (Static2!=NULL) Static2->Create("Исходный текст",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(10,5,395,20),this);
Static3 = new CStatic(); // это заголовок правого окна - "Результат"
if (Static3!=NULL) Static3->Create("Результат",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(495,5,880,20),this);
Edit3 = new CEdit(); // аналогично Edit1 - это текстовое поле для ключа
if (Edit3!=NULL) Edit3->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|ES_MULTILINE, CRect(60,530,590,550),this,IDC_EDIT3);
Static1 = new CStatic(); // аналогично для Static2 - это поле "Ключ" справа от текстового поля для ключа
if (Static1!=NULL) Static1->Create("Ключ",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(10,530,60,550),this);
// Кнопка Шифрование - делается аналогично предыдущим элеменат, только создается объекст CButton
Button1 = new CButton(); // создаем объект и рисуем его функцией Create и связываем с константой IDC_BUTTON1
if (Button1!=NULL) Button1->Create("Шифрование",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(60,560,230,580),this,IDC_BUTTON1);
Button2 = new CButton(); // создаем объект и рисуем его функцией Create и связываем с константой IDC_BUTTON2
if (Button2!=NULL) Button2->Create("Выход",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(610,600,780,620),this,IDC_BUTTON2);
Button3 = new CButton(); // создаем объект и рисуем его функцией Create и связываем с константой IDC_BUTTON3
if (Button3!=NULL) Button3->Create("Генерация ключа",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(610,530,780,550),this,IDC_BUTTON3);
Button4 = new CButton(); // создаем объект и рисуем его функцией Create и связываем с константой IDC_BUTTON4
if (Button4!=NULL) Button4->Create("Расшифровать ключом",WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(240,560,410,580),this,IDC_BUTTON4);
+++ Информация о файлах +++
_______________ 1 Файл: _______________
С
Группа: ВВ-5-02
Тема: Крипт2
Автор: Боловинцев
Дополнительная информация:
Путь: C:\Documents and Settings\Владимир\Рабочий стол\BAZA\Лабы\VV-5-02\bolovincev\Crypt2\Crypt.cpp
Размер: 7288 Байт
Изменен: 18.04.2006 13:00:44
_______________ 2 Файл: _______________
С
Группа: ВВ-5-02
Тема: крипт1
Автор: Ахметов
Дополнительная информация:
Путь: C:\Documents and Settings\Владимир\Рабочий стол\BAZA\Лабы\VV-5-02\KomissandAhmetov\мис зки\1Crypt(comment)\Crypt(comment)\Crypt.cpp
Размер: 17448 Байт
Изменен: 24.03.2006 14:53:34
Очевидно, что во втором файле в совпавшем фрагменте добавлены комментарии, и судя по датам последних изменений в файлах, можно предположить, что Боловинцев списал у Ахметова.
6.4.2 Пример 2 автоматического анализа частот появления операторов
Пример 2 автоматического анализа частот появления операторов показан на рисунке 23.
Рисунок 23 Пример 2 автоматического анализа частот появления операторов
Программная реализация модуля PlagiatSearch поиска плагиата методами сравнения произвольных текстов
7.1 Интерфейс модуля PlagiatSearch поиска плагиата методами сравнения произвольных текстов
7.1.1 Главное окно модуля PlagiatSearch поиска плагиата методами сравнения произвольных текстов
Модуль PlagiatSearch поиска плагиата методами сравнения произвольных текстов реализован на языке программирования – Delphi. В верхней части диалогового окна (рисунок 24) находится панель меню (1), ниже панель быстрого доступа к наиболее важным функциям меню (2), в правом верхнем углу после выполнения некоторых действий. Главное окно в средней части – это тексты сравниваемых текстовых файлов с номерами строк (3). В самом низу находятся информация с некоторыми комментариями по выполненным действиям (4). Важным элементом интерфейса является checkbox ‘Текст’ в левой верхней части окна: если флажок установлен, то сравниваемые файлы рассматриваются как произвольные тексты (рисунок 24, a) и тогда их выбор можно осуществлять либо через опцию меню “Файл” или через пиктораммы ‘1’ или ‘2’ на панели быстрого доступа (5).
Меню «Файл» позволяет выполнять основные функции работы с файлами: открыть сравниваемые файлы (6), сравнить по Левенштейну (7) и методом шинглов (8). Для исходных кодов можно также выполнить операцию токенизации (смотрите раздел 4.8). Меню «Просмотр» предлагает удобные средства перемещения по файлу («Перемещается по измененным частям сравниваемых файлов» и на указанные строки в файлах). Меню «Опции и параметры» позволяют задать параметры сравнения файлов по Левенштейну (игнорировать - Регистры и пробелы), задать весовые коэффициенты Дамерау и размер шинглов. Меню «Методы сравнения» задает один из реализованных алгоритмов вычисления дистанции Левенштейна (O(NP) [29] или O(ND) [28]).
Если флажок не установлен (как на рисунке 24, b), то сравниваемые файлы рассматриваются как тексты исходных кодов и тогда выбор возможен только из базы данных исходных кодов (8). При этом можно выбрать язык программирования (9).