SlideShare a Scribd company logo
Методы автоматического выявления
плагиата в текстах компьютерных
программ
Исполнитель: Багдатов Мурат (425 группа)
Научный руководитель: Баева Н. В.
1 / 31
Основные термины
• Токены – замещение объекта неким обозначением/
идентификатором
(часто просто целым числом или строкой)
• Токенизация – разбиение исходного текста (кода программы) на
токены
• Trie-дерево (Префиксное дерево) –
структура данных для реализации словаря
(ассоциативного массива), ключами в
котором являются строки
it
A
to
tea
ted ten inn
inte
n
n
it
o e
a n
d
A
11
5
91243
7
15
2 / 31
Содержание
I. Метод построения гистограмм
II. Метод построения trie – дерева лексем
III. Метод отпечатков
IV. Метод А. Г. Фенстера
V. Анализ методов по отношению к рефал – программам
VI. Метод проверки эквивалентности рефал – программ
3 / 31
Метод построения гистограмм
Какие характеристики программы можно использовать в
качестве доказательства факта заимствования?
• Эти характеристики должны слабо меняться в случае
модификации программы или включения фрагментов одной
программы в другую
• Имена процедур и переменных, текстовые строки и тому
подобное не должны использоваться для получения
характеристик
• Лучше всего подойдет последовательность операторов
программы
4 / 31
Метод построения гистограмм
1. Построение гистограммы по количеству появления
операторов в коде программы (для обеих программ)
2. Построение гистограммы исходя из анализа частоты
появления операторов и получение взаимной корреляции
операторов
3. Анализ всех промежуточных гистограмм для выявления
подозрительных» программ
5 / 31
Гистограмма по частоте
0
5
10
15
20
25
30
if else for while do return case break continue try catch
6 / 31
j = 0; {
for ( i = 1; i < 5; i++)
if ( Оп1[i] == Оп2[i + j] )
count[j]++;
j++; }
Оп1[1]
Оп1[2]
Оп1[3]
Оп1[4]
Оп2[1]
Оп2[2]
Оп2[3]
Оп2[4]
Оп2[5]
Оп2[6]
Операторы одной последовательности
сравниваются с операторами другой
последовательности. В том случае, когда
длины последовательностей различны,
сравнение производится по длине более
короткой последовательности.
Количество совпадении запоминается и
происходит сдвиг
Данные для гистограммы по появлению в программе
7 / 31
Производится повторное сравнение, но
перед этим более короткая
последовательность сдвигается так, как
показано на картинке. Когда будет получено
еще одно число, характеризующее
количество совпадений, оно также
запоминается, одна из последовательностей
опять сдвигается, опять производится
сравнение, и так до тех пор, пока более
короткая последовательность не сдвинется
циклически столько раз, сколько операторов
в более длинной.
Данные для гистограммы по появлению в программе
Оп1[1]
Оп1[2]
Оп1[3]
Оп1[4]
Оп2[1]
Оп2[2]
Оп2[3]
Оп2[4]
Оп2[5]
Оп2[6]
8 / 31
0
2
4
6
8
10
1 2 3 4 5 6 7 8 9 10 11
Гистограмма по появлению в программе
9 / 31
Плюсы и минусы
- Близкие значения характеристик двух различных программ не означают,
что в одной программе присутствуют фрагменты другой
+ Он позволяет легко автоматизировать процесс выявления
подозрительных участков программного кода
+ При использовании совместно с другими методами может дать
значительные результаты
10 / 31
I. Метод построения гистограмм
II.Метод построения trie – дерева лексем
III. Метод отпечатков
IV. Метод А. Г. Фенстера
V. Анализ методов по отношению к рефал – программам
VI. Метод проверки эквивалентности рефал – программ
11 / 31
• алгоритм должен распознавать основные ключевые слова языка;
• переменные не должны считаться различными, если они отличаются только
именем;
• при обмене местами двух функций код не должен распознаваться как совершенно
другой;
• аналогичный принцип применим для строк внутри функций: существуют строки,
перестановка которых не приводит к изменению функциональности программы;
• при анализе все комментарии в коде должны игнорироваться, аналогично
игнорируются пробельные символы и переводы строк.
Каким требованиям должен удовлетворять
алгоритм ?
12 / 31
Метод построения trie-дерева лексем
1. Разбиение кода программы на лексемы и присвоение
каждой из них индивидуального идентификатора
2. Построение trie-дерева лексем для каждой программы
3. Проверка вложенности всех поддеревьев из первого дерева
во второе и наоборот
4. Расчёт коэффициента схожести
Пример
13 / 31
Пример построения trie-дерева лексем
int f(int x) {
return x & 1 + 1;
}
int main( ) {
int x = 100, k = 0;
while (x) {
x += f(x);
--k;
}
return 0;
}
#ROOT
int FNAME (
Int VAR
) {
return VAR & NUM
+ NUM;
} while (NUM) {
) {
}
Return NUM;
VAR += FNAME
(VAR) ;
- - NUM; Int VAR = NUM,
VAR = NUM;
14 / 31
Расчёт коэффициента схожести
Y – количество вершин в самой ветке (эталонный код).
X – количество вершин, посещенных до этого момента в сравниваемой программе (второй код).
Для оценки общей схожести исходных кодов используется значение x = C / Z,
где C –сумма X^2 для всех веток,
Z – сумма Y^2 для всех веток.
Функция оценки схожести кодов имеет вид:
и принимает значения от 0 (абсолютная различимость) до 100 (абсолютная идентичность).
Замечания
• Для того чтобы с ростом X
росла существенность ошибки, в оценке используются квадраты значений X и Y.
• Очевидно, что если в дереве присутствует искомая ветка, то X = Y, в остальных случаях X < Y.
Следовательно, чем меньше число X, тем меньше совпадение данной ветки лексем второго кода
с веткой дерева лексем первого кода.
15 / 31
Плюсы и минусы
- Разбиение кода программы на лексемы, из-за этого данный
алгоритм не применим к программам, написанным на
функциональных языках программирования
+ Идея построения из кода программы структурного дерева,
которая подходит как для императивных, так и для
функциональных языков программирования
16 / 31
I. Метод построения гистограмм
II. Метод построения trie – дерева лексем
III.Метод отпечатков
IV. Метод А. Г. Фенстера
V. Анализ методов по отношению к рефал – программам
VI. Метод проверки эквивалентности рефал – программ
17 / 31
Метод отпечатков
1. Последовательно обрабатываем 2 подстроки
токенизированной программы P длины k
2. Выделяем некоторое подмножество их k-грамм.
Проделываем те же шаги для токенизированных программ
Т1, Т2, … Тn и помещаем k-граммы в таблицу
3. С помощью сравнения таблиц k-грамм получаем множество
совпадений – кандидатов на плагиат
4. Анализ данных и выводы
18 / 31
Пример метода отпечатков
Токен 1
Токен 2
Токен 3
Токен 4
Токен 5
Токен 6
Токен 7
Токен 8
Токен 9
Токен 10
Токен 11
1
2
3
4
5
6
7
8
ПрограммаP
В методе отпечатков главное
– выбрать оптимальное
значение для k.
Если выбрать k слишком
маленьким, то количество
совпадении будет очень
большим, и это не позволить
даже частично
автоматизировать процесс
проверки текста программы.
Если выбрать k слишком
большим, то в таблице k-
грамм не будет совпадении.
19 / 31
Плюсы и минусы
- Выбор значения k не автоматизирован, и из-за этого для программ
разной сложности алгоритм будет выдавать не корректные результаты.
- Процесс не автоматизирован, только выводит подозрительные участки
кода.
+ Если придумать метод для автоматизации выбора значения k в
зависимости от сложности программ, то алгоритм будет выдавать
хороший результат
20 / 31
I. Метод построения гистограмм
II. Метод построения trie – дерева лексем
III. Метод отпечатков
IV.Метод А. Г. Фенстера
V. Анализ методов по отношению к рефал – программам
VI. Метод проверки эквивалентности рефал – программ
21 / 31
Метод А. Г. Фенстера
1. Удаление всех комментариев
2. Удаление (и/или приписывание) пробелов
3. Переименование идентификаторов
4. Замена ключевых слов на k, чисел на n, идентификаторов и
всех остальных строк на i
5. Поиск вхождения подстроки из проверяемой программы в
эталонную программу
6. Сравнение коэффициента вложенности с пороговым
значением
22 / 31
Программа «Hello World» после такого преобразования будет
выглядеть так:
Как видно из этого примера,
слова printf и stdio здесь
отнесены к разряду ключевых
слов, т.е. ключевые слова – не
обязательно те, которые
считаются ключевыми в
описании языка.
Программа на С После
преобразования
#include # k
<stdio.h> < k . i >
int main () k i ( )
{ printf { k
(“Hello,World!n”) ; ( “ i i !  i ” ) ;
return 0 ; } k n ; }
23 / 31
Плюсы и минусы
- Если тот, кто позаимствовал программу потрудился немного видоизменить её,
то данный алгоритм не сработает, то есть алгоритм рассчитан на легкие
программы.
- Порог для автоматического отслеживания плагиата выбирается в ручную, и не
всегда верно.
+ Если автоматизировать процесс подбора порогового значения в зависимости от
сложности написанных программ, то алгоритм позволяет легко
автоматизировать процесс выявления подозрительных участков программного
кода.
+
24 / 31
I. Метод построения гистограмм
II. Метод построения trie – дерева лексем
III. Метод отпечатков
IV. Метод А. Г. Фенстера
V. Анализ методов по отношению к рефал –
программам
VI. Метод проверки эквивалентности рефал – программ
25 / 31
Анализ методов по отношению к рефал-программам
Метод построения
trie-дерева лексем
Метод отпечатков Метод
А. Г. Фенстера
Метод построения гистограмм
- Разбиение кода
программы на
лексемы
+ Идея
построения
из кода
программы
структурного
дерева
- Токенизация
(представление кода
программы как
последовательность
токенов)
+ Составление из
промежуточных
результатов
таблицы.
- Данный метод
не учитывает
добавление
незначимых
функции и т. п.
+ Можно
доработать
метод
добавлением
этапа для
удаления
незначимых
элементов
- По анализу гистограмм
можно лишь с небольшой
точностью найти
«подозрительную»
программу
- Процесс можно
автоматизировать частично
+ Построение (сохранение)
и анализ всех
промежуточных
гистограмм
26 / 31
I. Метод построения гистограмм
II. Метод построения trie – дерева лексем
III. Метод отпечатков
IV. Метод А. Г. Фенстера
V. Анализ методов по отношению к рефал – программам
VI.Метод проверки эквивалентности рефал –
программ
27 / 31
Метод проверки эквивалентности рефал – программ
Шаг 1: Упорядочиваем все переменные
Пример: s2 e4 v5 t2 s3 => s1 e1 v1 t1 s2
Шаг 2: Строим дерево (граф) вызовов функции
Пример:
go = < main >
main e1 = < words e1 > < idFunc e1 >
words e1 ' ' e2 = < delClone e1 > ' ' < words e2 >
e1 = < delClone e1 >
delClone e1s1e2s1e3 = e1 < delClone s1e2e3 >
e1 = e1
idFunc e1 = e1
Примечания:
- если в функции А вызывается функция В, которая уже обрабатывалась, то строится новая
вершина B и соответствующее ребро, но данная вершина уже не обрабатывается.
go
main
words
delClone
idFunc
28 / 31
Шаг 3: Удаляем несущественные вершины и ребра (функций) из дерева (графа).
Несущественными считаются функции, которые:
1. Ничего не делают (функция idFunc в примере (шаге 2))
Пример: idFunc e1 = e1
2. Передают свой аргумент целиком на вход другой функции
Пример: func1 e1 = <func2 e1>
3. Устроены так, что каким либо образом служат промежуточной функцией, то есть,
каким то образом выполняется последовательность 1 и 2 правила.
Шаг 4: Обрабатываем код программы
Для этого двигаемся по обоим деревьям (графам) и последовательно обрабатываем
функции которые встретим на звеньях этих деревьев (графов)
Метод проверки эквивалентности рефал – программ
29 / 31
Литература
• 1. П.А. Хаустов, Ю.Я. Кацман
Система обнаружения использования чужого программного кода «NoCrib»
http://sjs.tpu.ru/journal/article/view/72/119
• 2. А. И. Логинов «Система поиска плагиата»
http://elib.bsu.by/bitstream/123456789/95144/1/207-211.pdf
• 3. А. Г. Фенстер «Выявление плагиата при проверке студенческих работ»
http://info.fenster.name/misc/plagiarism.pdf
• 4. С. Иванчегло «Методы выявления плагиата в программировании»
http://www.kv.by/index2000491105.htm
• 5. Е. И. Большакова, Н. В. Груздева
«Основы программирования на языке Рефал»
30 / 31
СПАСИБО ЗА ВНИМАНИЕ
31 / 31

