40
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 2375 POHRANA ZNAČAJKI DATOTEKA U PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATA Ivan Kraljević Zagreb, svibanj 2012.

PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

ZAVRŠNI RAD br. 2375

POHRANA ZNAČAJKI DATOTEKA U

PROGRAMSKOM SUSTAVU ZA

DETEKCIJU PLAGIJATA

Ivan Kraljević

Zagreb, svibanj 2012.

Page 2: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje
Page 3: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

Sadržaj

Uvod ............................................................................................................................. 1

1. Izrada značajki datoteka ....................................................................................... 2

2. Obrada arhiva s izvornim programima ................................................................ 9

3. Shema baze podataka ......................................................................................... 14

4. Komunikacija sustava s bazom podataka .......................................................... 20

5. Demonstracija rada sustava ............................................................................... 28

5.1. Registracija na sustav ................................................................................. 28

5.2. Pohrana arhiva i tekstualnih datoteka ........................................................ 30

5.3. Dohvat podataka ........................................................................................ 31

5.4. Brisanje i ažuriranje podataka .................................................................... 33

Zaključak ................................................................................................................... 34

Literatura .................................................................................................................... 35

Sažetak ....................................................................................................................... 36

Summary .................................................................................................................... 37

Page 4: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

1

Uvod

Plagiranje izvornih tekstova programa ozbiljan je problem na Fakultetu

elektrotehnike i računarstva. Nemali broj studenata iz različitih razloga posuđuje gotova

rješenja programskih zadataka drugih kolega te ih prisvajaju i prezentiraju kao vlastita

rješenja. Kako fakultet svake godine upisuje više od 600 studenata od kojih će svi slušati

barem nekoliko kolegija čije zadaće i/ili laboratorijske vježbe uključuju pisanje programa,

pregledavanje i međusobno uspoređivanje velikog broja studentskih programskih rješenja

predstavlja veliki napor profesorima i asistentima. S druge strane, prisvajanje tuđih rješenja

ne ide u korist ni samim studentima zato što na taj način štete svome inženjerskom

obrazovanju i usavršavanju.

Iz navedenih razloga očita je potreba za sustavom koji bi fakultetskom osoblju

omogućio jednostavno prepoznavanje programskih plagijata. U tu svrhu razvijen je

programski sustav koji uz jednostavno podešavanje, analizira izvorne kodove programskih

zadataka te otkriva potencijalne programske plagijate.

U ovom završnom radu govorit će se o pohrani izvornih programa u bazu podataka,

automatiziranoj izradi značajki pojedinih izvornih tekstova i njihovom utjecaju na

otkrivanje plagijata. U drugom dijelu rada prikazat ćemo rad sustava na prethodno

definiranoj bazi izvornih tekstova programa.

Svi razredi koji obavljaju prethodno spomenute aktivnosti su implementirani u

objektno-orijentiranom programskom jeziku Java.

Page 5: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

2

1. Izrada značajki datoteka

Svaku datoteku pobliže opisuje niz elemenata: veličina datoteke, ime datoteke,

datum zadnje promjene, tip datoteke i slično. Za tekstualne datoteke, poput izvornih

kodova, možemo odrediti još cijeli niz elemenata kao što su ukupni broj redaka (linija

teksta), ukupni broj znakova u tekstu, sažetak (engl. checksum), itd. Budući da je svrha

sustava otkrivanje plagijata izvornih kodova, iz izvornih je kodova potrebno izbaciti sve

što ne utječe na izvođenje programa, na primjer: komentari, višestruke praznine, prazni

redci. Za privremenu pohranu (tj. za pohranu u radnoj memoriji) značajki i elemenata

datoteke s izvornim kodom implementiran je razred FileCharacteristics. Unutar

razreda pohranjeni su sljedeći elementi:

fileID - jedinstveni identifikator datoteke.

fileName - ime datoteke s izvornim tekstom programa.

author - autor izvornog teksta programa.

dateModified - datum posljednje promjene datoteke.

sourceCode - izvorni tekst programa.

sourceCodeFN - normalizirani izvorni tekst programa.

checksum - sažetak izvornog teksta programa.

lineNumber - broj linija izvornog teksta programa (prazni redovi se ne broje).

characterNumber - broj znakova u izvornom tekstu programa (praznine,

tabulatori, oznake za kraj reda i znakovi unutar komentara se ne broje).

fileSize - veličina datoteke.

extension - ekstenzija datoteke (npr .java, .cpp).

Svi elementi dotičnog razreda su enkapsulirani, a njihove vrijednosti je moguće dohvatiti

ili postaviti isključivo korištenjem pripadnih get/set metoda.

