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

Использование различных способов выявления плагиата исходных кодов в учебном процессе Текст научной статьи по специальности «Компьютерные и информационные науки»

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

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Стрельчёнок Георгий Вадимович, Лепихин Тимур Андреевич, Лабзо Ксения Сергеевна

В статье затрагиваются вопросы исследования и анализа программного кода на предмет заимствования.

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Стрельчёнок Георгий Вадимович, Лепихин Тимур Андреевич, Лабзо Ксения Сергеевна

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

Текст научной работы на тему «Использование различных способов выявления плагиата исходных кодов в учебном процессе»

Стрельчёнок Г.В.1, Лепихин Т.А.2, Лабзо К.С.3

^анкт-Петербургский государственный университет, студент, Neveral @bk . ru

2Санкт-Петербургский государственный университет, доцент, LepikhinTA @gmail . com

3Санкт-Петербургский государственный экономический университет, старший преподаватель,

Goldfishksu@list ru

ИСПОЛЬЗОВАНИЕ РАЗЛИЧНЫХ СПОСОБОВ ВЫЯВЛЕНИЯ ПЛАГИАТА ИСХОДНЫХ КОДОВ В УЧЕБНОМ ПРОЦЕССЕ

КЛЮЧЕВЫЕ СЛОВА

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

АННОТАЦИЯ

В статье затрагиваются вопросы исследования и анализа программного кода на предмет заимствования.

Введение

Некоторое время назад научные и образовательные сообщества стали заинтересованы в выявлении заимствования одних идей другими, т.е. в задаче проверки на плагиат, как в научных статьях, так и в выпускных и прочих работах. Поскольку в настоящее время систем довольно много, то обратим внимание еще на одну проблему этой области — вопрос заимствования программного кода [1].

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

Возможны разнообразные подходы [1] к решению поставленной задачи. Определим важные моменты, по которым такую проверку можно провести:

1. Структура и характеристики программы.

2. Стиль программирования.

3. Идентификационные метки.

Анализ структуры и характеристик программы

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

К особенностям структуры и характеристикам программы следует отнести следующие элементы:

• наличие комментариев и стиль их добавления;

• расположение блочных конструкций, скобок и т.д.;

• порядок формирования функций и их количество;

• вложенность структур;

• частота использования каких-либо операторов.

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

Рассмотрим подробнее одну из указанных характеристик — частоту использования различных операторов. Поскольку количество операторов — неотъемлемая часть алгоритма программы, то частота их использования меняется редко и крайне незначительно.

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

оси ординат — частоты (в процентах) появлений этих операторов.

ЭП т

□ 5 ■□ 15 ВО

Рис. 1. Частота появлений операторов

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

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

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

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

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

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

Анализ стиля программирования

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

п-

□ 5 ш 15 га

Рис. 2. Взаимная корреляция частоты операторов двух программ

5

программирования могут существенно розниться. Это обстоятельство позволяет использовать анализ стиля программирования для доказательства факта заимствования.

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

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

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

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

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

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

Анализ идентификационных меток

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

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

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

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

Заключение

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

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

1.Дисциплина «Практикум на ЭВМ» Санкт-Петербургского государственного университета.

2.Дисциплина «Информатика» Санкт-Петербургского государственного экономического

университета.

3.Олимпиады по информатике и программированию.

4.Проверка кодов программ выпускных квалификационных работ и магистерских диссертаций.

Литература

1. Чепрасов Д.А. Анализ алгоритмов выявления плагиата в кодах программ, написанных на языках высокого уровня. XVIII Международная научно-практическая конференция «Современные техника и технологии». Сер.7: Информатика и управление в технических системах. Томск.

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