Порівняння систем визначення плагіату програм написаних на мовах високого рівня

 

 

 

Грибок Т.Ю.

студентка IV курсу

Національний технічний університет України

«Київський політехнічний інститут»

Факультет Прикладної математики

Кафедра програмного забезпечення комп’ютерних систем

 

Порівняння систем визначення плагіату програм написаних на мовах високого рівня


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

Завдяки тому, що інформатизація суспільства зростає з кожним роком у експоненціальній залежності, проблема плагіату стає однією з ключових в сфері навчання. Викладачі намагаються боротися з цією нагальною проблемою усіма можливими способами (усна перевірка знання матеріалу, додаткові завдання для студентів, пошук плагіату за допомогою Яndex чи Google, пошук плагіату тексту за допомогою інтернет-сервісів), але навіть використання всіх можливих варіантів не може дати гарантії, що в написаному коді немає плагіату. Саме тому були створені спеціальні інструменти пошуку плагіату коду в написаних домашніх, лабораторних чи курсових роботах -  детектори плагіату коду, які зараз набирають все більше популярності.

Програма для комп’ютера має певні особливості і значно відрізняється від тексту на звичайній розмовній мові. Код програми має свої характеристики: структурованість, залежність від вхідних даних, залежність від обраної мови написання, залежність від стилю написання програміста у написанні коду, тощо. Окрім того, проаналізувати на плагіат можна не тільки вихідний текст програми, але й бібліотеки, об’єктний код та виконуваний код.

Отже, розглянемо основні детектори плагіату: MOSS,  JPlag,  SIM,  Sherlock (BOSS), PMD(CMD), CodeMatch.

MOSS – автоматична безкоштовна система пошуку плагіату, яка має дуже простий інтерфейс і працює он-лайн. Для використання програми, користувачеві необхідно лише вказати список файлів, які необхідно перевірити. У відповідь на запит сервер MOSS створює HTML сторінки з перерахуванням пар програм зі схожими частинами коду, які виділені підкресленням. Результати сканування коду можуть бути доступними для перегляду протягом 14 днів. Користувач може ввімкнути функцію автоматичного видалення коду, що був автоматично згенерований або код бібліотек, щоб бачити яку кількість коду програміст написав самостійно.

Детектор плагіату MOSS здатен аналізувати код, що написаний на мовах: C, C++, Java, C#, Python, Visual Basic, JavaScript, FORTRAN, ML, Haskell, Lisp, Scheme, Pascal, Modula-2, Ada, Perl, TCL, Matlab, VHDL, Verilog, Spice, MIPS та HCL2. Така велика кількість підтримуваних мов програмування є значною перевагою у порівнянні з іншими детекторами плагіату. Для того, щоб розпочати користування даною системою, необхідно відправити свої контактні дані на офіційну електронну пошту сервісу.

Але, незважаючи на всі переваги, система є закритою, що не дозволяє переглядати алгоритми, що використовуються у програмі, а відповідно не дозволяє дізнатись, які техніки плагіату може знайти дана система, а також забороняє додати можливість пошуку коду на інших мовах, що не підтримує на даний момент MOSS [2].

JPlag – є найбільш популярним безкоштовним детектором плагіату, який дозволяє порівнювати код програми з існуючою базою вже написаних програм.

JPlag підтримує невелику кількість існуючих мов програмування: Java, C#, C, C++, Scheme, але має декілька переваг. Серед них можливість пошуку плагіату серед текстів написаних природною мовою та використання для нових та універсальних алгоритмів пошуку плагіату (табл.2).

Для початку користування програмою необхідно зареєструватися на офіційному сайті. Результати сканування коду програм доступні доти, доки користувач не видалить історію пошуків [4, c.15]. Інтерфейс програми є зрозумілим і дозволяє не тільки знайти і підкреслити частини коду, в яких помічено плагіат, але й надає гістограми, на яких показано кількість та частота випадків копіювання. Система не є відкритою, але незважаючи на це розробники надали інформацію по використовуваних алгоритмах, методиках пошуку та видах технік плагіату, які може виявити система JPlag (табл. 2).

SIM - детектор плагіату, який перевіряє код за допомогою вимірювання лексичної схожості текстів, написаних на мовах C, Java, Pascal, Modula-2, Miranda. Також дана система дозволяє перевіряти тексти написані природною мовою. Детектор плагіату SIM працює локально, не вимагаючи підключення до Інтернет. Головною перевагою даної системи є те, що вона є однією з небагатьох безкоштовних та відкритих детекторів коду та знаходиться в постійній розробці та вдосконалюється.