Prilikom stvaranja instance razreda FileCharacteristics konstruktoru razreda je

potrebno predati osnovne elemente: izvorni kod, ime datoteke, veličinu (memorijsko

zauzeće) datoteke i datum posljednje promjene.

Page 6: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

3

Slika 1.1 Konstruktor razreda FileCharacteristics.

Ako promotrimo konstruktor uočavamo da nakon stvaranja instance nisu postavljene

vrijednosti svih značajki. Za njihovo je postavljanje potrebno nad objektom eksplicitno

pozvati metodu doAll().

Slika 1.2 Programski kod metode doAll() razreda FileCharacteristics.

Konkretno, metoda doAll() postavlja vrijednosti atributa sourceCodeFN,

lineNumber, characterNumber i checksum. Za izračun vrijednosti tih atributa

implementiran je poseban razred Utilities. Svrha razreda Utilities je brzo i

jednostavno izračunavanje i dohvaćanje spomenutih atributa. Sve metode razreda su

Page 7: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

4

statičke te za njihovo korištenje nije potrebno stvarati instance razreda Utilities.

Metode koje razred implementira prikazane su na Slika 1.3.

Slika 1.3 Dijagram razreda Utilities.

Slika 1.4 Programski kod metode countLines() razreda Utilities.

Metoda countLines() broji retke teksta predanog u argumentu te kao povratnu

vrijednost vraća broj redaka teksta. Važno je napomenuti da se prazne linije ne broje.

Page 8: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

5

Slika 1.5 Programski kod metode countCharacters() razreda Utilities.

Metoda countCharacters() broji znakove teksta predanog u argumentu te kao

povratnu vrijednost vraća ukupni broj znakova u tekstu. Tijekom računanja broja znakova

ne uračunavaju se znakovi za označavanje novog retka, praznine, tabulatori, kao ni

komentari unutar izvornog koda.

Slika 1.6 Programski kod metode removeBlanks() razreda Utilities.

Metoda removeBlanks() uklanja sav bijeli prostor (engl. whitespace), tj. uklanjaju se

sve praznine, oznake za novi red i tabulatori iz teksta u argumentu.

Page 9: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

6

Slika 1.7 Programski kod metode removeComments() razreda Utilities.

Metoda removeComments() uklanja sve jednolinijske i višelinijske komentare iz

izvornog koda.

Slika 1.8 Programski kod metode fullyNormalizeText() razreda Utilities.

Metoda fullyNormalizeText() potpuno normalizira tekst, tj. prvo ukloni sve

jednolinijske i višelinijske komentare, a potom i sav bijeli prostor.

Page 10: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

7

Slika 1.9 Programski kodovi metoda za izračun sažetka teksta.

Jedan od veoma važnih atributa neke datoteke jest njezin sažetak (engl. checksum). Sažetak

je numerička vrijednost sadržaja datoteke koja se dobiva pozivom nekog kriptografskog

algoritma nad njezinim sadržajem. Neki od danas najpopularnijih i najkorištenijih

algoritama za računanje sažetka datoteke su: MD5, SHA-1 i SHA-256.

Unutar razreda Utilities implementirane su metode koje nad sadržajem izračunavaju

sažetak datoteke uporabom jednog od triju spomenutih algoritama. U samom

programskom sustavu za računanje sažetka odabran je algoritam sa najvećom raspršenosti,

odnosno SHA-256 algoritam. Sažetak teksta se računa nad normaliziranim izvornim

kodom [3].

Slika 1.10 Programski kod metode validExtension() razreda Utilities.

Prije nego što se pokrene obrada neke datoteke potrebno je provjeriti je li datoteka

tekstualnog formata. Provjera formata datoteke povjerena je metodi

validExtension() iz razreda Utilities. Metoda kao ulazni argument prima ime

datoteke ili samo ekstenziju datoteke, te ga/ju uspoređuje sa regularnim izrazom:

^.*\\.(c|cs|cpp|java|js|txt|pl|php|py|jsp|jspx|hs)$

Page 11: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

8

Ako ulazni argument odgovara regularnom izrazu, format datoteke je podržan i metoda

vraća vrijednost true, a inače vraća false. U slučaju da je format nepodržan

konstruktor razreda FileCharacteristics će baciti Runtime iznimku.

Page 12: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

9

2. Obrada arhiva s izvornim programima

Svi izvorni programi pohranjeni su u .zip arhivama. Unutar glavne arhive nalaze

se kazala (mape, engl. folders) koja označavaju ime autora izvornog koda, a unutar svakog

kazala nalazi se .zip arhiva(u daljnjem tekstu: unutarnja arhiva). U unutarnjoj arhivi

