Научная статья на тему 'Метод просеивания для выявления плагиата в программном коде на языке C#'

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

CC BY
631
210
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПЛАГіАТ / C# / МЕТОД ПРОСіЮВАННЯ / іДЕНТИФіКАЦіЙНі МіТКИ / ДЕТЕКТОР / PLAGIARISM / SCREENING METHOD / IDENTIFICATION TAGS / DETECTOR / ПЛАГИАТ / МЕТОД ПРОСЕИВАНИЯ / ИДЕНТИФИКАЦИОННЫЕ МЕТКИ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Яшин Гліб Євгенович, Хмелюк Марина Сергіївна

АНОТАЦІЯ У статті розглядається питання про те, що таке плагіат. Перераховані моделі представлення програмного коду, а також метод токенізації. Описана суть методу просіювання і алгоритму пошуку плагіату у програмному коді на основі цього методу. В результаті були зроблені висновки і проведений практичний експеримент для демонстрації того, що розроблений алгоритм на поступається комерційним аналогам, а в деяких випадках навіть перевершує їх. Ключові слова: плагіат, C#, метод просіювання, ідентифікаційні мітки, детектор.

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

SUMMARY The article discusses s problem of a plagiarism. At the beginning describes the models of program representation, and tokenization method. The screening method was described as well as the source code plagiarism detection algorithm based on this method. As a result, conclusions were drawn and practical experiment was made to prove that developed algorithm is equal to commercial counterparts, and in some cases even exceeds them.

Текст научной работы на тему «Метод просеивания для выявления плагиата в программном коде на языке C#»

где

I(t).

ток входного импульсного воздействия.

X

Согласно модели перехода [5], в момент ( кр1 ) ток

(

is-b (t )

) достигает первого критического значения ( кр1 )

t

и соответственно в момент ( кр2 ) ток достигает второго

I

критического значения ( кр2). Из соотношения (12) можно определить !вх.1 и !вх.2. При этом, временем переключения (^) (срабатывания) является разность

t

кр2

t

кр1

. Следовательно, приравняв выражения для тока (11)

соответственно (

1кр1 ) или (1кр2

) можем определить мо-

менты времени кр1, кр2 и вычислить время переключения защитного устройства:

е_а^ кр1(2) _ e_a2t кр1(2) = :2

кр1(2) и р( ) ит . (13)

Разложив экспоненциальную функцию и квадратный корень в ряды (Маклорена), получим следующее выражение для времени переключения tзу= ^ :

A • (I

2

- I2,)

At = -

кр2 кр1' Ит • (а2 _ а1) . (14)

Подставим выражения (2,3) в соотношении (10), получим следующее соотношение для определения времени переключения защитного устройства:

2 • л

pn • X • arc cos(1 -

At =

X

• h д )f

2 • n • S • (a2 - ai)

1кр2 -

1кр1

Л

I

кр2

. (15)

Расчёты показывают, что время S-N перехода или время срабатывания рассматриваемого защитного устройства в зависимости от характеристик импульсного воздействия, имеет значение 1зу <10-12 с.

Все выше изложенное имеет место при условии распространения в волноводе основного типа волны Ш0. Неоднородности на поверхности ВТСП не оказывают существенного влияния на распространение основного типа волны (Н10) [5]. Такое устройство способно пропускать полезные сигналы в широком диапазоне частот (0,5-10 ГГц) с малым коэффициентом затухания р = (0,01-0,1 Дб) [3].

Таким образом, рассмотренное сверхпроводящее ЗУ является практически безинерционным (время переключения меньше 10-10) и обеспечивает надежную защиту РЭА как от мощных продолжительных шумовых сигналов, так и мощных коротких импульсных воздействий.

^исок литературы

1. Уильямс Дж. Сверхпроводимость и её применение в технике. M: Изд. Мир, 1973. 180 с.

2. Антенные устройства СВЧ. Расчёт и проектирование антенных решеток и их излучающих элементов. /Под ред. профессора Д. И. Воскресенского. М.: Сов. радио, 1972. 180 с.

