Научная статья на тему 'МЕТОДЫ ПРОВЕРКИ УНИКАЛЬНОСТИ ПРОГРАММНОГО КОДА'

МЕТОДЫ ПРОВЕРКИ УНИКАЛЬНОСТИ ПРОГРАММНОГО КОДА Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
921
76
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АТРИБУТНЫЕ И СТРУКТУРНЫЕ МЕТОДЫ / СИНТАКСИЧЕСКОЕ ДЕРЕВО / АНАЛИЗ ИСХОДНОГО КОДА / СОКРЫТИЕ ПЛАГИАТА

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Смирнова Ю.В.

В статье раскрывается понятие плагиата в сфере программирования. Рассматриваются методы создания программного кода при помощи копипаста и способы изменения программы, использование которых означает наличие плагиата. Делается вывод об эффективности и сложности методов проверки программного кода на его уникальность.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «МЕТОДЫ ПРОВЕРКИ УНИКАЛЬНОСТИ ПРОГРАММНОГО КОДА»

УДК 62:004

Ю.В. Смирнова

МЕТОДЫ ПРОВЕРКИ УНИКАЛЬНОСТИ ПРОГРАММНОГО КОДА

В статье раскрывается понятие плагиата в сфере программирования. Рассматриваются методы создания программного кода при помощи копипаста и способы изменения программы, использование которых означает наличие плагиата. Делается вывод об эффективности и сложности методов проверки программного кода на его уникальность.

Ключевые слова: атрибутные и структурные методы, синтаксическое дерево, анализ исходного кода, сокрытие плагиата.

На сегодняшний день в системе образования остро стоит проблема умышленной выдачи чужих материалов или работ за результат собственного творчества. Заимствование чужих мыслей, копирование готовых произведений, присвоение авторства чужих работ, всё это можно назвать одним словом - плагиат. Ученик или студент, сдавая скаченную, купленную или взятую у друга работу, не получает никаких полезных знаний, не набирается опыта и в итоге получает незаслуженную оценку. С точки зрения преподавания получается пустая трата времени и без специальных средств проверки работ на уникальность учащиеся могут свободно «воровать» чужие знания.

В различных институтах, где готовят 1Т-специалистов, от студентов требуется выполнения большого количества работ, связанных с написанием программного кода, созданием компонентов программы и анализом структуры создаваемых проектов. Многие студенты предпочитают использовать уже готовый материал, взятый у одногруппников или купленный в Интернете, вносят незначительные поправки и получают практически ни с чем не схожую на первый взгляд работу. Такое задание проверить на самостоятельность выполнения гораздо труднее, чем скаченную курсовую работу или купленное в Интернете решение, так как с помощью нескольких методов можно изменить код практически до неузнаваемости, не прилагая особых усилий, но при этом алгоритм выполнения останется полностью заимствованным.

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

Понятие плагиат в сфере программирования определяется как непосредственное использование чужого исходного кода программы. Программа может считаться плагиатом другой программы, если она была получена путём изменений исходного кода, которые не затронули логику и алгоритм первоначальной программы. К таким изменениям относятся:

•изменение или удаление комментариев;

•добавление или удаление знаков форматирования;

•изменение имён идентификаторов;

•изменение расположения блоков программы;

•добавление операций, не изменяющих результат программы.

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

Методы модификации программного кода

Для выявления изменений в программном коде, которые никак не сказываются на алгоритме программы, но которые визуально меняют исходный код практически до неузнаваемости, существуют методы модификации программного кода. Все эти методы не всегда дадут стопроцентный результат, но некоторые из них помогут преподавателю при сравнении кодов узнать, какая программа является плагиатом.

Представление программы в виде элемента п-мерного пространства

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

© Смирнова Ю.В., 2019.

Научный руководитель: Якубович Анатолий Николаевич - доктор технических наук, профессор, Московский автомобильно-дорожный государственный технический университет, Россия.

ISSN 2223-4047

Вестник магистратуры. 2019. № 4-2(91)

количество процедур и функций и средняя длина имён переменных. После определения значения координат точка располагается в определённом месте пространства. Далее происходит сравнение местоположения двух точек, принадлежащих сравниваемым программам. Если точки расположены на небольшом расстоянии друг от друга, то считается, что одна программа является плагиатом другой программы.

Построчное сравнение исходного кода

Исходный код рассматривается как текстовое представление. Происходит построчное сравнение, при котором отбрасываются любые значения операндов. Такой метод работает как обычный поисковый сервис, предназначенный для проверки текстовых документов на уникальность. Любое незначительное переименование методов или имён переменных и функций будет означать отсутствие схожести между двумя программами, что делает этот метод наиболее неэффективным при обнаружении плагиата в программном коде.

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

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

Алгоритм построения синтаксического дерева:

1.Построение XML-представления.

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

2.Матрица структуры кода программы.