pohranjeni su svi izvorni kodovi dotičnog autora. Hijerarhija strukture datoteka prikazana

je na Slika 2.1.

Slika 2.1 Hijerarhija strukture datoteka.

Za obradu arhive zadužena su tri razreda iz paketa hr.fer.csi.input:

UnzipMainFile

UnzipSingleFile

ReadFile

Page 13: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

10

Razred UnzipMainFile obrađuje vanjsku (glavnu) arhivu, razred

UnzipSingleFile obrađuje unutarnju arhivu, dok je razred ReadFile namijenjen

obradi jedne tekstualne datoteke.

Kod obrade neke arhive prvo je potrebno stvoriti instancu razreda UnzipMainFile te

nakon toga pozvati metodu unzip(). Metoda unzip() kao povratnu vrijednost vraća

listu objekata FileCharacteristics, tj. vraća sve obrađene izvorne kodove. Nakon

obrade arhive pomoću metode getErrorMessages() mogu se dohvatiti opisi svih

pogrešaka s kojima se sustav susreo tijekom obrade arhive. Najčešće greške su oštećene

.zip arhive, nepodržani formati arhiva (kao što su .rar ili .7zip), neispravni ili

nepodržani formati tekstualnih datoteka unutarnjih arhiva.

Slika 2.2 Dijagram razreda UnzipMainFile.

Pseudokod metode unzip() razreda UnzipMainFile:

unzip()

Ulaz: Path - putanja do .zip arhive, Destination - mjesto gdje će

se podaci privremeno izdvojiti(engl. extract).

Izlaz: lista instanci razreda FileCharacteristics.

učitajZipArhivu(Path);

sveDatoteke = prazna lista;

trenutnoKazalo = null;

while (ima neobrađenih datoteka u zipu) {

entry = prva neobrađena datoteka;

Page 14: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

11

if (entry == kazalo) {

if (trenutnoKazalo != null) {

obrišiTrenutnoKazalo;

}

trenutniAutor = entry.ime;

trenutnoKazalo = Destination + entry.ime;

stvoriNovoKazalo(trenutnoKazalo);

}

else {

extractajTrenutnuDatoteku(Destinacija + trenutnoKazalo,

entry.ime);

unutarnjiZip = stvori objekt razreda UnzipSingleFile;

sveDatoteke.dodaj = unutarnjiZip.getListFromZip(Destinacija +

trenutnoKazalo, entry.ime, trenutniAutor);

obiršiStvorenuDatoteku;

}

entry = obrađen;

}

obrišiTrenutnoKazalo();

vrati sveDatoteke;

Pseudokod metode unzip() razreda UnzipMainFile.

Iz navedenog pseudokoda vidljivo je da se pri obradi koriste i instance razreda

UnzipSingleFile. Uloga razreda UnzipSingleFile je obrada unutarnje arhive u

kojoj se nalaze izvorni programi. Razred UnzipSingleFile se koristi i u slučajevima

kada je na primjer student krivo predao svoju arhivu (npr. .rar format umjesto .zip).

Sustav će dojaviti da je došlo do greške tijekom obrade dotične arhive te korisnik sustava

mora ručno ispraviti problem s arhivom. Nakon popravljanja arhive korisnik ne mora

iznova pohranjivati cijelu glavnu arhivu, već može jednostavno pohraniti unutarnju

(ispravljenu) arhivu te korištenjem instance razreda UnzipSingleFile sadržaj arhive

se jednostavno može dodati već obrađenim datotekama.

Page 15: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

12

Slika 2.3 Dijagram razreda UnzipSingleFile.

Pseudokod metode getListFromZip() razreda UnzipSingleFile:

getListFromZip()

Ulaz: Path - putanja do arhive, Author - autor izvornih kodova

unutar arhive.

Izlaz: lista instanci razreda FileCharacteristics.

učitajZipArhivu(Path);

sveDatoteke = prazna lista;

while(ima neobrađenih datoteka u zipu) {

entry = prva neobrađena datoteka;

izvorniKodDatoteke = ReadFile.readTextFile(entry);

FileCharDatoteke = stvori novi objekt razreda

FileCharacteristics(izvorniKodDatoteke);

sveDatoteke.dodaj = FileCharDatoteke;

entry = obrađen;

}

vrati sveDatoteke;

Iz navedenog pseudokoda vidljivo je da tijekom obrade arhive sustav poziva metodu

readTextFile() razreda ReadFile. S obzirom na to da je metoda statička nije

potrebno stvarati instancu razreda ReadFile. Uloga metode je čitanje tekstualne datoteke

