Starije izmjene na obje strane
Starija izmjena
Novija izmjena
|
Starija izmjena
|
racfor_wiki:fdd:plagiranje_koda [2022/06/07 21:21] bboras [Alati za detekciju plagiranja programskog koda] |
racfor_wiki:fdd:plagiranje_koda [2024/12/05 12:24] (trenutno) |
==== 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. |
=== Kalebu/Plagiarism-checker-Python === | === Kalebu/Plagiarism-checker-Python === |
Ovaj alat za provjeru plagijata u programskom kodu napisan je kao Python skripta koju je moguće pokrenuti iz terminala. Nakon što se preuzme [[https://github.com/Kalebu/Plagiarism-checker-Python|izvorni kod]], potrebno je instalirati pakete potrebne za njegovo izvršavanje. Skripta je jednostavna za koristiti - u direktorij u kojemu se skripta nalazi potrebno je postaviti tekstualne datoteke s izvornim kodom, a skripta će usporediti sličnosti svakog para datoteka međusobno. Usporedba se radi tako da se svaki tekst pretvori u vektore, nakon čega ih se uspoređuje i računa sličnost dokumenata. | Ovaj alat za provjeru plagijata u programskom kodu napisan je kao Python skripta koju je moguće pokrenuti iz terminala. Nakon što se preuzme [[https://github.com/Kalebu/Plagiarism-checker-Python|izvorni kod]], potrebno je instalirati pakete potrebne za njegovo izvršavanje. Skripta je jednostavna za koristiti - u direktorij u kojemu se skripta nalazi potrebno je postaviti tekstualne datoteke s izvornim kodom, a skripta će usporediti sličnosti svakog para datoteka međusobno. Usporedba se radi tako da se svaki tekst pretvori u vektore, nakon čega ih se uspoređuje i računa sličnost dokumenata. |
| |
| Rezultati uspoređivanja primjera programa je zanimljiva. Program je pronašao veću sličnost između prvog primjera i trećeg primjera, iako bi treći primjer trebalo biti teže detektirati pošto ima i promijenjena imena varijabli i izdvojenu zasebnu funkciju. Rezultati su prikazani na slici ispod. |
| |
| {{:racfor_wiki:fdd:kalebu.jpg?700|}} |
| |
=== Ostali alati === | === 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. | 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. |
| |
Rezultati uspoređivanja primjera programa je zanimljiva. Program je pronašao veću sličnost između prvog primjera i trećeg primjera, iako bi treći primjer trebalo biti teže detektirati pošto ima i promijenjena imena varijabli i izdvojenu zasebnu funkciju. Rezultati su prikazani na slici ispod. | ==== Nove ideje ==== |
| |
{{:racfor_wiki:fdd:kalebu.jpg?700|}} | 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 ==== |
[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~~ |