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

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

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

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

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

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

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

132

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

+ [О] —>N02 (нитро-группа); 2) ОН +[0] —> СООН (ацетатная группа); 3) -С=С- + [О] -» С -СН-СН2; С=С=С + [О] -► С-СН-СТТ -

О О

эпоксидные циклы.

8. Ароматических соединений не обнаружено ни в нефтешламах, ни в АПД.

Заключение

Новые объекты, представленные для исследований, ближе по структуре и физико-химическим свойствам к битуму нефтяному дорожному вязкому БНД 60/90. Температура размягчения БНД 60/90 не ниже 47 °С, (аПд 50 °С), температура вспышки в открытом тигле не ниже 230°С (АПД 263°С), плотность 0,9-1,1 г/см3 (АПД 0,997 г/см3). Сцепление битума с мрамором и сталью - выдерживает (АПД - выдерживает). Единственное различие этих объектов составляет наличие или отсутствие ароматических углеводородов. В АПД и НШ ароматику не идентифицировали. Если соединить новые объекты с «Асмолом-Х», то физико-механические характеристики должны увеличиться, а если осуществить синтез АПД и НШ с окислителями в интервале температур 120-300 °С, то получим «Асмол-ХХ». И в том, и в другом случаях, результаты будут положительными [2, 3].

Список литературы:

1. Преч Э., Бюльманн Ф., Аффольтер К. Определение строения органических соединений. - М.: Мир 2006. - 438с.

2. Навотного О.И., Стекольникова А.А., Решетова В.А., Ромаденкиной С.Б. Получение новых видов изоляционных мастик на основе асфальтосмолистых олигомеров, получаемых из нефтяных асфальтов // Известия Саратовского университета. Сер. Химия. Биология. Экология. - 2013. - В. 4, Т. 13. - С. 27-30.

3. Черкасов Н.М., Гладких И.Ф., Гумеров К.М. Асмол и новые изоляционные материалы для подземных трубопроводов. - М.. 2005. - 205 с.

УВЕЛИЧЕНИЕ СТОЙКОСТИ МЕТОДА ТОКЕНИЗАЦИИ К ВНЕСЕНИЮ ИЗМЕНЕНИЙ ПРИ ОБНАРУЖЕНИИ ПЛАГИАТА В ИСХОДНОМ КОДЕ

© Сорокин Д.С.*, Шиков А.Н.*

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

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

* Магистрант кафедры Интеллектуальных технологий в гуманитарной сфере.

* Доцент кафедры Интеллектуальных технологий в гуманитарной сфере, кандидат технических наук.

Технические науки

133

различных расширениях для реорганизации кода, которые помогают программисту следовать принципу «не повторяй себя». Наиболее остро проблема обнаружения дублирующих фрагментов кода встает при разработке детекторов плагиата, так как необходимо учитывать изменения, которые могут вноситься в оригинальные фрагменты кода. Всего выделяют четыре типа таких изменений [1]:

- 1 тип - идентичные фрагменты код, за исключением изменений в пробельных символах, отступах и комментариях;

- 2 тип - синтаксически идентичные фрагменты кода, за исключением имен идентификаторов, строковых литералов, типов переменных и всех изменений, свойственных 1 типу;

- 3 тип - один фрагмент кода был получен путем копирования другого, но с внесением изменений, таких как, вставка, удаление или изменение операторов. Сохраняются все изменения свойственные 2 типу;

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

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

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

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

int fact(int n) { int fact(int n) {

Чтобы сравнить приведенные фрагменты кода необходимо получить их токенизированное представление. Для простоты будем использовать 5 типов токенов: ключевые слова (Keyword), идентификаторы (Identifier), разделители (Delimiter), операции (Operation) и числовые значения (Number). В соответствии с этими типами получим следующее представление:

if п <= 0 return 1; return n * fact(n - 1);

if n <= 0 return 1; else return n * fact(n - 1);

}

}

Рис. 1. Фрагменты кода с изменениями 3 типа

134

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

KIDKIDD KIDKIDD

KIONKND KIONKND

KIOIDIONDDD KKIOIDIONDDD