i vraćanje njezinog sadržaja. Kao što se razred UnzipSingleFile može koristiti ako je

došlo do pogreške nad nekom unutarnjom arhivom tijekom obrade glavne arhive, tako se i

Page 16: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

13

metoda readTextFile() može koristiti umjesto ponovnog pohranjivanja cijele

unutarnje arhive.

Paket čija je uloga obrada arhiva, datoteka i automatizirana izrada značajki prikazan je na

Slika 2.4.

Slika 2.4 Prikaz dijagrama razreda hr.fer.csi.input.

Page 17: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

14

3. Shema baze podataka

Baza podataka nam omogućuje jednostavno pohranjivanje i povezivanje podataka

bez nepotrebne zalihosti. Podaci se pohranjuju na način da budu neovisni o programima

koji ih koriste te su strukturirani tako da buduća nadogradnja bude što jednostavnija.

Shema baze podataka je u trećoj normalnoj formi te su navedena potrebna integritetska

ograničenja.

Slika 3.1 EER model baze podataka.

Page 18: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

15

Detaljnijim promatranjem EER modela možemo zaključiti:

svaki korisnik(engl. user) može imati proizvoljan broj recenzija (engl. review)

unutar svake recenzije nalazi se proizvoljan broj zadataka (engl. task)

svaki zadatak referencira proizvoljan broj arhiva (engl. archive) i datoteka (engl.

file)

neka datoteka može sadržavati referencu na arhivu, ali i ne mora (npr. ako je

datoteka samostalno pohranjena, tj. nije dio nijedne arhive)

uz svaku datoteku vezan je točno jedan redak iz relacije lex

određena datoteka može biti referencirana u maksimalno 2 retka u relaciji

comparisonresult

Atribut Tip Opis

userID int identifikator korisnika

firstName vchar ime korisnika

lastName vchar prezime korisnika

email vchar e-mail korisnika

password vchar zaporka korisnika

createdOn date datum registracije

PK = {userID}

UNIQUE = {email}

Tablica 3.1 Relacija User.

Entitetom User predstavljeni su svi registrirani korisnici koji imaju mogućnost

prijave na sustav koristeći svoj e-mail i zaporku. Nad atributom email definirano je

integritetsko ograničenje UNIQUE čime se sprječava višestruko registriranje sa jednom te

istom adresom elektroničke pošte. Uz to, važno je napomenuti da se korisnikova zaporka

ne sprema u izvornom obliku, već se korištenjem SHA1 algoritma sprema sažetak lozinke.

Page 19: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

16

Atribut Tip Opis

reviewID int identifikator reviewa

userID int identifikator vlasnika

reviewName vchar ime reviewa

description vchar opis reviewa

createdOn date datum stvaranja

PK = {reviewID}

FK = {userID}

Tablica 3.2 Relacija Review.

Entitet Review predstavlja recenziju pojedinog korisnika. Unutar svake recenzije

spremljeni su pojedini korisnikovi zadaci.

Atribut Tip opis

taskID int identifikator zadatka

reviewID int identifikator reviewa kojemu

zadatak pripada

name vchar ime zadatka

description vchar opis zadatka

KGramLength int duljina k-grama

KGramWindowLength int veličina k-gram prozora

ModuloPValue int ModuloP vrijednost

pCheckums int težina sažetka u ukupnom

rezultatu

pKgramWinn int težina winnowing algoritma

pKgramModP int težina 0 modulo P algoritma

Page 20: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

17

pLex int težina leksičke analize

PK = {taskID}

FK = {reviewID}

Tablica 3.3 Relacija Task.

Entitet Task predstavlja pojedini zadatak. Vrijednosti KGramLength,

KGramWindowLength i ModuloPValue su atributi pojedinih algoritama. Vrijednosti

pChecksum, pKgramWinn, pKgramModP i pLex predstavljaju udjele pojedinih algoritama

pri izračunu ukupne sličnosti.

Atribut Tip Opis

archiveID int identifikator arhive

taskID int identifikator zadatka kojemu

arhiva pripada

archiveName vchar ime arhive

archive longblob arhiva

PK = {archiveID}

FK = {taskID}

Tablica 3.4 Relacija Archive.

Entitet Archive sadrži arhive zadataka. Pojedini zadatak može imati nula ili više

arhiva, a kod brisanja pojedinog zadatka, brišu se i sve njegove arhive.

Atribut Tip Opis

fileID int identifikator datoteke

archiveID int identifikator arhive

taskID int identifikator zadatka

fileName vchar ime datoteke

Page 21: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

18

sourceCode longblob izvorni kod / sadržaj datoteke

extension vchar ekstenzija datoteke

