Plagiarism

реклама
Обзор алгоритмов и детекторов
обнаружения плагиата в
исходных кодах программ
Ю. Лифшиц
А. Котов
Е. Лысенко
Д. Антипов
О. Евтифеева
А. Красс
М. Лакунин
А. Семенников Р. Счастливцев
Санкт-Петербург, 2006
План обзора





Постановка задачи
Обзор алгоритмов
Тестирование детекторов
Направления для дальнейшей работы
Project summary
Определение плагиата


Для нас плагиат – это непосредственное
использование чужого кода в своём.
Часть одной программы является плагиатом части
другой программы, если она была получена из нее
копированием с последующим незначительным
изменением кода:
 случайные вставки в код;
 перегруппировка методов;
 переименование переменных;
 рефакторинг кода.
Общая схема поиска
плагиата
Исходная программа
Текст
Парсер
Представление
Основной алгоритм
Выходные данные
Метрика
Вывод
Переходим из
модели с большим
количеством
избыточной
информации к
более компактной
Представления
исходного кода



Исходный код программы
Параметрическое представление
Токенизированное представление
while (i <= s.top()) {
printf(“%d”, s[i]);
s[i] = s[i + 1];
i++;
}

BEGINWHILE
APPLY
ASSIGN
ASSIGN
ENDWHILE
В виде дерева или ориентированного графа
Основные ветви развития




Атрибутно-подсчётные методы
Структурные методы
 Строковое выравнивание
 Жадное строковое замощение
 Применение суффиксных деревьев/массивов
 Использование приближения Колмогоровской
сложности
 Сравнение AST-представлений программ
Сигнатурные методы или методы отпечатков
Гибридные методы
Сигнатурные методы
(метод отпечатков)
1.
2.
3.
4.
5.
Хэшируем все подстроки токенизированной
программы P фиксированной длины.
Выделяем некоторое подмножество их хэшзначений, хорошо характеризующее P.
Проделываем те же шаги для токенизированных
программ T1, T2 … Tn и помещаем выбранные хэшзначения в базу.
С помощью хэш-таблицы (базы) получаем набор
участков строки P, подозрительных на плагиат.
Анализируем результат и делаем выводы.
Детекторы плагиата
Детектор
Языки
Модель
Алгоритм
Accuse
Fortran
n-мерное
пространство
аттрибутно-подсчитывающий
метод
SIM
C, Java, Pascal,
Modula-2, Miranda
токены
поиск по матрице совпадений
подстрок
JPlag
C/C++, Java, Scheme
токены
жадное строковое замощение
MOSS
C/C++, C#, Java,
a8086 assembly и др.
сигнатура кода
метод отпечатков
Plague
Pascal, Modula-2,
Prolog
токены
набор метрик, одна из них –
вариация НОП
Sherlock
Pascal и др.
текст, токены
аналог Plague, нейросеть
Plan-X
SML
XML формат
использоване XMLStore
SID
С++, Java
токены
вычисление метрики на основе
Колмогоровской сложности
Тестирование бесплатных
детекторов


Доступность:
 SIM – работает всегда, так как это не online-сервис
 JPlag – никаких претензий
 MOSS – иногда сервер может быть недоступен
 SID – может не работать долгое время
Скорость тестирования:
 MOSS, SIM – почти мгновенно
 JPlag – порядка 10 секунд на тест
 SID – среднее ожидание времени ответа - 10 минут
Сравнительная
характеристика
Детектор
Регистрация
Прог. требования
Автоматизация
Представл.
рез-тов
Языки
JPlag
запрос,
разрешение
администратора
JRE, web-браузер
нет
окно с
фреймами
средний
диапазон
MOSS
письмо с
запросом
Perl, web-браузер
да
окно с
фреймами
широкий
диапазон
SID
заполнить
форму
zip-архиватор,
web-браузер
да
окно с
фреймами
узкий
диапазон
SIM
-
-
да
stdout
средний
диапазон
Принципы оценки
результатов тестирования