3. Ширман Я.Д. Радиоволноводы и объемные резонаторы, М: Радио и связь, 1959. 380 с.

4. Шубарин Ю.В. Антенны сверхвысоких частот. Харьков: Изд. ХГУ, 1960, 178 с.

5. Кучер Д.Б. Мощные электромагнитные излучения и сверхпроводящие защитные устройства. Севастополь: Ахтиар 1997. 180 с.

МЕТОД ПРОС1ЮВАННЯ ДЛЯ ВИЯВЛЕННЯ ПЛАГ1АТУ У ПРОГРАМНОМУ

КОД1 МОВОЮ C#

Яшин Гтб Свгенович

студент, Нацюнальний техн1чний утверситет Украти "Кшвський полтехн1чний тститут "

Хмелюк Марина Сергивна

асистент кафедри автоматики iуправлгння, Нацюнальний техтчний унгверситет Украти "Кшвський полтехнгчний

iнститут "

МЕТОД ПРОСЕИВАНИЯ ДЛЯ ВЫЯВЛЕНИЯ ПЛАГИАТА В ПРОГРАММНОМ КОДЕ НА ЯЗЫКЕ C# Яшин Глеб Евгеньевич, студент, Национальный технический университет Украины "Киевский политехнический институт "

Хмелюк Марина Сергеевна, ассистент кафедры автоматики и управления, Национальный технический университет Украины "Киевский политехнический институт"

SCREENING METHOD FOR C# SOURCE CODE PLAGIARISM DETECTION Iashyn G.I., student, National Technical University of Ukraine "Kyiv Polytechnic Institute" KhmeliukM.S., assistant, National Technical University of Ukraine "Kyiv Polytechnic Institute" АНОТАЦ1Я

У статтi розглядаеться питання про те, що таке плагiат. Перераховаш моделi представлення програмного коду, а також метод токешзаци. Описана суть методу проствання i алгоритму пошуку плагiату у програмному кодi на основi цього методу. В результатi були зробленi висновки i проведений практичний експеримент для демонстраци того, що розроблений алгоритм на поступаеться комерцтним аналогам, а в деяких випадках навть перевершуе 1х. Ключовi слова: плагiат, C#, метод проаювання, iдентифiкацiйнi мiтки, детектор. АННОТАЦИЯ

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

Ключевые слова: плагиат, C#, метод просеивания, идентификационные метки, детектор.

SUMMARY

The article discusses s problem of a plagiarism. At the beginning describes the models ofprogram representation, and tokenization method. The screening method was described as well as the source code plagiarism detection algorithm based on this method. As a result, conclusions were drawn and practical experiment was made to prove that developed algorithm is equal to commercial counterparts, and in some cases even exceeds them.

Key words: plagiarism, C#, screening method, identification tags, detector.

Вступ

Можливють легкого кошювання шформацп, представлено! в електронному вигляд^ призвела до виник-нення багатьох проблем, пов'язаних i3 порушенням ав-торських прав. Зараз, в перюд штенсивного розвитку шформацшних технологш, штелектуальна власшсть стае все б№ш цшною. У зв'язку i3 значним зростанням обсягiв такого виду власносп виникае необхiднiсть у потужних автоматичних iнструментах для захисту авторських прав, для iнспектування та перевiрки авторства, для знаход-ження плагiату.

Плагiат - вид порушення авторських прав. Примус до ствавторства також розглядаеться як плагiат.

Види представлення програмного коду

• У виглядi елемента «n-вимiрного» простору

Ранш системи з виявлення плагiату представляли

програму, як крапку в n-шрному просторi натуральних чисел з нулем, i-а координата яко! - шльшсна характеристика одше! з властивостей / атрибупв вое! програми. Наприклад, такими властивостями можуть бути:

■ середня довжина рядка коду

■ кшьшсть оголошених локальних, глобальних

змшних