size bigint veličina datoteke

uploadMethod vchar način pohrane datoteke

date date vrijeme posljednje izmjene

datoteke

author vchar ime autora datoteke

PK = {fileID}

FK = {archiveID}

FK = {taskID}

Tablica 3.5 Relacija File.

Entitet File sadrži datoteke i značajke datoteka. Od značajki se pohranjuju ime

datoteke i ime autora datoteke, veličina i datum posljednje izmjene datoteke, tip

(ekstenzija) datoteke te način pohrane datoteke (grupna ili samostalna datoteka). Uz to,

pohranjuju se i identifikatori zadatka i arhive kojima datoteka pripada. Datoteka ne mora

nužno pripadati određenoj arhivi i u tom slučaju vrijednost atributa archiveID bit će null.

Atributi Tip Opis

comparisonresultID int identifikator rezultata

firstID int identifikator prve datoteke

secondID int identifikator druge datoteke

similarity int ukupna sličnost

KGramSimilarity int sličnost dobivena

KGramWinnowing algoritmom

KGramModPSimilarity int sličnost dobivena

KGramModP algoritmom

checksumSimilarity int sličnost sažetaka

Page 22: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

19

PK = {comparisonresultID}

FK = {firstID}

FK = {secondID}

Tablica 3.6 Relacija ComparisonResult.

Entitet ComparisonResult predstavlja rezultat usporedbe dviju datoteka. Ukupna

sličnost ovisi o rezultatima pojedinih algoritama usporedbe i o udjelu algoritama pri

računanju ukupne sličnosti. Udjeli pojedinih algoritama pohranjeni su u relaciji Task.

Page 23: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

20

4. Komunikacija sustava s bazom podataka

Kako bi sustav mogao pohranjivati podatke u bazu podataka i koristiti pohranjene

podatke u radu, razvijen je paket hr.fer.csi.database.

Slika 4.1 Objektni dijagram paketa hr.fer.csi.database.

Page 24: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

21

Razredi Archive, ComparisonResult, Lex, Review, Task, User i

SourceFile (relacija File) sadrže atribute nazivom jednake istoimenim relacijama u

bazi podataka. Navedeni razredi korišteni su za pohranu podataka koji su prethodno

dohvaćeni iz baze podataka.

Najvažniji razred paketa je DatabaseIO. Pomoću njega je omogućeno spajanje na bazu

podataka, a preko njegovih metoda vrši se pohrana i pristup podacima.

Pri stvaranju instance razreda mora se predati putanja do datoteke u kojoj su pohranjena

adresa baze podataka te korisničko ime i lozinka potrebni za uspješno spajanje sustava s

bazom podataka. Pohranjivanje potrebnih podataka u vanjsku datoteku preporuča se jer

ono omogućuje jednostavnu i fleksibilnu konfiguraciju podataka potrebnih za spajanje na

bazu bez potrebe za mijenjanjem i ponovnim prevođenjem programskog koda [1].

Podaci u datoteci spremljeni su u obliku db.parametar=vrijednost. Primjer datoteke

s nužnim podacima:

db.url=jdbc:mysql://localhost:3306/similarity

db.user=korisnik19

db.passwd=lozinka1

Unutar konstruktora DatabaseIO izvodi se čitanje vanjske datoteke, te stvaranje veze s

bazom podataka. Nakon toga, korisnik može manipulirati podacima pomoću mnogobrojnih

metoda instance razreda DatabaseIO. Implementirane metode prikazane su u Tablica

4.1.

Naziv metode Opis

getConnection(String dbFile) Privatna metoda koja stvara vezu s bazom.

printDBMetaData() Ispisuje podatke o bazi podataka.

registerUser(User user) Sprema podatke o korisniku iz argumenta u

relaciju User.

loginUser(String email, String

password)

Provjera postoji li korisnik u bazi podataka.

retriveUserNames(int userID) Vraća ime i prezime korisnika određenog

Page 25: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

22

identifikatorom.

retriveUserReviews(int userID) Vraća podatke o svim recenzijama korisnika

određenog identifikatorom.

createReview(Review review) Stvara novu recenziju.

retriveReview(int reviewID) Vraća recenziju određenu identifikatorom.

deleteReview(int reviewID) Briše recenziju određenu identifikatorom.

updateReviewName(int reviewID,

String name)

Preimenovanje recenzije.

updateReviewDescription(int

reviewID, String descritption)

Izmjena opisa recenzije.

createTask(Task task) Stvara novi zadatak.

retriveReviewTasks(int reviewID) Vraća podatke o svim zadacima recenzije

određene identifikatorom.