n проектов участвует в тесте
n * (n – 1) / 2 пар проектов нужно проверить на
наличие плагиата
g пар проектов действительно содержат плагиат
f пар проектов с плагиатом обнаружил детектор
t из f обнаруженных пар действительно содержат
плагиат
t
P   100%
g
t
R  100%
f
Тестовая коллекция
Коллекция
Язык
Тип
Количество
файлов
TestSet_simple.zip
(2 Kb)
Java
естественный
2
TestSet_spbolymp.zip
(177 Kb)
C++
естественный
196
TestSet_SID.zip
(653 Kb)
Java
искусственный
86
TestSet_FTP.zip
(637 Kb)
C++
естественный
5(170)
Результаты тестирования
TestSet_spbolymp.zip
Тест
Файлов
Ср.
SID
размер
MOSS JPlag
SIM
Комментарии
Summer2004Set_day28TestB
5
3 Kb
4%
-
14.0
%
42%
SIM
неоправданно
подозрителен
SPB2005TestC
7
1 Kb
11%
-
-
60%
false positive
TeamSPB2003
-TestF
3
2 Kb
80% 99% и 100% 100%
96%
плагиат
Результаты тестирования
TestSet_SID.zip
Тест
Файлов Ср. Разм.
SID (%)
MOSS, %
JPlag, %
SIM, %
1/100
2
3 Kb
82
79 и 78
99.3
100
2/100
2
3 Kb
79
79 и 77
98.7
97
10/100
2
3 Kb
66
62 и 55
92.7
77
20/100
2
3 Kb
53
40 и 32
40.3
57
50/100
2
4 Kb
31
6и3
24.7
5
1/1100
2
41 Kb
98
98 и 98
99.9
99
2/1100
2
42 Kb
98
98 и 97
99.9
100
10/1100
2
42 Kb
97
97 и 95
99.2
99
270/1100
2
42 Kb
92
96 и 93
98.6
99
180/1100
2
43 Kb
79
84 и 74
90.4
93
400/1100
2
52 Kb
15
5и3
12.7
8
400/1100
2
49 Kb
40
19 и 12
25.1
27
200/1100
2
46 Kb
63
43 и 33
58.4
64
Качество обнаружения
плагиата




MOSS, JPlag, SID – хорошее;
SID – лучше устойчив к вставкам одиночных
операторов в код, но хуже реагирует на другие методы
сокрытия плагиата;
SIM – слишком подозрителен на коротких программах;
SID, JPlag – парсер C-файлов не переваривает
корректную строку while (c=='\xD').
Возможные направления
для улучшения обзора




Протестировать CloneDR, Palamida IP Amplifier и Black
Duck protexIP, выяснить достоинства и недостатки
CodeRankTM.
Рассмотреть применение детекторов в индустрии
создания ПО.
Провести более глубокое тестирование с применением
обфускаторов, нейросетей, более тонкой настройкой
алгоритмов и т.д.
Исследовать применение кластеризации для
различных баз и алгоритмов.
Возможные направления
для исследований





Подобрать более близкое приближение
Колмогоровской сложности.
Получить хэш-функцию, удовлетворяющую
требованиям алгоритма сравнения AST-представлений
Рассмотреть идею поиска плагиата в исполняемом
коде.
Изучить применение стандартных алгоритмов
определения авторства к нашей задаче.
Написать свой детектор плагиата, учтя все недостатки,
существующих продуктов.
Project summary




Проект выполнен в рамках программы по
сотрудничеству Intel™ с ВУЗами Санкт-Петербурга;
9 человек работали над проектом
в период с 15.01.2006 по 18.04.2006;
Сайт проекта – http://detector.spb.su, построен на
базе технологии коллективной разработки WiKi.
Основной результат проекта – обзор алгоритмов и
детекторов.
Скачать