■ середня довжина назв змшних

■ кшьшсть операторiв розгалуження

■ кшьшсть виклику функцiй

Якщо точки двох програм лежать поруч, то одна з них е тдозрою на плапат на iншу.

Зазвичай такi системи називають "системами тд-рахунку атрибупв" (attribute-counting systems): щоб визна-чити наск1льки близько лежать точки двох програм, зазвичай на них тдраховуеться метрика (наприклад, Евктдова вщстань) або ж визначаеться 1х кореляцiя.

У таких систем е два основних недолши:

■ вони видають дуже багато помилкових збшв

■ при досить поверхневш змiнi коду оригiнала не

знаходять плагiат.

• У виглядi звичайного тексту

Деяк1 системи виявлення плапату розглядають вихвдний код "як е". Наприклад, так роблять детектори плапату, як1 працюють з кодом так само, як i зi звичай-ними текстами. Але вони вкрай неефективнi для вирь шення задачi пошуку плагiату, оск1льки перейменування функцш i змiнних або несуттевi змши в кодi е серйозними перешкодами для 1х належного функцiонування.

• Токешзащя

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

Нехай у нас е два рядки коду for (int i = 0; i <= n; i + +) i for (int j = 0; (j - 1) <n; j ++). Очевидно, що в них закла-дена однакова функцюнальшсть, i плапатор мiг з одше! отримати iншу без особливих зусиль, а для рашше описа-них уявлень вони абсолютно рiзнi. Щоб боротись з такого

роду засобами приховування плапату було придумано то-кешзоване подання коду. Основна iдея цього подання - це збереження ютотних i iгнорування всiх поверхневих деталей коду програми. Процедура токешзацп виглядае при-близно так:

1) Кожному оператору мови (^м порожнього - його ^норуемо), який не е операндом, приписуемо код, призначений заздалегiдь для кожного класу опера-торiв. Також коди можна приписувати блоковим операторам (наприклад, begin / end, {}), тдключен-ням бiблiотек, заголовних файлiв тощо.

2) Будуемо рядок з отриманих кодiв, зберiгаючи порядок слщування 1х у програмному кодг Один символ рядка (токен) - код одного оператора.

Таким чином ми автоматично пноруемо назви функцiй i змiнних (класiв, об'ектiв i так дат), роздiловi символи, запобiгаемо вплив дрiбних змiн коду.

До одного класу операторiв зазвичай вiдносять п, яким вiдповiдае один код мови програмування, всi вик-лики функцш, виклику методiв класiв, оголошення змшних елементарних титв, оголошення екземплярiв класу.

Методи, що використовують токешзацп, можуть також використовувати семантичну шформацш про керу-ючi структури мов програмування. Наприклад, будь-як цикли можуть бути замшеш на токени типу <BEGIN_LOOP>... <END_LOOP>.

1снують два основнi недолiки, пов'язаних з то-кенiзацiею:

1) Будь-який токенiзатор залежить вiд мови. Тому окрема процедура необхщна для кожно! мови про-грамування.

2) Детектори, що займаються токешзащею файлiв ста-ють все б№ш "парано1'дальними". Розбиття на токени збшьшуе ступiнь подiбностi мiж будь-якими двома фрагментами програми, тому збшьшуеться вiрогiднiсть хибного знаходження плагiату. Токешзащя програмного коду

Процес токешзацп програмного коду е единим ета-пом який залежить вщ мови програмування, на яшй написаний фрагмент. На цьому еташ фрагмент вихщного коду програми перетворюеться у сукупшсть токенiв, для по-дальшого аналiзу та порiвняння за допомогою обраного математичного апарату. В данiй робоп розглядаеться вих1дний код, написаний мовою програмування C#.

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