deleteTask(int taskID) Briše zadatak određen identifikatorom.

retriveTask(int taskID) Vraća zadatak određen identifikatorom.

setTaskValues(int taskID, int

kgramLength, int

kgramWindowLength, int moduloP)

Postavlja parametre algoritama vezane uz

zadatak određen identifikatorom.

setTask_P_Values(int taskID, int

pChecksums, pKgramWinn,

pModuloP, int pLex)

Postavlja udjele pojedinih algoritama u

računanju ukupne sličnosti.

retriveTaskValues(int taskID) Vraća parametre algoritama.

retriveTask_P_Values(int taskID) Vraća udjele pojedinih algoritama.

updateTaskName(int taskID,

String name)

Preimenovanje zadatka.

updateTaskDescription(int

taskID, String description)

Izmjena opisa zadatka.

Page 26: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

23

storeMainArchive(int taskID,

String path, String

tmpDestination)

Obrađuje i sprema glavnu arhivu. Vraća

listu svih grešaka koje su nastale tijekom

obrade arhive.

storeSingleArchive(int taskID,

String path, String author)

Obrađuje i sprema unutarnju arhivu. Vraća

listu svih grešaka koje su nastale tijekom

obrade arhive.

retriveArchive(int archiveID,

String path)

Pristupa arhivi i pohranjuje ju na lokaciju

određenu argumentom path. Vraća

informacije o arhivi.

retriveArchives(int taskID) Vraća sve arhive zadatka određenog

identifikatorom.

updateArchiveName(int archiveID,

String name)

Preimenovanje arhive.

deleteArchive(int archiveID) Briše arhivu iz baze.

deleteArchives(int taskID) Briše sve arhive zadatka određenog

identifikatorom.

storeSingleFile(int taskID,

String path, String author)

Sprema tekstualnu datoteku koja se nalazi

na lokaciji određenoj argumentom path.

storeFile(int taskID, int

archiveID, FileCharacteristics

file)

Sprema tekstualnu datoteku koja je dio

arhive.

storeFile(int taskID, int

archiveID, FileCharacteristics

file, String author)

Sprema tekstualnu datoteku koja je dio

arhive.

retriveFile(int fileID) Vraća datoteku određenu identifikatorom.

retriveFiles(int taskID) Vraća sve datoteke zadatka određenog

identifikatorom.

retriveFileCharacteristics(int Vraća sve datoteke zadatka određenog

Page 27: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

24

taskID) identifikatorom kao instance razreda

FileCharacteristics.

retriveFilesOutOfRange(int

taskID, long minSize, long

maxSize)

Vraća sve datoteke zadatka određenog

identifikatorom čija veličina nije unutar

intervala [minSize, maxSize].

expectedFiles(int archiveID, int

expected)

Vraća true ako je očekivani broj datoteka

u arhivi jednak argumentu expected,

inače vraća false.

deleteFile(int fileID) Briše datoteku određenu identifikatorom.

addComparisonResult(int firstID,

int secondID, int similarity,

int KGramSimilarity, int

KGramModPSimilarity, int

checksumSimilarity)

Pohranjuje sličnosti između dvije datoteke u

bazu.

updateComparisonResult(int

firstID int secondID, int

similarity, int KGramSimilarity,

int KGramModPSimilarity, int

checksumSimilarity)

Ažurira vrijednosti sličnosti između dvije

datoteke.

getComparisonResult(int firstID,

int secondID)

Vraća sve sličnosti datoteka koje su

određene argumentima firstID i

secondID.

storeLex(int fileID,

List<TableRow> constantsMap,

List<TableRow> identifierMap,

List<TableRow> krosTableMap,

List<TableRow> uniformTable)

Pohranjuje rezultate leksičke analize

datoteke određene identifikatorom.

retriveLex(int fileID) Vraća rezultate leksičke analize datoteke

određene identifikatorom.

Tablica 4.1 Metode razreda DatabaseIO.

Page 28: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

25

Većina metoda iz gornje tablice implementirana je na sljedeći način:

1. Ovisno o zahtjevu metode napisan je SQL upit gdje se umjesto konkretnih

vrijednosti postavljaju upitnici ('?'), tj. rezerviraju se mjesta koja će kasnije biti

popunjena.

2. Stvara se instanca razreda PreparedStatement koja interno pohranjuje

prethodno napisani SQL upit.[2]

3. Korištenjem set metoda objekta PreparedStatement prethodno rezervirana

mjesta popunjavaju se konkretnim vrijednostima.

4. Izvršava se upit. Ako upit treba dohvaćati vrijednosti (SELECT upiti) povratna