Одним з недоліків даної системи є незручний інтерфейс та відсутність графічного та достатнього статистичного представлення результатів по виконаному пошуку.

Sherlock (BOSS)  -  це частина системи BOSS, яка може працювати як окремий додаток . Даний детектор плагіату порівнює вихідний код і тексти, написані природною мовою. Система Sherlock є відкритою та безкоштовною, але, незважаючи на це, підтримка користувачів з боку розробників відсутня та можливості до модифікації програми власноруч з метою додавання нових мов немає [3].

Головним недоліком даної системи є підтримка невеликої кількості мов програмування: Java, C та C++.

Детектор плагіату аналізує код програм на найпопулярніші техніки плагіату: додавання (видалення) пробілів, додавання (видалення) коментарів, перестановка частин коду у тексті та  перейменування змінних, але не зважаючи на це Sherlock використовує застарілі версії алгоритмів, що не дозволяє говорити про якісні результати пошуку плагіату.

Інтерфейс програми є достатньо зрозумілим, а статистичної інформації вистачає для того, щоб виявити плагіат (графіки, таблиці зі статистикою та можливість явно передивитися виділені кольором частини в коді, які були скопійовані).

PMD (CMD) – відкрита та безкоштовна система виявлення плагіату, яка не була задумана, як інструмент пошуку плагіату коду в сфері навчання, але зараз добре працює і в цій сфері. Дозволяє знаходити плагіат в коді програм, написаних на мовах Java, JSP, C, C++, PHP і FORTAN. Головною з переваг даної системи є існування можливості та інструкцій для додавання нової мови програмування, для аналізу коду, написаного на ній.

Результати аналізу коду програма повертає у файл з кодом програми, який аналізується. Це є  незручним, адже наочно не можна побачити, які частини коду скопійовані, недостатньо статистики і робота з програмою ведеться з командного рядка.

PMD сканує код на виявлення наступних основних технології плагіату:

- змінні, що не використовуються;

- перейменовані змінні;

- копіювання приватних методів;

- додавання (видалення) коментарів;

-  дублювання коду;

-  завантаження з Інтернет.

PMD інтегрований з такими середовищами розробки, як JDeveloper, Eclipse, Jedit, JBuilder, BlueJ, CodeGuide, IntelliJ IDEA, TextPad, Maven, Ant,  JCreator, і Emacs.

CodeMatch –  це комерційна програма-детектор плагіату, що має дуже широкі можливості для аналізу коду програм.  CodeMatch в даний час підтримує наступні мови програмування: Basic, C, C++, C#, Delphi, Flash ActionScript, Java, JavaScript, MASM, Pascal, Perl, PHP, PowerBuilder, Ruby, SQL, Verilog, VHDL [4].

В пакеті з CodeMatch можуть бути додаткові програми перевірки на плагіат  (BitMatch та CodeDiff).  Детектор CodeMatch порівнює тільки вихідний код, на відміну від BitMatch, який корисний у тому випадку,  якщо є тільки доступ до виконуваних файлів, а не до вихідного коду. CodeDiff корисний у випадку, якщо вже точно відомо, що існує плагіат у файлах, що будуть перевірятися. CodeDiff надає більш детальну інформацію про те, що і яким чином було скопійовано та перероблено.

CodeMatch порівнює кожен файл із вказаних директорій, включаючи всі підкаталоги, якщо потрібно. CodeMatch створює бази даних з перевірених програм. Інформація, про виконання пошуку відображається на HTML-сторінках, як звіт. Ви маєте можливість обрати, наскільки докладний звіт буде вам наданий [4].

CodeMatch в даний час підтримуються наступні мови програмування: ABAP, ASM-m68k, BASIC, C++, C#, Delphi,  Flash, ActionScript, Fortran, FoxPro, Java, JavaScript, LISP, MASM, MATLAB, Pascal, Perl, PHP, PL/M PowerBuilder, Python, REALbasic, SQL, Verilog, VHDL, Visual Basic тощо. Підтримка нових мов є простою та швидкою. Якщо користувачеві необхідно проаналізувати код на мові, якої в переліку немає, то розробники додадуть дану мову протягом декількох днів.

Задля порівняння продуктивності розглянутих систем було проведено декілька тестів серед детекторів плагіату: MOSS, JPlag, SIM та Sherlock (табл.1). PMD не був обраний за відсутності достатньої кількості статистичної інформації.  CodeMatch не був протестований, оскільки є комерційною програмою (табл. 2).