Щоб дiстати сукупшсть токешв з фрагменту необ-хвдно використовувати парсери. Парсери мають бути за-лежними вiд мови програмування але набiр токенiв, як1 вони дають на виходi повиннi мати схожий вигляд. Тобто схож1 оператори рiзних мов програмування повинш мати одне й те ж саме токешзоване представлення. Наприклад, маемо оператор циклу for (i=0; i<n; i++), то для рiзних мов програмування цей оператор мае описуватись однаковим токеном (BEGINFOR). Приклад токенiв, що можуть вико-ристовуватися для мови програмування C#:

Табл. 1

Приклад токетв

ToKeH Приклад

BEGINCLASS public class Class {

ENDCLASS }// шнець классу

BEGINMETHOD public void test() {

ENDMETHOD } // шнець методу

VARDEF int i; String text;

BEGINWHILE while (умова) {

EXDWHILE } // шнець циклу 'while'

BEGINFOR for (i=0; i<n; i++) {

ENDFOR } кiнець циклу 'for'

BEGINSWITCH switch (вираз) {

ENDSWITCH } // кiнець перемикачу 'switch'

CASE case 5: default:

BEGINTRY try {

BEGINCATCH catch(IOException e) {

ENDCATCH } // шнець блоку 'catch'

BEGINIF if (умова) {

ELSE } else {

ENDIF } // шнець умови if

BEGINCOXD умова ? 0: 1

ENDCOND ) шнець умови

BREAK break;

CONTINUE continue;

RETURN return X;

THROW throw(виключення);

BEGININNER test = new A() {

EXDINNER }; // шнець внутршнього классу class

NEWCLASS test = new A();

NEWARRAY testarr = new int[l0];

ASSIGN i = i + 5; i++; i += 5;

BEGININTERFACE public interface IObject {

EXDINTERFACE } // шнець штерфейсу

ENDFILE Токен шнця файлу

nopÎBHHHHH токешзованих структур Суттевим недолжом алгоpитмiв, та вщомих ре-алiзацiй е неможливiсть поpiвняння конкретного фрагменту з базою уже вщомих фрагменпв програмного коду для виявлення плапату(вс pеалiзацiï не мають пщ собою бази даних для зберйання вже доданих фpагментiв). Тому, розглянемо один з ваpiантiв такого пошуку.

Поpiвняння в цiлому контрольних сум документiв (фpагментiв програмного коду) е простим i досить надш-ним апаратом для швидкого пошуку та виявлення точних копш, проте виявлення часткових або дек1лькох мо-дифiкованих копiй стае неможливим. Враховуючи значну к1льк1сть саме таких ваpiантiв плагiату метод поpiвняння контрольних сум не може використовуватись на практищ для щентифшацд плагiату.

Для виршення задачi пошуку плагiату за схемою "один проти вах" було обрано використання методу щен-тифiкацiйних мггок

Побудова набору мiток для документа На практищ, використовувати ва хеш-значення вихщного документу не доцiльно, тому вибирають неве-лику 1х тдмножину. Вибpанi хеш-значення стають мiтками (fingerprints) документу. Разом з самою мпкою збертаеться iнфоpмацiя про те, якому файлу вона нале-жить i в якому мющ цього файлу зустpiчаеться. Якщо хеш-функцгя гарантуе малу ймовipнiсть колiзiй, то однакова мита в наборах двох файлiв свщчить про те, що у них е стльний пiдpядок. За шльшстю загальних мiток можна судити про близьшсть файлiв.

З вищесказаного виникае проблема вибору хеш-значень, як будуть представляти документ. 1снують pi3Hi пiдходи для вибору тдмножини хеш-значень:

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