vrijednost pri izvršavanju će biti instanca razreda ResultSet.

5. Ako je vraćen objekt tipa ResultSet, iterira se kroz njega i uzimaju se svi

potrebni podaci.

Na sljedećih nekoliko slika prikazane su metode pomoću kojih se nešto dohvaća,

pohranjuje, mijenja ili briše iz baze podataka. Zbog velikog broja i opsežnosti pojedinih

metoda, neće biti prikazane sve metode koje se pojavljuju u Tablica 4.1.

Page 29: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

26

Slika 4.2 Primjer dohvaćanja podataka: metoda retriveUserReviews().

Slika 4.3 Primjer pohrane podatka: metoda storeFile().

Page 30: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

27

Slika 4.4 Primjer brisanja podataka: metoda deleteTask().

Slika 4.5 Primjer ažuriranja podatka: metoda updateTaskName().

Page 31: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

28

5. Demonstracija rada sustava

Za demonstraciju sustava pripremljena je jedna glavna (main.zip). jedna

unutarnja (single.zip) arhiva i jedna tekstualna datoteka (zad2.c). Datoteke su

pohranjene u na lokaciji C:\Test\. U glavnoj arhivi (main.zip) su pohranjena tri

kazala, a u svakom od njih se nalazi jedna arhiva. Dvije arhive su u .zip formatu, dok je

jedna u .rar formatu kojega sustav ne podržava. U svakoj arhivi su pohranjene tri

datoteke sa programskim kodom.

U unutarnjoj arhivi (single.zip) se nalaze dvije tekstualne datoteke (zad1.c i zad3.c) i

jedna slika (zad2.png).

5.1. Registracija na sustav

Programski sustav je napravljen tako da ne dopušta pohranu podataka korisnicima koji nisu

registrirani i koji nemaju barem jednu recenziju i zadatak. Stoga se prvo moramo

registrirati na sustav, zatim stvoriti novu recenziju i nakon toga stvoriti novi zadatak.

Programski odsječak sa Slika 5.1 prikazuje registraciju korisnika na sustav.

Slika 5.1 Programski odsječak za registraciju korisnika.

Page 32: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

29

Otvaranjem baze podataka preko sučelja phpMyAdmin, vidimo da je registracija uspješno

obavljena.

Slika 5.2 Uspješna registracija na sustav.

Može se primijetiti kako se korisnik i sustav ne moraju brinuti oko dodjele jedinstvenog

identifikatora jer dotični problem rješava baza podataka.

Nakon što smo obavili registraciju potrebno je stvoriti novu recenziju i novi zadatak.

Slika 5.3 Stvaranje nove recenzije.

Identifikator novostvorene recenzije je 12.

Slika 5.4 Stvaranje novog zadatka.

Identifikator novostvorenog zadatka je 19.

Page 33: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

30

5.2. Pohrana arhiva i tekstualnih datoteka

Nakon što smo se uspješno registrirali na sustav, stvorili novu recenziju i novi zadatak

možemo početi sa pohranom datoteka u bazu podataka.

Slika 5.5 Spremanje glavne arhive u bazu podataka.

Prethodno je spomenuto da se u glavnoj arhivi nalazi jedna unutarnja arhiva koja je

neispravnog formata, stoga se očekuje da će sustav dojaviti grešku tijekom obrade dotične

arhive, ali da nakon toga neće prestati sa obradom podataka, nego da će ostale ispravne

datoteke obraditi i spremiti u bazu podataka.

Slika 5.6 Ispis pogrešaka prilikom obrade glavne arhive.

Nakon što smo spremili glavnu arhivu, sada idemo pokušati spremiti unutarnju

arhivu (single.zip). Programski odsječak koji obavlja dotičnu radnju prikazan je na

Slika 5.7.

Slika 5.7 Spremanje unutarnje arhive u bazu podataka.

Page 34: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

31

Unutar single.zip se nalazi jedna nepodržana datoteka naziva zad2.png. Prilikom

obrade arhive sustav bi nam trebao dojaviti o dotičnoj grešci.

Slika 5.8 Ispis pogrešaka prilikom obrade unutarnje arhive.

Konačno, spremiti ćemo ispravnu tekstualnu datoteku u sustav.

Slika 5.9 Spremanje arhive u bazu podataka.

5.3. Dohvat podataka

Za dohvat podataka je potrebno deklarirati objekt kakav želimo dohvatiti. Na primjer ako

želimo dohvatiti niz zadataka potrebno je deklarirati listu objekata Task, ako želimo

dohvatiti jedan zadatak potrebno je deklarirati jedan Task objekt, itd. Nakon deklaracije