Тести проводились на основі:

-                     1-й вид випробувань: 15 програм, написаних на мові Java, з алгоритмами для роботи з файлами (техніки плагіату: перейменування змінних та перестановка частин коду) ;

-                     2-й вид випробувань: 15 програм на мові C з алгоритмами пошуку числа в масиві чисел (техніки плагіату: перейменування змінних, додавання (видалення) коментарів, перестановка частин коду та форматування коду) ;

-                     3-й вид випробувань: 15 програм на мові C з алгоритмами сортування масиву чисел (техніки плагіату: додавання (видалення) коментарів та форматування коду) .

З отриманої таблиці бачимо, що результати роботи програм у багатьох випадках не співпадають. Найгірші результати пошуку плагіату дає програма-детектор Sherlock. Це можна пояснити використанням неактуальних алгоритмів пошуку плагіату. Найкращі результати показує програма JPlag, яка знайшла майже всі (близько 98%) випадків плагіату (табл. 1).

Отже, існує багато детекторів плагіату коду, але вони не є універсальними та/або загальнодоступними інструментами пошуку плагіату. Причин існує декілька:

-        недостатня кількість підтримуваних мов програмування;

-        система не є безкоштовною;

-        використання застарілих алгоритмів, які не охоплюють всі способи плагіату;

-        необхідність підключення до Інтернету;

-        відсутність можливості модифікації системи власноруч.

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

Таблиця 1

Тестування детекторів плагіату на якість пошуку скопійованого тексту

Вид випробувань

MOSS

(у % від всього обсягу зміненого коду програм)

JPlag

(у % від всього обсягу зміненого коду програм)

SIM

(у % від всього обсягу зміненого коду програм)

Sherlock

(у % від всього обсягу зміненого коду програм)

1

89

98

88

71

2

91

93

89

63

3

93

98

95

87

 

 

 

 

Таблиця 2

Порівняння характеристик детекторів плагіату

Характеристика

MOSS

JPlag

SIM

Sherlock (BOSS)

PMD/CMD

CodeMatch

Безкоштовність

+

+

+

+

+

-

Відкритість системи

-

-

+

+

+

-

Чи дозволяє виявляти плагіат тексту

-

+

+

+

-

-

Зручність інтерфейсу

+

+

+

+

-

+

Можливість наочно порівняти частини кодів, що співпадають

+

+

-

+

-

-

Вид алгоритму, який застосовується

Алгоритм просіювання для побудови ідентифікаційних міток

Алгоритми жадібного рядкового заміщення, алгоритм токенізації та Karp-Rabin алгоритм

Алгоритм пошуку

по матриці співпадінь рядків та алгоритм токенізації

Алгоритм  Karp-Rabin

Жадібний алгоритм розбиття рядка, алгоритм Burrows-Wheller та алгоритм  Karp-Rabin

Алгоритм створення строкових масивів, та виконання порівняння окремо слів, частин слів, уривків коду тощо

Необхідність підключення до Інтернету

+

-

-

+

+

-

Можливість додавання нової мови

-

+

-

-

+

+

Особливості

При пошуку плагіату необхідно обирати програми  самостійно, в яких передбачається наявність плагіату

Не дозволяє знайти плагіат серед коду програм представлених в Інтернет

Неможливість виявити плагіат при переміщенні блоків

 

Підтримка невеликої кількості мов програмування

Підтримка користувачів системи та можливість простої модифікації програми (додавання нової мови для аналізу коду)

Дозволяє виконувати перевірку не тільки вихідного коду, але й коду бібліотек, виконуваних файлів тощо.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список використаної літератури:

 

  1. Prechelt, L. JPlag: Finding plagiarisms among a set of programs  [Text] / Lutz Prechelt , Guido Malpohl, Michael Phlippsen. — Germany, 2008. —44 p.     
  2. Aiken, A. A System for Detecting Software Plagiarism [Електронний ресурс] / A. Aiken — Режим доступу :  http://theory.stanford.edu/~aiken/moss/
  3. School of  information technologies, The Sherlock Plagiarism Detector [Електронний ресурс] — Режим доступу :  http://sydney.edu.au/engineering/it/~scilect/sherlock/
  4. Zeidman, B. Detecting Source-Code Plagiarism [Електронний ресурс] / B. Zeidman. — Режим доступу :  http://drdobbs.com/architecture-and-design/184405734