2) Манбер [11 запропонував вибирати в якосп мiток лише тi хеш-значення, для яких h mod р = 0, де p деяке обране значення. Такий пiдxiд легко ре-ал1зувати i пiсля проаювання цим методом ймовiрно залишиться пльки n/p мiток (об'ем щен-тифжащйного набору для рiзниx файлiв буде в^^знятися, самi мiтки будуть залежати вiд вмiсту файлу).

Недолжом цього методу е те, що вш не гарантуе щентифжаци всix збшв мiж документами, навiть якщо вони там е: знаходяться лише п спiльнi k-грами, для яких h mod р = 0. Вщстань мiж послщовно обраними хеш-зна-ченнями не обмежена i може бути великою. У цьому разi збйи, що виявились мiж мiтками, не будуть врахованг

3) За Хайнце [2] слiд позначати мiтками p мшмаль-них хеш-значень, тодi 1х кiлькiсть для всix доку-ментiв буде постiйною. За допомогою цього методу неможливо знайти частковi копи, але вш добре

працюе на файлах приблизно одного po3Mipy, знаходить схож файли, може бути застосованим для класифшацп докуменпв. Недолiком цього методу е те що з його допомогою неможливо знайти копи у фрагментах програмного коду piзного роз-мipy.

4) Метод просшвання. Алгоритм гарантуе, що якщо в двох файлах е хоча б один достатньо довгий загаль-ний шдрядок, то як мшмум одна мггка в !х наборах ствпаде. В основi методу лежить гдея локальних алгоpитмiв, яка вбирае в себе найважливiшi власти-востi будь-якого алгоритму побудови щенти-фiкацiйних мггок з документу, що гарантуе вияв-лення збiгiв. Алгоритм називають локальним, якщо для кожного вiкна з w послгдовних хеш-значень hi... hi + w - 1, алгоритм виpiшyе вибрати один з цих хеш-значень як вдентифжацшну мигсу i цей вибip залежить лише вгд вмiстy вiкна hi.. hi+w-1. Варто звернути увагу, що деяк1 iншi хеш-значення в цьому вiкнi можуть також бути обраними внаслгдок вибору алгоритму в одному з шших вГкон, що пере-криваються. Суть алгоритму

1дею алгоритму можна описати наступним чином: просуваемо вiкно pозмipy w = (t - k + 1) вздовж послщов-ностi hi... hn, на кожному кpоцi вiкно пеpемiщyеться на одну позицiю вправо. Позначаемо мгткою мiнiмальне hj у вiкнi. Якщо в одному вжш два елементи приймають мiнiмальне значення, хеш-значення, що знаходиться найбiльш справа призначаеться мiткою. Розглянемо довiльний текст: abrakadabra

Позначимо довжину тексту m: текст складаеться з 11 символiв, m = 11.

K-грамом називаються будь-як1 k символiв, що стоять тдряд. Побудуемо всi можливi k-грами для нашого тексту при, наприклад, k = 3.

Отримаемо настyпнi k-грами:

abr, bra, rak, aka, kad, ada, dab, abr, bra

Юльшсть k-гpамiв, як1 можна побудувати для тексту довжини m позначимо як n. ТодГ,

n = (m - (k-1))

Для приведеного прикладу:

n = (11- (3-1)) = 9

Наступним кроком хешуемо всi k-грами. Отрима-ний набip хеш-значень (h1... hn) характеризуе вих1дний документ. Для розглянутого тексту можемо отримати, наприклад, така послщовшсть хеш-значень:

12, 35, 78, 3, 26, 48, 55, 12, 35

Нехай нас щкавлять збiгy довжиною 4 i бiльше, тобто t = 4.

Тодi w = (4 - 3 + 1) = 2, i вiкна вийдуть (12,35), (35, 78), (78, 3), (3, 26), (26,48), (48, 55), (55, 12), (12, 35)

Жирним видшеш значення, призначеш мпками. Для цього тексту пiдсyмковий набip мiток буде наступ-ним:

(12, 35, 3, 26, 48, 12)

1дея вибору мшмального хеш-значення пояс-нюеться тим, що мiнiмальне хеш-значення в одному вгкт дуже ймовipно буде залишатися мшмальним в сyсiднiх вшнах, так як е ймовipнiсть, що мшмум з w випадкових чисел менше, н1ж одне додатково випадкове число. Таким чином, багато вжон, що перекриваються, будуть вибрати те ж саме хеш-значення, i загальна к1льк1сть гденти-фiкацiйних мiток буде набагато менше, шж число вжон при збеpеженнi «гарантованому порогу».

