31
Методы автоматического выявления плагиата в текстах компьютерных программ Исполнитель: Багдатов Мурат (425 группа) Научный руководитель: Баева Н. В. 1 / 31

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

  • Upload
    -

  • View
    195

  • Download
    1

Embed Size (px)

Citation preview

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

Методы автоматического выявления

плагиата в текстах компьютерных

программ

Исполнитель: Багдатов Мурат (425 группа)

Научный руководитель: Баева Н. В.

1 / 31

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

Основные термины

• Токены – замещение объекта неким обозначением/ идентификатором (часто просто целым числом или строкой)

• Токенизация – разбиение исходного текста (кода программы) на токены

• Trie-дерево (Префиксное дерево) –структура данных для реализации словаря (ассоциативного массива), ключами в котором являются строки

itA

to

teated ten inn

inten

n

it

o e

a nd

A

11

5

91243

7

15

2 / 31

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

Содержание

I. Метод построения гистограмм

II. Метод построения trie – дерева лексем

III. Метод отпечатков

IV. Метод А. Г. Фенстера

V. Анализ методов по отношению к рефал – программам

VI. Метод проверки эквивалентности рефал – программ

3 / 31

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

Метод построения гистограмм

Какие характеристики программы можно использовать в качестве доказательства факта заимствования?

• Эти характеристики должны слабо меняться в случае модификации программы или включения фрагментов одной программы в другую

• Имена процедур и переменных, текстовые строки и тому подобное не должны использоваться для получения характеристик

• Лучше всего подойдет последовательность операторов программы

4 / 31

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

Метод построения гистограмм

1. Построение гистограммы по количеству появления

операторов в коде программы (для обеих программ)

2. Построение гистограммы исходя из анализа частоты

появления операторов и получение взаимной корреляции

операторов

3. Анализ всех промежуточных гистограмм для выявления

подозрительных» программ

5 / 31

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

Гистограмма по частоте

0

5

10

15

20

25

30

if else for while do return case break continue try catch

6 / 31

Page 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

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

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

Данные для гистограммы по появлению в программе

Оп1[1]

Оп1[2]

Оп1[3]

Оп1[4]

Оп2[1]

Оп2[2]

Оп2[3]

Оп2[4]

Оп2[5]

Оп2[6]

8 / 31

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

0

2

4

6

8

10

1 2 3 4 5 6 7 8 9 10 11

Гистограмма по появлению в программе

9 / 31

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

Плюсы и минусы

- Близкие значения характеристик двух различных программ не означают,

что в одной программе присутствуют фрагменты другой

+ Он позволяет легко автоматизировать процесс выявления

подозрительных участков программного кода

+ При использовании совместно с другими методами может дать

значительные результаты

10 / 31

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

I. Метод построения гистограмм

II.Метод построения trie – дерева лексем

III. Метод отпечатков

IV. Метод А. Г. Фенстера

V. Анализ методов по отношению к рефал – программам

VI. Метод проверки эквивалентности рефал – программ

11 / 31

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

• алгоритм должен распознавать основные ключевые слова языка;

• переменные не должны считаться различными, если они отличаются только

именем;

• при обмене местами двух функций код не должен распознаваться как совершенно

другой;

• аналогичный принцип применим для строк внутри функций: существуют строки,

перестановка которых не приводит к изменению функциональности программы;

• при анализе все комментарии в коде должны игнорироваться, аналогично

игнорируются пробельные символы и переводы строк.

Каким требованиям должен удовлетворять алгоритм ?

12 / 31

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

Метод построения trie-дерева лексем

1. Разбиение кода программы на лексемы и присвоение

каждой из них индивидуального идентификатора

2. Построение trie-дерева лексем для каждой программы

3. Проверка вложенности всех поддеревьев из первого дерева

во второе и наоборот

4. Расчёт коэффициента схожестиПример

13 / 31

Page 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

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

Расчёт коэффициента схожестиY – количество вершин в самой ветке (эталонный код).

X – количество вершин, посещенных до этого момента в сравниваемой программе (второй код).

Для оценки общей схожести исходных кодов используется значение x = C / Z,

где C –сумма X^2 для всех веток,

Z – сумма Y^2 для всех веток.

Функция оценки схожести кодов имеет вид:

и принимает значения от 0 (абсолютная различимость) до 100 (абсолютная идентичность).

Замечания

• Для того чтобы с ростом X

росла существенность ошибки, в оценке используются квадраты значений X и Y.

• Очевидно, что если в дереве присутствует искомая ветка, то X = Y, в остальных случаях X < Y.

Следовательно, чем меньше число X, тем меньше совпадение данной ветки лексем второго кода

с веткой дерева лексем первого кода.15 / 31

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

Плюсы и минусы

