Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.

Razlike

Slijede razlike između dviju inačica stranice.

Poveznica na ovu usporedbu

Starije izmjene na obje strane Starija izmjena
Novija izmjena
Starija izmjena
racfor_wiki:fdd:plagiranje_koda [2022/06/07 20:33]
bboras [Tehnike detekcije]
racfor_wiki:fdd:plagiranje_koda [2024/12/05 12:24] (trenutno)
Redak 1: Redak 1:
 ==== Sažetak ==== ==== Sažetak ====
 Velika potražnja za programerima u zadnje vrijeme dovela je programiranje na titulu jednog od najpopularnijih zanimanja današnjice. Programski kodovi za određene funkcionalnosti se mogu pronaći na Internetu u par klikova. To dovodi do problema da se sve više programskih rješenja plagira, što zbog specifičnosti pisanja programskog koda nije lako otkriti. U ovom radu razmatraju se osnovne tehnike plagiranja programskog koda, kao i neke od tehnika detekcije plagijata u programskom kodu. Velika potražnja za programerima u zadnje vrijeme dovela je programiranje na titulu jednog od najpopularnijih zanimanja današnjice. Programski kodovi za određene funkcionalnosti se mogu pronaći na Internetu u par klikova. To dovodi do problema da se sve više programskih rješenja plagira, što zbog specifičnosti pisanja programskog koda nije lako otkriti. U ovom radu razmatraju se osnovne tehnike plagiranja programskog koda, kao i neke od tehnika detekcije plagijata u programskom kodu.
 +
 ==== Uvod ==== ==== Uvod ====
 Plagijat se definira kao čin prisvajanja ili kopiranja tuđeg pisanog, umjetničkog ili drugog kreativnog rada u svoj vlastiti, bilo djelomice ili u cijelosti, bez navođenja izvornog autorstva ili izvornika [1]. Iz definicije se vidi da se plagiranje ne odnosi samo na tekstualne zapise, ali se danas najčešće srećemo upravo s tom vrstom plagiranja, pogotovo u akademskoj zajednici gdje su plagiranja seminara, laboratorijskih vježbi i ostalih aktivnosti postala česta pojava. Za razliku od „normalnog“ teksta, programski kod je specifičan tekst kojim se neka funkcionalnost može napisati na mnoštvo različitih načina, što i detekciju plagijata programskog koda čini kompliciranijom od npr. detekcije plagijata u tekstovima kao što su seminari, članci i sl. Plagijat se definira kao čin prisvajanja ili kopiranja tuđeg pisanog, umjetničkog ili drugog kreativnog rada u svoj vlastiti, bilo djelomice ili u cijelosti, bez navođenja izvornog autorstva ili izvornika [1]. Iz definicije se vidi da se plagiranje ne odnosi samo na tekstualne zapise, ali se danas najčešće srećemo upravo s tom vrstom plagiranja, pogotovo u akademskoj zajednici gdje su plagiranja seminara, laboratorijskih vježbi i ostalih aktivnosti postala česta pojava. Za razliku od „normalnog“ teksta, programski kod je specifičan tekst kojim se neka funkcionalnost može napisati na mnoštvo različitih načina, što i detekciju plagijata programskog koda čini kompliciranijom od npr. detekcije plagijata u tekstovima kao što su seminari, članci i sl.
Redak 29: Redak 30:
         * Normalizacija teksta         * Normalizacija teksta
  
-Normalizacija teksta je proces transformacije teksta u standardni oblik odnosno u neku kanonsku formu koju prije nije imao. Primjer tablice normalizacije prikazan je ispod - npr. ako se u izvornom tekstu nalazi tip podatka int, double ili short, nakon normalizacije ti će tipovi biti zamijenjeni s "umjetnim" tipom podatka "num" i sl..+Normalizacija teksta je proces transformacije teksta u standardni oblik odnosno u neku kanonsku formu koju prije nije imao. Primjer tablice normalizacije prikazan je ispod - npr. ako se u izvornom tekstu nalazi tip podatka int, double ili short, nakon normalizacije ti će tipovi biti zamijenjeni s "umjetnim" tipom podatka "num" i sl.
  
 ^  Element      Primjer elementa  ^  Funkcionalna zamjena          ^ ^  Element      Primjer elementa  ^  Funkcionalna zamjena          ^