У багатьох випадках корисно записувати не лише щентифжацшш мiтки з документа, але й положения мггок у фрагмента Наприклад, у pазi знаходження збГгу сумшвно! довжини необхгдно показати експерту за допомогою штерфейсу користувача збй у вихщних рядках.

Як бачимо, вибГр митси визначаеться лише вмятом вiкна, тому такий алгоритм називаеться локальним. Будь-який локальний алгоритм вибору мггок е коректним. Дшсно, якщо в двох файлах е достатньо великий загаль-ний шдрядок, то будуть i однаковГ вiкна, а значить, будуть призначеш однаковГ мгтки. За ним можна визначити, що у файлах е збГги.

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

• позначати мигами кожне i-те з n значень.

• позначати мiтками p мiнiмальних хеш-значень

• позначати мигами лише и хеш-значення, для яких h mod р = 0, де p деяке обране значення (метод ро-зрахунку остачГ вгд дшення)

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

Позначання мигами лише p мшмальних хеш-значень фшсуе довжину набору ГдентифГкацшних мпок для документу. I може працювати лише для фрагменпв програмного коду певно! завчасно визначено! довжини. Тому, не е дощльним порГвняння цього методу з методом просшвання.

НайбГльш схожим з методом просшвання е метод, в якому у набГр ГдентифГкацшних миок включаються лише хеш-значення, остача вгд дшення яких на деяке визначене число p, дорГвнюе 0. РеалГзащя алгоритму

Ефектившсть е важливим фактором для реалГзацп алгоритму просшвання для щентифГкацшних мпок. У прикладГ 1 приведений код для реалГзацп даного алгоритму мовою програмування С#:

void winnow(int w /*po3Mip вшна*/, int[] h /*масив хеш-значень*/) { //Iнiцiaлiзaцiя змшних та i'x початкових значень int r = w - 1; // iндекс крайньо! право! меж1 BiKrn

int min = w - 1; // iндекс поточного мшмального значення у межах вiкнa

// Iнiцiaлiзaцiя лiчильникa циклу i початковим значенням: //крайньою правою межею вiкнa for (int i = w - 1; i < h.length; i++) {

if (min < r - w) // nepeBipHEMO чи знаходиться поточна щентифжацшна мита в поточному BiKHi {

//Якщо поточна мита знаходиться поза межою даного BiKHa, //потрiбно знайти новий мшмум.

//Для ефективного вибору найбшьш правого мiнiмaльного значення //пробiгaeмо вс значення в поточному вiкнi справа нaлiво //починаючи з передостаннього.

//Встановлюемо поточним мiнiмум останне значення вiкнa min = r;

for (int j = r - 1; j > r - w; j--) { if (h[j] < h[min]) {

min = j;

}

}

//Осшлький попредне мшмальне значення вже не знаходиться //в поточному вiкнi, то записуемо знайдене хеш-значення //та його позищю record(h[min], min); } else {

//Якщо поточна мггка знаходиться в межах поточного вiкнa, //перевiряемо ii з крaйнiм правим значенням у вiкнi if (h[r] <= h[min]) { min = r;

record(h[min], min); }

} } }

Приклад 1. Реaлiзaцiя ефективного алгоритму просшвання

Ця реалiзацiя використовуе той факт, що в загаль-ному випадку мiнiмальне значення в попередньому вшт залишиться мiнiмальним i для поточного вшна, якщо знаходиться в межах поточного вшна. В такому разi до-статньо однiei перевiрки з останшм значенням вiкна, щоб дiзнатися, чи потрiбно вибирати нову щентифжацшну мiтку. Сдиний випадок, в якому необхщно перерахувати мiнiмальне значення станеться в тому випадку, коли мшмальне значення було крайшм лiвим значенням в попередньому вгкт.

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

Алгоритм пошуку плапату на основi методу просшвання

