Регистрация / Вход
Прислать материал

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

Сведения об участнике
ФИО
Коренев Артем Аркадьевич
Вуз
Федеральное государственное автономное образовательное учреждение высшего профессионального образования "Национальный исследовательский университет "Высшая школа экономики"
Тезисы (информация о проекте)
Область наук
Информационные технологии и вычислительные системы
Раздел области наук
Информационные технологии
Тема
Программа выявления плагиата в исходных кодах на языке программирования Java
Резюме
Статья посвящена проблеме обнаружения плагиата в исходных кодах программ на языке Java. Был выделен ряд типичных изменений, которыми могут подвергаться документы для сокрытия факта плагиата. Проведен обзор существующих подходов и популярных продуктов, выявляющих плагиат в текстах программ. Разработан и подробно описан алгоритм обнаружения плагиата, состоящий из двух этапов: применение генерализации исходного кода и использование метода поиска и сравнения отпечатков. Описан метод обнаружения совпавших областей в парах документов. На основе теоретической части работы было разработано программное обеспечение, а также проведено его тестирование на различных видах данных.
Ключевые слова
плагиат, плагиат в исходном коде, поиск плагиата, поиск плагиата в исходном коде, поиск и сравнение отпечатков
Цели и задачи
Основной целью проекта является разработка программы, позволяющей выявлять случаи плагиата в документах исходного кода на языке Java. Также необходимо учесть, что работа, являющаяся плагиатом, может быть изменена, чтобы снизить шанс обнаружения факта плагиата.
Можно выделить ряд таких изменений, которые могут быть применены к работам:
1. изменение комментариев кода;
2. изменение количества переносов строк, пробелов и отступов;
3. изменение типов переменных или возвращаемых значений функций на аналогичные (что может незначительно сказаться на выполнении программы. Например, снижение или повышение точности в переменных с плавающей запятой);
4. переименование переменных и функций;
5. замена строковых и символьных констант;
6. перестановка блоков кода;
7. добавление «ненужных» блоков кода (т.е. таких, которые практически не влияют на исполнение программы);
Данный список изменений может выступать набором критериев для проверки эффективности алгоритма. Целью работы является разработка и реализация алгоритма, способного обнаруживать плагиат между заданным набором документов исходного кода на языке программирования Java, имеющего слабую чувствительность по отношению к типам изменений, перечисленных выше.
Введение

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

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

Методы и материалы

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

  • Высокая скорость работы.
  • Устойчивость к перестановкам частей документа.
  • Относительно простая реализация.
  • Устойчивость к шумам (т.е. вставке дополнительных участков текста в изначальный документ).

Использование данного алгоритма, однако, не решает задачу обнаружения плагиата полностью, а решает только проблемы, связанные с изменениями типов (6) и (7). Алгоритм находит совпадающие части в парах документов, но чувствителен к изменениям типов (1) - (5).

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

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

Описание и обсуждение результатов

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

Были также подобраны оптимальные входные параметры h и k алгоритма поиска и сравнения отпечатков, при которых достигается наиболее высокая эффективность нахождения совпадений между документами.

Помимо этого было разработано программное обеспечение, состоящее из нескольких функциональных частей:

  1. Реализация алгоритма обнаружения плагиата (Core).
  2. Серверное приложение для предоставления сервиса обнаружения плагиата посредством обмена сообщений в формате JSON по протоколу HTTP (Server).
  3. Клиентское приложение для предоставления возможности использовать сервис поиска плагиата, предоставляемый сервером (Client).

Было проведено тестирование данного программного обеспечения на двух различных типах входных данных:

  1. Тестирование с использованием реальных работ студентов без их редактирования;
  2. Тестирование с использованием реально существующих работ студентов и их измененных версий, которые были получены путем применения к ним типов изменений, описанных выше.

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

Стоит обратить внимание, что некоторые конструкции языка программирования Java являются общепринятыми, то есть используются часто и почти во всех программах. Они могут быть отмечены данным алгоритмом как совпадающие части (например, инициализация массива в цикле). По этой причине решение о факте плагиата между двумя работами должно приниматься исключительно человеком, который может принимать во внимание результаты работы программы.

Используемые источники
1. Roy, Chanchal Kumar;Cordy, James R., «A Survey on Software Clone Detection Research», Queen's University, Canada, 2007.
2. MOSS – A System for Detecting Software Plagiarism [Электронный ресурс] //URL: http://theory.stanford.edu/~aiken/moss/
3. Brin S., David S., «Copy Detection Mechanisms for Digital Documents», Stanford University, Stanford, 2001.
4. Schleimer S., Wilkerson D., Aiken A., «Winnowing: Local Algorithms for Document Fingerprinting», Stanford University, Stanford, 2003.
5. Broder A., «On the resemblance and containment of documents», DIGITAL Systems Research Center, Palo Alto, 1997.
6. Marković A., Rakočević S., «PROCEEDINGS OF THE XIV INTERNATIONAL SYMPOSIUM SYMORG 2014: MODELS AND SUSTAINABLE COMPETITIVENESS», SYMORG, Zlatibor, 2014.

Полный список используемых источников представлен в документе работы.
Information about the project
Surname Name
Korenev Artem
Project title
Java Source Code Plagiarism Detector
Summary of the project
The paper is dedicated to the problem of plagiarism detection in Java source code. We provide a list of typical code modifications which can be applied to the works in order to hide the fact of the plagiarism. We also overview known approaches and popular tools that solves current problem. Then we describe the designed algorithm for plagiarism detection which consists of two stages: applying the algorithm of source code generalization and using the document fingerprinting algorithm. We also introduce the approach for detection of similar parts in pairs of documents. Finally, we present the developed software for source code plagiarism detection and its testing on various data sets.
Keywords
plagiarism, source code plagiarism, plagiarism detection, source code plagiarism detection, document fingerprinting