objekta, pozivamo metodu iz razreda DatabaseIO koja dohvaća tražene podatke, te

povratnu vrijednost metode preusmjerimo na deklarirani objekt.

Page 35: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

32

Slika 5.10 Primjer dohvata podataka.

Nakon pokretanja prikazanog programskog odsječka ispisuje nam se rezultat kao na Slika

5.11.

Slika 5.11 Ispis rezultata.

Page 36: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

33

5.4. Brisanje i ažuriranje podataka

Za brisanje podataka u bazi podataka potrebno je pozvati metodu koja briše podatke iz

određene relacije (sve metode imaju prefiks delete) te preko argumenta predati jedinstveni

identifikator objekta kojeg se želi obrisati.

Slika 5.12 Programski isječak koji briše jedan zadatak.

Za ažuriranje podataka potrebno je potrebno je pozvati metodu koja ažurira podatke iz

određene relacije (sve metode imaju prefiks update) te preko argumenta predati jedinstveni

identifikator objekta kojega se želi ažurirati i vrijednosti koje se žele ažurirati.

Slika 5.13 Preimenovanje zadatka.

Page 37: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

34

Zaključak

Sustav je osmišljen tako da buduća nadogradnja bude što je moguće jednostavnija

bez potrebe za mijenjanjem postojećeg izvornog teksta programa. Baza podataka je

osmišljena tako da ne ovisi o programskom sustavu što dodatno povećava fleksibilnost

cjelovitog sustava. Tijekom izrade sustava pojedine komponente su ispitane na velikom

broju različitih ulaza te su riješeni mnogi problemi koji bi mogli izazvati prekid rada

sustava ili netočnu obradu i prikaz podataka.

U budućoj nadogradnji sustava fokusirati će se na prikupljanju dodatnih značajki izvornih

programa i razvoju sustava tako da se mogu obraditi trenutno nepodržani formati datoteka

za pohranu (kao što su .rar i .zip arhive). Paralelno sa razvojem sustava razvijati će se

i baza podataka.

Page 38: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

35

Literatura

[1] ZETCODE.COM MySQL Java Tutorial.

http://zetcode.com/databases/mysqljavatutorial/ 2012.

[2] ECKEL, B. Thinking in Java 3rd Edition. 2002.

[3] BAOTIĆ, A. Otkrivanje sličnosti u izvornim tekstovima programa. Diplomski rad.

Sveučilište u Zagrebu, 2011.

Page 39: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

36

Sažetak

Pohrana značajki datoteka u programskom sustavu za detekciju plagijata

Namjerno posuđivanje i prepisivanje tuđih programskih rješenja je ozbiljan

problem na mnogim fakultetima. Iz tog razloga razvijen je sustav koji obrađuje studentska

programska rješenja te pronalazi potencijalne plagijate. U ovom radu prezentiran je dio

sustava koji obavlja obradu ulaznih arhiva sa studentskim rješenjima, automatiziranu

obradu studentskih programskih rješenja te pohranjivanje ključnih podataka u bazu

podataka. Osim ključnih podataka o datotekama u bazu podataka pohranjuju se parametri

algoritama koji izračunavaju sličnosti datoteka, rezultati algoritama i cijeli niz drugih

podataka. Sustav je implementiran u objektno-orijentiranom jeziku Java koristeći MySQL

bazu podataka. Za učitavanje i obradu arhiva i datoteka implementiran je paket

hr.fer.csi.input, a za pohranjivanje u bazu podataka i pristup podacima

implementiran je paket hr.fer.csi.database.

Ključne riječi: obrada arhiva, obrada datoteka, značajke datoteka, upravljanje bazom

podataka, Java, MySQL.

Page 40: PROGRAMSKOM SUSTAVU ZA DETEKCIJU PLAGIJATAsigurnost.zemris.fer.hr/ostalo/detekcija_plagijata/2012_ikraljevic/Zavrsni.pdf · Baza podataka nam omogućuje jednostavno pohranjivanje

37

Summary

File Proporties Storage in the Plagiarism Detection Programming System

Many faculties have a serious problem with students that deliberately borrow and

copy another student's software solutions. For this reason, a system that finds potential

plagiarism is needed. In this paper a part of the system that handles input archive files,

processes them and handles storing key information to a database is discussed. In addition

to key information, many other values are also stored in the designed database. Some of

these values include parameters of algorithms that find potential plagiarism, results of

those algorithms and other data. The whole system is implemented in the object-oriented

programming language Java and uses a MySQL database. The package hr.fer.input

handles file and archive processing and the package hr.fer.database handles file

storage.

Keywords: archive processing, file processing, file characteristics, database management,

Java, MySQL.