Алгоритм пошуку плагiату на основi методу про-сiювання для побудови мггок можна представити наступ-ним чином:

1. Знаходиться набiр щентифжацшних мiток для вхвд-ного фрагменту програмного коду. Для цього бу-дуеться токенiзоване представлення фрагменту. З набору токешв будуеться набiр к - грамiв. У вiдповiднiсть кожному к - граму ставиться наперед задане хеш-значення. Далi за допомогою методу просшвання з набору хеш-значень, вибираемо набiр iдентифiкацiйних мiток. Будуеться загальний покажчик, де кожнiй мищ спiвставляеться файл i мiсце, де вона зус^чаеться. Звiривши мiтки файлу, що перевiряеться з покажчиком, можемо вибрати фрагмента коду, з якого була обрана щенти-фiкацiйна мита.

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

коефiцieнт Джакарда. Фрагменти для яких Mipa схожостi перевищуе деяку задану(80 - 90%), вщда-ються на розгляд експерту(користувачу) системи як шдозрш на джерело плaгiaту.

3. Знайдеш фрагменти вiдобpaжaються на екран кори-стувача, а по запиту можуть бути пiдсвiченi рядки коду, що збпиються в заданому та знайденому в 6a3i даних фрагментах.

Дуже важливим питанням у практичнш системi виявлення плaгiaту е здaтнiсть iгноpувaти шаблони. Наприклад, стандартш вставки про aвтоpськi права, юридичш нотатки, що входять до заголовку фрагменту програмного коду не мають впливати на визначення плaгiaту. Також у зaдaчi виявлення плaгiaту, шаблоном можуть бути фрагменти програмного коду, яш викладач дае студентам, i яш, як очiкуються, будуть входити до остаточного програмного ршення. Таю фрагменти не е несанкщоновано скопшованими i тому також не мають впливати на виявлення плапату. При використанш методу щентифжащй-них мггок виключення шaблонiв можна досягти наступ-ним чином: для шаблону, що вводиться користувачем обчислюеться ш6Гр iдентифiкaцiйних мггок, i при подаль-шому aнaлiзi збп- мггок, що мютяться у шaблонi ^нору-ються.

Тестовi фрагменти програмного коду Тестова колекщя складаеться з набору теспв. Ко-жен тест пеpевipяе на наявшсть плaгiaту кiлькa програм-них проекпв написаних однiею мовою програмування. Кожен програмний проект складаеться з конкретних файлТв.

Клaсифiкaцiя тестiв: тести подшяються на pеaльнi та штучш. Реaльнi тести взяп з життя i являють собою ре-альш програми. В описах детектоpiв в якосп реальних тестiв часто використовуються студентсьш курсовГ про-екти з програмування, осшльки в таких проектах плапат присутнш дуже часто. Штучш тести спещально нaписaнi

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

для перевiрки специфiчних аспекпв роботи детекторiв: стiйкостi до перестановок, вставкам, рефакторингу i т.д.

Юльшсть тестiв в тестовому набора вiд одного i бiльше (в залежносп вiд тестового набору)

Юльшсть файлiв в тестовому наборi: ввд двох до дек1лькох в кожному тесп

У нашiй тестовiй колекцп використовуються наступнi тестовi набори:

1. Те818е^1тр1е

• Тип: реальний

• Юльшсть тестiв: 1

• Юльшсть файлiв: 2

• Опис: Простий тест, який ми використаемо для пе-ревiрки того, що детектори взагалi працюють

2. Те818е1_о1утр

• Тип: реальний

• Юльшсть тестiв: 34

• Юльшсть файлiв: 196

• Опис: колекщя побудована на основi програм, написаних шд час трьох рiзних олiмпiад з програ-мування серед школярiв.

3. Те818е1_геа1

• Тип: штучний

• Кiлькiсть теспв: 43

• Кiлькiсть файлiв: 86