More Related Content

PPT
20120309 formal semantics shilov_lecture04
PPT
Tpo 06
PDF
основы ооп на языке C#. часть 1. введение в программирование
PDF
Основы ооп на языке C#. Часть 2. базовый синтаксис.
PDF
Document
PDF
C++ осень 2012 лекция 6
PPT
лекция 6
PDF
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ
20120309 formal semantics shilov_lecture04
Tpo 06
основы ооп на языке C#. часть 1. введение в программирование
Основы ооп на языке C#. Часть 2. базовый синтаксис.
Document
C++ осень 2012 лекция 6
лекция 6
Программирование на языке C Sharp (СИ решетка) ПРАКТИКУМ

What's hot (15)

PPT
практикум по выполнению блока с (с1)
DOC
Решение заданий типа с1 егэ по информатике
PPT
Predzazhita 2009 v16
PPS
операторы и выражения
PDF
Что такое "Parallel Lint"?
PPTX
Программирование на языке C Sharp (СИ решетка)
PDF
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
PDF
Rabovoluk
PDF
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
PDF
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
PPTX
PDF
Применение статического анализа при разработке программ
PDF
TMPA-2015: Formal Methods in Robotics
PPTX
Способы записи алгоритма
PDF
Сравнение диагностических возможностей анализаторов при проверке 64-битного кода
практикум по выполнению блока с (с1)
Решение заданий типа с1 егэ по информатике
Predzazhita 2009 v16
операторы и выражения
Что такое "Parallel Lint"?
Программирование на языке C Sharp (СИ решетка)
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
Rabovoluk
TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Sta...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
Применение статического анализа при разработке программ
TMPA-2015: Formal Methods in Robotics
Способы записи алгоритма
Сравнение диагностических возможностей анализаторов при проверке 64-битного кода
Ad