Рис. 2. Представление фрагментов кода последовательностями токенов

Далее остается сравнить полученные представления, например, с помощью алгоритма поиска наибольшей общей подпоследовательности [4]. Обычно детекторы плагиата позволяют пользователю задавать параметр N, который означает минимально-допустимую длину совпадающих подпоследовательностей токенов. Например, если для полученных представлений параметр N положить равным 30 (в некоторых исследованиях отмечают, что это оптимальное значение параметра N [3]), то не будет найдено ни одного совпадения, так как длина полученных последовательностей меньше 30 токенов. В случае N = 15 будет найдено одно совпадение и только при N = 10 будет найдено два совпадения, которые представлены следующими кортежами:

(K, 0, K, 14, K, 0, K, 14)

(I, 15, D, 24, I, 16, D, 25)

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

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

D = max(\last(Д) - first(B )| -1, ^ast(A2) - first(B2) -1)

Функции last() и first() возвращают, соответственно, первую и последнюю позиции токена в кортеже.

При этом не имеет особого смысла вычислять дистанцию на подпоследовательностях длинной не меньшей N, так как они нас по определению устраивают, поэтому необходимо ввести параметр ND < N, который будет использоваться вместо N для предварительного формирования кортежей. Для нашего примера положим ND = 10, а N = 20 и вычислим дистанцию для приведенных ранее кортежей:

Технические науки

135

D = |14 -15 -1 = 0 D = \14 -16| -1 = 1 D = max(D, D) = max(0,1) = 1

Таким образом, дистанция между двумя кортежами равняется одному токену. Если дистанция не превышает некоторого заранее заданного значения максимально-допустимой дистанции Dmax, то есть «разрешенного» количества вставок между двумя фрагментами кода, то тогда соответствующие кортежи следует объединить в один:

(K, 0, D, 24, K, 0, D, 25)

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

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

void foo(void) {

void foo(void) {

}

void bar(void) { }

}

void baz(void) {...} void bai(void) {

}

Рис. 3. Фрагменты кода с разной дистанцией

Предположим, что функции foo() и bar() совпадают в обоих файлах. Для первого файла дистанция между ними равняется 0, таким образом, если бы мы не учитывали дистанцию между ними для второго файла, то ложно бы их объединили в один кортеж.

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

136

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

использовании метода токенизации. В дальнейшем планируется провести серию экспериментов с целью установить наиболее оптимальные значения для параметров ND и Dmax.

Список литературы:

1. Chanchal K. Roy, James R. Cordy, Rainer Koschke. Comparison and Evaluation of Clone Detection Techniques and Tools: A Qualitative Approach // Science of Computer Programming. - 2009. - Vol. 74, Issue 7. - P. 470-495.

2. Jurrian Hage, Peter Rademaker, Nike van Vugt A comparison of plagiarism detection tools // Technical Report UU-CS-2010-015, June 2010, Department of Information and Computing Science Utrecht University, Utrecht, The Netherlands.

3. Toshihiro Kamiya, Shinji Kusumoto, Katsuro Inoue. CCFinder: A Multilinguistic Token-Based Clone Detection System for Large Scale Source Code // Transactions on Software Engineering. - 2002. - Vol. 28 (7). - Р. 654-670.

4. Описание алгоритма для нахождения наибольшей общей подстроки [Электронный ресурс] / Национальный институт стандартов и технологий (США). - Режим доступа: http://xlinux.mst.gov/dads/HTML/longestCommon-Substring (дата обращения: 04.04.2014).

5. Расстояние Левенштейна [Электронный ресурс] // Свободная электронная энциклопедия [Офиц. сайт]. - Режим доступа: http://ru.wikipedia.org/ wiki/Расстояние_Левенштейна (дата обращения: 04.04.2014).

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

© Тютюнников Н.Н.*

Центральный научно-исследовательский институт экономики, информатики и систем управления, г. Москва

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

Ключевые слова программное средство, модель COCOMO II, оценка затрат, размер исходного кода, адаптируемый и повторно используемый исходный код.

* Ведущий научный сотрудник Центра информационных ресурсов, кандидат технических наук, старший научный сотрудник.

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