• Опис: Колекщя побудована на спещально побудо-ваному плагiатi чотирьох типiв: на основi пере-групування методiв (19 тестiв), випадкових вставок (13 теспв), перегрупування змiнних (6 теспв) i рефакторингу коду (5 теспв).

Аналiз результатiв тестування Розглянемо окремо результати по кожнш тестовiй колекци.

TestSet_simple. В цш колекцп наведений приклад досить характерний для реально! ситуацii приховування плапату. Результати всiх детекторiв вище 70%.

35 30 25 20 15

и

О *

О

X

U 10

CP

ш

CP

5 0

Marble

MOSS Jplag

Детектор плапату

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

Рис. 1 Результати порiвняння файлiв колекцii TestSet_simple.zip для рiзних детекторiв плагiату

TestSet_olymp. Ця тестова колекцiя, отримана з дешлькох олiмпiад з програмування. Алгоршшчно

вирiшення завдань в бiльшостi випадшв досить схож1, ре-алiзацil ж досить сильно залежать ввд стилю програ-мування конкретного учасника.

35

о^ 30

' F 25

и

О * 20

О 15

X

и 10

'ср 5

ш 0

1-

CP

Marble

MOSS Jplag

Детектор плапату

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

Рис. 2 Результати порiвняння фамв колекцii TestSet_olymp.zip для рiзних детекторiв плагiату

З великою ймовiрнiстю можна екстраполювати данi результати на випадок перевiрки на плагiат насправд оригiнального тексту. Ми отримуемо, що у вах детекторiв схожесть не буде перевищувати 30% для алгоршшчно

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

TestSet_real. На Bcix групах теспв KpiM випадкових Вплив випадкових вставок рядшв коду на результат

вставок вС детектори показали гарш результати - вище перевiрки на плагiат представлено у табл. 2: 77% для Marble, вище 90% для решти детекторiв.

Табл. 2

Вплив випадкових вставок рядшв коду на результат перевфки

Детектор Кшьшсть вставлених рядшв / кшьшсть рядшв коду

20/100 50/100 300/1100 400/1100

Marble 53% 31% 63% 15%

MOSS 40% 6% 43% 5%

JPLAG 40.3% 24,7% 58.4% 12,7%

Алгоритм просшвання 39% 9% 45% 8%

Висновки

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

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

Для реал1зацп саме такого типу пошуку був розроб-лений метод просшвання, який ввдповвдае поставленим вимогам щодо надiйностi та ефективностi пошуку плапату. Для реалiзацiï цього методу мае бути побудована база iдентифiкацiйних мггок для кожного з фрагментiв програмного коду.

Перелж посилань 1. Киричек А.А. Выявление плагиата в программном коде С# / А.А. Киричек, А.А. Амонс, С.Ю. Зайцев// Вюник НТУУ "КПГ "1нформатика, управл1ння та

oÖHHC^MBa^bHa TexHiKa". - 2011. - BnnycK 53. - C. 170-179.

2. U. Manber, Finding similar files in a large file system. In Proceedings of the USENIX Winter 1994 Technical Conference, pages 1-10, San Francisco, CA, USA, 1994.

3. N Heintze. Scalable document fingerprinting, in "1996 USENIX Workshop on Electronic Commerce"

4. Aiken, S. Schleimer, D. Wikerson, Winnowing: local algorithms for document fingerprinting. In Proc 2003 ACMSIGMOD Int. Conf. on Management of Data, San Diego, CA, June 9-12, pp. 76-85. ACM Press, New York, USA, 2003.

5. Shashi K. Gadia, Seo-Young Noh, An XML plagiarism detection model for procedural programming languages. Iowa State University, (2003).

6. Prechelt. L., Malpohl, G., Philippsen M., JPlag: Finding Plagiarisms among a Set of Programs, Technical Report 2000-1, Fakultät fur Informatik, Universität Karlsruhe, 2000.

7. Xin Chen, Brent Francia, Ming Li, Brian Mckonnon, Amit Seker, Shared information and program plagiarism detection, University of California, Santa Barbara, December 13, 2003.

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