- Разбиение кода программы на лексемы, из-за этого данный

алгоритм не применим к программам, написанным на

функциональных языках программирования

+ Идея построения из кода программы структурного дерева,

которая подходит как для императивных, так и для

функциональных языков программирования

16 / 31

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

I. Метод построения гистограмм

II. Метод построения trie – дерева лексем

III.Метод отпечатков

IV. Метод А. Г. Фенстера

V. Анализ методов по отношению к рефал – программам

VI. Метод проверки эквивалентности рефал – программ

17 / 31

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

Метод отпечатков

1. Последовательно обрабатываем 2 подстроки

токенизированной программы P длины k

2. Выделяем некоторое подмножество их k-грамм.

Проделываем те же шаги для токенизированных программ

Т1, Т2, … Тn и помещаем k-граммы в таблицу

3. С помощью сравнения таблиц k-грамм получаем множество

совпадений – кандидатов на плагиат

4. Анализ данных и выводы

18 / 31

Page 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

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

Плюсы и минусы

- Выбор значения k не автоматизирован, и из-за этого для программ

разной сложности алгоритм будет выдавать не корректные результаты.

- Процесс не автоматизирован, только выводит подозрительные участки

кода.

+ Если придумать метод для автоматизации выбора значения k в

зависимости от сложности программ, то алгоритм будет выдавать

хороший результат

20 / 31

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

I. Метод построения гистограмм

II. Метод построения trie – дерева лексем

III. Метод отпечатков

IV.Метод А. Г. Фенстера

V. Анализ методов по отношению к рефал – программам

VI. Метод проверки эквивалентности рефал – программ

21 / 31

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

Метод А. Г. Фенстера

1. Удаление всех комментариев

2. Удаление (и/или приписывание) пробелов

3. Переименование идентификаторов

4. Замена ключевых слов на k, чисел на n, идентификаторов ивсех остальных строк на i

5. Поиск вхождения подстроки из проверяемой программы в эталонную программу

6. Сравнение коэффициента вложенности с пороговым значением

22 / 31

Page 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

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

Плюсы и минусы

- Если тот, кто позаимствовал программу потрудился немного видоизменить её, то данный алгоритм не сработает, то есть алгоритм рассчитан на легкие программы.

- Порог для автоматического отслеживания плагиата выбирается в ручную, и не всегда верно.

+ Если автоматизировать процесс подбора порогового значения в зависимости от сложности написанных программ, то алгоритм позволяет легко автоматизировать процесс выявления подозрительных участков программного кода.

+

24 / 31

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

I. Метод построения гистограмм

II. Метод построения trie – дерева лексем

III. Метод отпечатков

IV. Метод А. Г. Фенстера

V. Анализ методов по отношению к рефал –

программам

VI. Метод проверки эквивалентности рефал – программ

25 / 31

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

Анализ методов по отношению к рефал-программам

Метод построения

trie-дерева лексем

Метод отпечатков Метод

А. Г. Фенстера

Метод построения гистограмм

- Разбиение кода

программы на

лексемы

+ Идея

построения

из кода

программы

структурного

дерева

- Токенизация

(представление кода

программы как

последовательность

токенов)

+ Составление из

промежуточных

результатов

таблицы.

- Данный метод

не учитывает

добавление

незначимых

функции и т. п.

+ Можно

доработать

метод

добавлением

этапа для

удаления

незначимых

элементов

- По анализу гистограмм

можно лишь с небольшой

точностью найти

«подозрительную»

программу

- Процесс можно

автоматизировать частично

+ Построение (сохранение)

и анализ всех

промежуточных

гистограмм

26 / 31

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

I. Метод построения гистограмм

II. Метод построения trie – дерева лексем

III. Метод отпечатков

IV. Метод А. Г. Фенстера

V. Анализ методов по отношению к рефал – программам

VI.Метод проверки эквивалентности рефал –

программ

27 / 31

Page 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

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

Шаг 3: Удаляем несущественные вершины и ребра (функций) из дерева (графа).

Несущественными считаются функции, которые:

1. Ничего не делают (функция idFunc в примере (шаге 2))

Пример: idFunc e1 = e1

2. Передают свой аргумент целиком на вход другой функции

Пример: func1 e1 = <func2 e1>

3. Устроены так, что каким либо образом служат промежуточной функцией, то есть,

каким то образом выполняется последовательность 1 и 2 правила.

Шаг 4: Обрабатываем код программы

Для этого двигаемся по обоим деревьям (графам) и последовательно обрабатываем

функции которые встретим на звеньях этих деревьев (графов)

Метод проверки эквивалентности рефал – программ

29 / 31

Page 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

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

СПАСИБО ЗА ВНИМАНИЕ

31 / 31