Для каждого языка программирования определяется своя матрица с определённой размерностью. В первую строку матрицы записываются данные о заголовочных файлах программы. Каждому заголовочному файлу присваивается определённое числовое значение. Если в коде программы имеется данный заголовок, то в первой строке матрицы напротив номера заголовка ставится цифра «1», если заголовок отсутствует, то ставится «0».

Во второй строке матрицы содержится информация о глобальных переменных. Каждый тип переменной имеет своё числовое значение. Далее напротив каждого номера типа глобальной переменной ставится количество глобальных переменных данного типа в коде программы.

В следующих строках матрицы находятся описания всех функций программы. Под эти описания отводятся по две строки для каждой функции. В первой строке в первых n-столбцах хранятся данные о типах возвращаемых значений. Вторая строка в первых n-столбцах содержит информацию о локальных переменных функции выбранного типа, в n+1-столбцах находятся количественные признаки управляющих операторов, которые также пронумерованы.

После описания всех модификаций создаётся матрица, которая содержит информацию о структуре программного кода.

3.Матрица управления программы.

Строится матрица на основе характеристик управления программы. Данная матрица хранит данные о логике программы. Каждая строка матрицы отвечает за последовательность управляющих операторов для каждой из существующих функций. Для определённой функции создаётся массив, содержащий порядок следования операторов управления внутри самой функции.

4.Оценка схожести двух программ.

Создаётся обобщённая расширенная матрица, которая содержит сведения из полученных ранее числовых матриц. Данная матрица хранит информацию о структуре программы. Состав матрицы:

•Колонка, соответствующая заголовкам программы;

•Колонка глобальных переменных;

•Колонка возвращаемых значений;

•Колонка аргументов;

•Колонка локальных переменных с соответствующими типами управления;

•Колонка последовательностей типов операторов управления определённой функции.

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

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

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

Данный метод подразумевает отбрасывание бесполезных характеристик и выполняется на основе существенных данных кода программы.

Алгоритм метода токенизации состоит из двух этапов:

•Представление операторов в виде токенов. В зависимости от выбранного языка программирования составляется список присущих ему операторов. Каждому оператору ставится в соответствие уникальное числовое значение (токен). Операнды в этом методе не задействуются.

•Создание последовательности токенов. Из полученных на первом этапе токенов строится последовательность, в которой сохраняется порядок следования всех операторов. На этом этапе отбрасываются все знаки форматирования.

После получения последовательностей от каждой программы создаются таблица сопоставления операторов. По данной таблице строится график, где на оси Х откладываются порядковые номера операторов, а на оси Y - место оператора в исходном коде. На графике будут получены две линии, каждая из которых соответствует определённой программе. При совпадении линий на некоторых участках делается вывод о заимствовании части кода одной программы в другой, что свидетельствует о наличии плагиата.

Таблица 1

Сравнение методов проверки уникальности программного кода_

№ Название метода Плюсы Минусы

1 Представление программы в виде элемента п-мерного пространства Наглядность представления Выдает много ложных совпадений, легко обмануть при поверхностном изменении кода

2 Построчное сравнение исходного кода Быстрота выполнения, подходят on-line сервисы проверки на плагиат Код рассматривается как текст, неэффективен

3 Создание синтаксического дерева по коду программы Процедура сравнения сведена к анализу числовых матриц, возможность использования стандартных средств работы с xml Ограниченность применения, подходит только для процедурных языков, оценка близости осуществляется попарно

4 Токенизация Отбрасывание бесполезных характеристик, заимствование выявляются даже при смене местоположения Зависимость от конкретного языка программирования

Библиографический список

1. Дороганов В.С, Суханова Е.Ю. Способы выявления плагиата в исходном коде программ // Информационно -телекоммуникационные системы и технологии (ИТСиТ-2014). - Кемерово: Кузбас. гос. техн. ун-т им. Т.Ф. Горбачева, 2014. - С. 176.

2. Дороганов В.С, Суханова Е.Ю. Способы выявления плагиата в исходном коде программ студентов // Информационные системы и технологии в образовании, науке и бизнесе (ИСиТ-2014). - Кемерово: Кузбас. гос. техн. ун-т им. Т.Ф. Горбачева, 2014. - С. 85-86.

3.Плагиат // Copyright.ru URL:http://www.copyright.ru/ru/documents/zashita_avtorskih_prav/plagiat/ (дата обращения: 02.02.2017).

4. Антиплагиат URL: http://www.antiplagiat.ru/ (дата обращения: 02.02.2017).

5. Обзор автоматических детекторов плагиата в программах // URL:http://logic.pdmi.ras.ru/~yura/detector/survey.pdf (дата обращения: 03.02.2017).

6.Seo-Young S.K. An XML Plagiarism Detection Model for Procedural ProgrammingLanguages, URL:http://ar-chives.cs.iastate.edu/documents/disk0/00/00/03/32/00000332-00/xpdec_03-14.pdf (дата обращения: 03.02.2017).

СМИРНОВА ЮЛИЯ ВАЛЕРЬЕВНА - магистрант, Московский автомобильно-дорожный государственный технический университет, Россия.

i Надоели баннеры? Вы всегда можете отключить рекламу.