Viewers also liked (20)

PPTX
Мищенко. Методы автоматического определения наиболее частотного значения слова.
PDF
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
PDF
Савкуев. Построение формального описания фотографий на основе контекстно-собы...
PDF
Смирнова. Методы исправления ошибок в текстах, написанных иностранцами.
PDF
Лукьяненко. Извлечение коллокаций из текста
PDF
Савостин. Системы и методы научного поиска и мониторинга
PPTX
Можарова Тематические модели: учет сходства между униграммами и биграммами.
PDF
Баев Системы для обучения программированию
PPTX
Иванов. Автоматизация построения предметных указателей
PPTX
Можарова. Автоматическое извлечение именованных сущностей методами машинного ...
PDF
Сапин. Интеллектуальные агенты и обучение с подкреплением
PDF
Рой. Аспектный анализ тональности отзывов
PPTX
Мадорский. Извлечение тематически сгруппированных ключевых терминов из тексто...
PDF
Баев. Поиск шаблонов и машинное обучение для демографических событий (Pattern...
PDF
Муромцев. Методы анализа социальных графов и поиска сообществ
PDF
Котиков Простые методы выделения ключевых слов и построения рефератов
PDF
Панфилов. Корпусы текстов и принципы их создания
PDF
Муромцев. Обзор библиографических менеджеров
PPT
Классификация корпусов
Мищенко. Методы автоматического определения наиболее частотного значения слова.
Смолина Пользовательские интерфейсы систем лингвистической разметки текстов
Савкуев. Построение формального описания фотографий на основе контекстно-собы...
Смирнова. Методы исправления ошибок в текстах, написанных иностранцами.
Лукьяненко. Извлечение коллокаций из текста
Савостин. Системы и методы научного поиска и мониторинга
Можарова Тематические модели: учет сходства между униграммами и биграммами.
Баев Системы для обучения программированию
Иванов. Автоматизация построения предметных указателей
Можарова. Автоматическое извлечение именованных сущностей методами машинного ...
Сапин. Интеллектуальные агенты и обучение с подкреплением
Рой. Аспектный анализ тональности отзывов
Мадорский. Извлечение тематически сгруппированных ключевых терминов из тексто...
Баев. Поиск шаблонов и машинное обучение для демографических событий (Pattern...
Муромцев. Методы анализа социальных графов и поиска сообществ
Котиков Простые методы выделения ключевых слов и построения рефератов
Панфилов. Корпусы текстов и принципы их создания
Муромцев. Обзор библиографических менеджеров
Классификация корпусов
Ad

Similar to Багдатов Методы автоматического выявления плагиата в текстах компьютерных программ (20)

PDF
Отладка и оптимизация многопоточных OpenMP-программ
PDF
Метрики кода программного обеспечения
PDF
Тестирование осень 2013 лекция 2
PDF
Тестирование весна 2013 лекция 2
PDF
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
PDF
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
PDF
VivaMP, система выявления ошибок в коде параллельных программ на языке С++, и...
DOCX
пр 15.docx
PDF
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
PDF
Тестирование параллельных программ
DOCX
прак 15.docx
PDF
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
ODT
TAP
PDF
32 подводных камня OpenMP при программировании на Си++
PDF
Статический анализ кода для верификации 64-битных приложений
PPTX
Техники тест дизайна для черноящичного тестирования
PDF
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
DOC
оп.05 основы программирования
PPTX
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Отладка и оптимизация многопоточных OpenMP-программ
Метрики кода программного обеспечения
Тестирование осень 2013 лекция 2
Тестирование весна 2013 лекция 2
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
VivaMP, система выявления ошибок в коде параллельных программ на языке С++, и...
пр 15.docx
Интервью с Дмитрием Вьюковым – автором верификатора Relacy Race Detector (RRD)
Тестирование параллельных программ
прак 15.docx
Лекция №1. Введение. Предмет "Структуры и алгоритмы обработки данных"
TAP
32 подводных камня OpenMP при программировании на Си++
Статический анализ кода для верификации 64-битных приложений
Техники тест дизайна для черноящичного тестирования
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
оп.05 основы программирования
Александр Александров -- Надёжный тест-дизайн (мастер-класс)

More from Спецсеминар "Искусственный Интеллект" кафедры АЯ ВМК МГУ (11)

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

Багдатов Методы автоматического выявления плагиата в текстах компьютерных программ

  • 1. Методы автоматического выявления плагиата в текстах компьютерных программ Исполнитель: Багдатов Мурат (425 группа) Научный руководитель: Баева Н. В. 1 / 31
  • 2. Основные термины • Токены – замещение объекта неким обозначением/ идентификатором (часто просто целым числом или строкой) • Токенизация – разбиение исходного текста (кода программы) на токены • Trie-дерево (Префиксное дерево) – структура данных для реализации словаря (ассоциативного массива), ключами в котором являются строки it A to tea ted ten inn inte n n it o e a n d A 11 5 91243 7 15 2 / 31
  • 3. Содержание I. Метод построения гистограмм II. Метод построения trie – дерева лексем III. Метод отпечатков IV. Метод А. Г. Фенстера V. Анализ методов по отношению к рефал – программам VI. Метод проверки эквивалентности рефал – программ 3 / 31
  • 4. Метод построения гистограмм Какие характеристики программы можно использовать в качестве доказательства факта заимствования? • Эти характеристики должны слабо меняться в случае модификации программы или включения фрагментов одной программы в другую • Имена процедур и переменных, текстовые строки и тому подобное не должны использоваться для получения характеристик • Лучше всего подойдет последовательность операторов программы 4 / 31
  • 5. Метод построения гистограмм 1. Построение гистограммы по количеству появления операторов в коде программы (для обеих программ) 2. Построение гистограммы исходя из анализа частоты появления операторов и получение взаимной корреляции операторов 3. Анализ всех промежуточных гистограмм для выявления подозрительных» программ 5 / 31
  • 6. Гистограмма по частоте 0 5 10 15 20 25 30 if else for while do return case break continue try catch 6 / 31
  • 7. j = 0; { for ( i = 1; i < 5; i++) if ( Оп1[i] == Оп2[i + j] ) count[j]++; j++; } Оп1[1] Оп1[2] Оп1[3] Оп1[4] Оп2[1] Оп2[2] Оп2[3] Оп2[4] Оп2[5] Оп2[6] Операторы одной последовательности сравниваются с операторами другой последовательности. В том случае, когда длины последовательностей различны, сравнение производится по длине более короткой последовательности. Количество совпадении запоминается и происходит сдвиг Данные для гистограммы по появлению в программе 7 / 31
  • 8. Производится повторное сравнение, но перед этим более короткая последовательность сдвигается так, как показано на картинке. Когда будет получено еще одно число, характеризующее количество совпадений, оно также запоминается, одна из последовательностей опять сдвигается, опять производится сравнение, и так до тех пор, пока более короткая последовательность не сдвинется циклически столько раз, сколько операторов в более длинной. Данные для гистограммы по появлению в программе Оп1[1] Оп1[2] Оп1[3] Оп1[4] Оп2[1] Оп2[2] Оп2[3] Оп2[4] Оп2[5] Оп2[6] 8 / 31
  • 9. 0 2 4 6 8 10 1 2 3 4 5 6 7 8 9 10 11 Гистограмма по появлению в программе 9 / 31
  • 10. Плюсы и минусы - Близкие значения характеристик двух различных программ не означают, что в одной программе присутствуют фрагменты другой + Он позволяет легко автоматизировать процесс выявления подозрительных участков программного кода + При использовании совместно с другими методами может дать значительные результаты 10 / 31
  • 11. I. Метод построения гистограмм II.Метод построения trie – дерева лексем III. Метод отпечатков IV. Метод А. Г. Фенстера V. Анализ методов по отношению к рефал – программам VI. Метод проверки эквивалентности рефал – программ 11 / 31
  • 12. • алгоритм должен распознавать основные ключевые слова языка; • переменные не должны считаться различными, если они отличаются только именем; • при обмене местами двух функций код не должен распознаваться как совершенно другой; • аналогичный принцип применим для строк внутри функций: существуют строки, перестановка которых не приводит к изменению функциональности программы; • при анализе все комментарии в коде должны игнорироваться, аналогично игнорируются пробельные символы и переводы строк. Каким требованиям должен удовлетворять алгоритм ? 12 / 31
  • 13. Метод построения trie-дерева лексем 1. Разбиение кода программы на лексемы и присвоение каждой из них индивидуального идентификатора 2. Построение trie-дерева лексем для каждой программы 3. Проверка вложенности всех поддеревьев из первого дерева во второе и наоборот 4. Расчёт коэффициента схожести Пример 13 / 31
  • 14. Пример построения trie-дерева лексем int f(int x) { return x & 1 + 1; } int main( ) { int x = 100, k = 0; while (x) { x += f(x); --k; } return 0; } #ROOT int FNAME ( Int VAR ) { return VAR & NUM + NUM; } while (NUM) { ) { } Return NUM; VAR += FNAME (VAR) ; - - NUM; Int VAR = NUM, VAR = NUM; 14 / 31
  • 15. Расчёт коэффициента схожести Y – количество вершин в самой ветке (эталонный код). X – количество вершин, посещенных до этого момента в сравниваемой программе (второй код). Для оценки общей схожести исходных кодов используется значение x = C / Z, где C –сумма X^2 для всех веток, Z – сумма Y^2 для всех веток. Функция оценки схожести кодов имеет вид: и принимает значения от 0 (абсолютная различимость) до 100 (абсолютная идентичность). Замечания • Для того чтобы с ростом X росла существенность ошибки, в оценке используются квадраты значений X и Y. • Очевидно, что если в дереве присутствует искомая ветка, то X = Y, в остальных случаях X < Y. Следовательно, чем меньше число X, тем меньше совпадение данной ветки лексем второго кода с веткой дерева лексем первого кода. 15 / 31
  • 16. Плюсы и минусы - Разбиение кода программы на лексемы, из-за этого данный алгоритм не применим к программам, написанным на функциональных языках программирования + Идея построения из кода программы структурного дерева, которая подходит как для императивных, так и для функциональных языков программирования 16 / 31
  • 17. I. Метод построения гистограмм II. Метод построения trie – дерева лексем III.Метод отпечатков IV. Метод А. Г. Фенстера V. Анализ методов по отношению к рефал – программам VI. Метод проверки эквивалентности рефал – программ 17 / 31
  • 18. Метод отпечатков 1. Последовательно обрабатываем 2 подстроки токенизированной программы P длины k 2. Выделяем некоторое подмножество их k-грамм. Проделываем те же шаги для токенизированных программ Т1, Т2, … Тn и помещаем k-граммы в таблицу 3. С помощью сравнения таблиц k-грамм получаем множество совпадений – кандидатов на плагиат 4. Анализ данных и выводы 18 / 31
  • 19. Пример метода отпечатков Токен 1 Токен 2 Токен 3 Токен 4 Токен 5 Токен 6 Токен 7 Токен 8 Токен 9 Токен 10 Токен 11 1 2 3 4 5 6 7 8 ПрограммаP В методе отпечатков главное – выбрать оптимальное значение для k. Если выбрать k слишком маленьким, то количество совпадении будет очень большим, и это не позволить даже частично автоматизировать процесс проверки текста программы. Если выбрать k слишком большим, то в таблице k- грамм не будет совпадении. 19 / 31
  • 20. Плюсы и минусы - Выбор значения k не автоматизирован, и из-за этого для программ разной сложности алгоритм будет выдавать не корректные результаты. - Процесс не автоматизирован, только выводит подозрительные участки кода. + Если придумать метод для автоматизации выбора значения k в зависимости от сложности программ, то алгоритм будет выдавать хороший результат 20 / 31
  • 21. I. Метод построения гистограмм II. Метод построения trie – дерева лексем III. Метод отпечатков IV.Метод А. Г. Фенстера V. Анализ методов по отношению к рефал – программам VI. Метод проверки эквивалентности рефал – программ 21 / 31
  • 22. Метод А. Г. Фенстера 1. Удаление всех комментариев 2. Удаление (и/или приписывание) пробелов 3. Переименование идентификаторов 4. Замена ключевых слов на k, чисел на n, идентификаторов и всех остальных строк на i 5. Поиск вхождения подстроки из проверяемой программы в эталонную программу 6. Сравнение коэффициента вложенности с пороговым значением 22 / 31
  • 23. Программа «Hello World» после такого преобразования будет выглядеть так: Как видно из этого примера, слова printf и stdio здесь отнесены к разряду ключевых слов, т.е. ключевые слова – не обязательно те, которые считаются ключевыми в описании языка. Программа на С После преобразования #include # k <stdio.h> < k . i > int main () k i ( ) { printf { k (“Hello,World!n”) ; ( “ i i ! i ” ) ; return 0 ; } k n ; } 23 / 31
  • 24. Плюсы и минусы - Если тот, кто позаимствовал программу потрудился немного видоизменить её, то данный алгоритм не сработает, то есть алгоритм рассчитан на легкие программы. - Порог для автоматического отслеживания плагиата выбирается в ручную, и не всегда верно. + Если автоматизировать процесс подбора порогового значения в зависимости от сложности написанных программ, то алгоритм позволяет легко автоматизировать процесс выявления подозрительных участков программного кода. + 24 / 31
  • 25. I. Метод построения гистограмм II. Метод построения trie – дерева лексем III. Метод отпечатков IV. Метод А. Г. Фенстера V. Анализ методов по отношению к рефал – программам VI. Метод проверки эквивалентности рефал – программ 25 / 31
  • 26. Анализ методов по отношению к рефал-программам Метод построения trie-дерева лексем Метод отпечатков Метод А. Г. Фенстера Метод построения гистограмм - Разбиение кода программы на лексемы + Идея построения из кода программы структурного дерева - Токенизация (представление кода программы как последовательность токенов) + Составление из промежуточных результатов таблицы. - Данный метод не учитывает добавление незначимых функции и т. п. + Можно доработать метод добавлением этапа для удаления незначимых элементов - По анализу гистограмм можно лишь с небольшой точностью найти «подозрительную» программу - Процесс можно автоматизировать частично + Построение (сохранение) и анализ всех промежуточных гистограмм 26 / 31
  • 27. I. Метод построения гистограмм II. Метод построения trie – дерева лексем III. Метод отпечатков IV. Метод А. Г. Фенстера V. Анализ методов по отношению к рефал – программам VI.Метод проверки эквивалентности рефал – программ 27 / 31
  • 28. Метод проверки эквивалентности рефал – программ Шаг 1: Упорядочиваем все переменные Пример: s2 e4 v5 t2 s3 => s1 e1 v1 t1 s2 Шаг 2: Строим дерево (граф) вызовов функции Пример: go = < main > main e1 = < words e1 > < idFunc e1 > words e1 ' ' e2 = < delClone e1 > ' ' < words e2 > e1 = < delClone e1 > delClone e1s1e2s1e3 = e1 < delClone s1e2e3 > e1 = e1 idFunc e1 = e1 Примечания: - если в функции А вызывается функция В, которая уже обрабатывалась, то строится новая вершина B и соответствующее ребро, но данная вершина уже не обрабатывается. go main words delClone idFunc 28 / 31
  • 29. Шаг 3: Удаляем несущественные вершины и ребра (функций) из дерева (графа). Несущественными считаются функции, которые: 1. Ничего не делают (функция idFunc в примере (шаге 2)) Пример: idFunc e1 = e1 2. Передают свой аргумент целиком на вход другой функции Пример: func1 e1 = <func2 e1> 3. Устроены так, что каким либо образом служат промежуточной функцией, то есть, каким то образом выполняется последовательность 1 и 2 правила. Шаг 4: Обрабатываем код программы Для этого двигаемся по обоим деревьям (графам) и последовательно обрабатываем функции которые встретим на звеньях этих деревьев (графов) Метод проверки эквивалентности рефал – программ 29 / 31
  • 30. Литература • 1. П.А. Хаустов, Ю.Я. Кацман Система обнаружения использования чужого программного кода «NoCrib» http://sjs.tpu.ru/journal/article/view/72/119 • 2. А. И. Логинов «Система поиска плагиата» http://elib.bsu.by/bitstream/123456789/95144/1/207-211.pdf • 3. А. Г. Фенстер «Выявление плагиата при проверке студенческих работ» http://info.fenster.name/misc/plagiarism.pdf • 4. С. Иванчегло «Методы выявления плагиата в программировании» http://www.kv.by/index2000491105.htm • 5. Е. И. Большакова, Н. В. Груздева «Основы программирования на языке Рефал» 30 / 31