Redak 58: Redak 59:
 ==== Alati za detekciju plagiranja programskog koda ==== ==== Alati za detekciju plagiranja programskog koda ====
 U ovom poglavlju demonstrirat će se neki od popularnih alata za detekciju plagijata u programskom kodu. U ovom poglavlju demonstrirat će se neki od popularnih alata za detekciju plagijata u programskom kodu.
-Za testiranje su napisana tri primjera Python programskog koda koji će se međusobno uspoređivati.+Za testiranje su napisana tri primjera Python programskog koda koji će se međusobno uspoređivati. Preciznije, prvi primjerak je originalan i pronađen na internetu, dok su preostala dva ručno modificirana.
  
 Prvi programski kod je jednostavan - računa i ispisuje površinu trokuta. Prvi programski kod je jednostavan - računa i ispisuje površinu trokuta.
Redak 94: Redak 95:
  
 === Moss === === Moss ===
-[[http://theory.stanford.edu/~aiken/moss/|Moss]] je alat za čije korištenje je prvo potrebno obaviti registraciju. Nakon što se registriramo slanjem maila s korisničkim imenom, dobijemo automatski generiranu poruku u kojoj se nalazi Perl skripta za pokretanje programa. Moss detektira plagijate u preko 20 programskih jezika. Nakon što pokrenemo Perl skriptu i odaberemo datoteke koje šaljemo za detekciju dobijemo poveznicu na kojoj možemo vidjeti rezultate testiranja. Rezultati detekcije plagijata između prvog i drugog primjera prikazani su na slici ispod.+[[http://theory.stanford.edu/~aiken/moss/|Moss]] je jedan od najpopularnijih alata za detektiranje plagijata u programskom kodu. Nakon što se obavi registracija slanjem maila s korisničkim imenom, dobijemo automatski generiranu poruku u kojoj se nalazi Perl skripta za pokretanje programa. Moss detektira plagijate u preko 20 programskih jezika. Nakon što pokrenemo Perl skriptu i odaberemo datoteke koje šaljemo za detekciju dobijemo poveznicu na kojoj možemo vidjeti rezultate testiranja. Rezultati detekcije plagijata između prvog i drugog primjera prikazani su na slici ispod.
  
 {{:racfor_wiki:fdd:moss12.png?650|}} {{:racfor_wiki:fdd:moss12.png?650|}}
  
 Iz prikazanog se vidi da je alat cijeli programski kod prepoznao kao plagijat - očito je da mijenjanje imena varijabli i dodavanje beskorisnih razmaka i linija ne čini problem ovom alatu. Pri učitavanju trećeg primjera programskog koda (primjer s izdvojenom funkcijom), alat iz nepoznatog razloga kaže da nema podudaranja s ostalim primjercima što je čudno budući da je ranije između prvog i drugog primjera prepoznao sva podudaranja - moguće je da je riječ o nekoj grešci u alatu. Ipak, uzmemo li u obzir detekciju koju smo ranije proveli, može se reći da alat dobro obavlja svoj posao na manje promjene varijabli tj. pri detekciji ne uzima u obzir samo "čisti" tekst programa. Iz prikazanog se vidi da je alat cijeli programski kod prepoznao kao plagijat - očito je da mijenjanje imena varijabli i dodavanje beskorisnih razmaka i linija ne čini problem ovom alatu. Pri učitavanju trećeg primjera programskog koda (primjer s izdvojenom funkcijom), alat iz nepoznatog razloga kaže da nema podudaranja s ostalim primjercima što je čudno budući da je ranije između prvog i drugog primjera prepoznao sva podudaranja - moguće je da je riječ o nekoj grešci u alatu. Ipak, uzmemo li u obzir detekciju koju smo ranije proveli, može se reći da alat dobro obavlja svoj posao na manje promjene varijabli tj. pri detekciji ne uzima u obzir samo "čisti" tekst programa.
 +
 +=== CopyLeaks ===
 +[[https://app.copyleaks.com|CopyLeaks]] je online alat za detekciju sličnosti u programskom kodu. Osim toga, može se koristiti i ostale provjere plagijata kao što su plagijati tekstualnih dokumenata i sl. Omogućena je detekcija plagijata za oko 20 programskih jezika. Osim što se izvorne datoteke mogu međusobno uspoređivati, alat pretražuje svoju internu bazu podataka, web i ostale izvore informacija kako bi provjerio pojavljuje li se objavljeni kod negdje kao javan izvor. Upravo zato je prvi primjer programskog koda ranije naveden prepoznat kao plagijat. Za usporedbu primjera programa međusobno potrebno je pretplatiti se za alat pa to nije provedeno. To je možda i jedini problem ovog alata - u besplatnoj verziji dopušta samo određene funkcionalnosti i nudi ograničen broj skeniranja dnevno. Primjer prepoznatog plagijata u alatovoj internoj bazi podataka prikazan je na slici ispod.
 +
 +{{:racfor_wiki:fdd:copyleaks.png?650|}}
  
 === Kalebu/Plagiarism-checker-Python === === Kalebu/Plagiarism-checker-Python ===
Redak 106: Redak 112:
  
 {{:racfor_wiki:fdd:kalebu.jpg?700|}} {{:racfor_wiki:fdd:kalebu.jpg?700|}}
 +
 +=== Ostali alati ===
 +Uz navedene alate, postoji još mnoštvo detektora plagijata za programski kod. Problem je što se većina tih alata, kao što je [[https://codequiry.com/|Codequity]] plaćaju jer je većina njih je razvijena kako bi se spriječilo plagiranje programskih kodova u akademskim ustanovama. Ostali alati koji su besplatni većinom su davno razvijeni, ne pružaju moderne metode za detekciju plagijata i nemaju potporu da mnogo programskih jezika.
 +
 +==== Nove ideje ====
 +
 +Većina alata za detekciju plagijata u programskom kodu temelji se na usporedbi tokena i sličnih tekstualnih vrijednosti, a to nam često nije dovoljno. Također, plagiranje se ne provodi samo zbog programerovog neznanja, nego i zbog lošeg upravljanja vremenom - dobar programer sposoban je transformirati neki izvorni kod u potpuno drugačiji tekstualni oblik. Zbog toga se nastoji raditi analiza koda na "nižoj razini" odnosno analiziraju se instrukcije izvršnog koda. Jedan slučaj takve analize za programski jezik Java [4] imao je puno više uspjeha nego analiziranje "čistih" izvornih kodova. Slično, nastoje se raditi analize kojima bi se fragmenti koda karakterizirali pomoću jezgrenih vrijednosti izvršnih datoteka [5]. Još jedna tehnika detekcije plagijata bila bi izdvajanje "biljega" iz izvornog koda koji se potom uspoređuju pomoću kosinusne sličnosti. Za ovakvu detekciju nije potreban izvorni kod, a otporna je i na slabe i na jake tehnike obusfikacije programskog koda [6]. Iz navedenog se vidi da se detektiranje plagijata u programskom kodu sve više orijentira k analizi izvršnih datoteka, što je kompliciranije područje, ali daje više uspjeha.
 ==== Zaključak ==== ==== Zaključak ====
-Plagiranje programskog koda je složena tema koja svakim danom postaje sve složenija. U ovom radu navedene su neke tehnike plagiranja koda kao i tehnike detekcije plagijata, ali tu je zapravo samo zagrebana površina. Čak da imamo "savršen" detektor plagijata, pitanje je možemo li 100% dokazati da je netko nešto plagirao. Kratki programi koji rade jednostavne funkcije (npr. program koji iz polja cijelih brojeva ispisuje pozitivne brojeve) se često pišu na isti način pa nema smisla raditi detekciju plagijata. S druge strane, možda su npr. na nekoj laboratorijskoj vježbi studenti prepisali taj isti jednostavan program, a nisu kažnjeni i dobili su bodove koje ne zaslužuju. U svakom slučaju, uz potrebnu programsku podršku za detekciju plagijata očito je da je potrebna i intervencija čovjeka koji na kraju sam mora odlučiti je li neko programsko rješenje plagijat ili ne.+Plagiranje programskog koda je složena tema koja svakim danom postaje sve složenija. U ovom radu navedene su neke tehnike plagiranja koda kao i tehnike detekcije plagijata te odgovarajući alati za detekciju plagijata, ali tu je zapravo samo zagrebana površina. Čak da imamo "savršen" detektor plagijata, pitanje je možemo li 100% dokazati da je netko nešto plagirao. Kratki programi koji rade jednostavne funkcije (npr. program koji iz polja cijelih brojeva ispisuje pozitivne brojeve) se često pišu na isti način pa nema smisla raditi detekciju plagijata. S druge strane, možda su npr. na nekoj laboratorijskoj vježbi studenti prepisali taj isti jednostavan program, a nisu kažnjeni i dobili su bodove koje ne zaslužuju. U svakom slučaju, uz potrebnu programsku podršku za detekciju plagijata očito je da je potrebna i intervencija čovjeka koji na kraju sam mora odlučiti je li neko programsko rješenje plagijat ili ne.
  
 ==== Literatura ==== ==== Literatura ====
Redak 117: Redak 130:
 [3] [[https://urn.nsk.hr/urn:nbn:hr:137:096778|V. Devald, "Alati za detekciju plagijata u programskim rješenjima", Završni rad, Sveučilište Jurja Dobrile u Puli, Pula, 2020.]] [3] [[https://urn.nsk.hr/urn:nbn:hr:137:096778|V. Devald, "Alati za detekciju plagijata u programskim rješenjima", Završni rad, Sveučilište Jurja Dobrile u Puli, Pula, 2020.]]
  
 +[4] [[https://ieeexplore.ieee.org/document/7910274|O. Karnalim, "Detecting source code plagiarism on introductory programming course assignments using a bytecode approach," 2016 International Conference on Information & Communication Technology and Systems (ICTS), 2016, pp. 63-68, doi: 10.1109/ICTS.2016.7910274.]]
 +
 +[5] [[https://ieeexplore.ieee.org/document/7076635|Y. Jhi, X. Jia, X. Wang, S. Zhu, P. Liu and D. Wu, "Program Characterization Using Runtime Values and Its Application to Software Plagiarism Detection," in IEEE Transactions on Software Engineering, vol. 41, no. 9, pp. 925-943, 1 Sept. 2015, doi: 10.1109/TSE.2015.2418777.]]
 +
 +[6] [[https://ieeexplore.ieee.org/document/7153572|Z. Tian, Q. Zheng, T. Liu, M. Fan, E. Zhuang and Z. Yang, "Software Plagiarism Detection with Birthmarks Based on Dynamic Key Instruction Sequences," in IEEE Transactions on Software Engineering, vol. 41, no. 12, pp. 1217-1235, 1 Dec. 2015, doi: 10.1109/TSE.2015.2454508.]]
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
racfor_wiki/fdd/plagiranje_koda.1654633991.txt.gz · Zadnja izmjena: 2024/12/05 12:23 (vanjsko uređivanje)
Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0