Maturski, seminarski i diplomski radovi iz informatike.
Tokom razvoja većih softverskih projekata postoji potreba za kvalitetnim praćenjem verzija kroz koje projekat prolazi. Pri tome se mora voditi računa o održavanju celog projekta kao i svih njegovih verzija. Praćenje razvoja projekta može se raditi ručno, ali je to vrlo težak i mukotrpan posao, koji je podložan greškama (gubitak izvršenih promena, nemogućnost čuvanja svih verzija, ...).
Danas se za praćenje razvoja softverskih projekata koriste pomoćni alati koji se jednim imenom nazivaju Sistemi za kontrolu verzija (Version Control Systems - VCS). Sistemi za kontrolu verzija pomažu u održavanju softverskih projekata u ažurnom stanju i prate njihov razvoj tokom vremena. Iako se ovi sistemi koriste, uglavnom, za praćenje razvoja softverskih projekata, oni se mogu koristi i za praćenje verzija bilo koje vrste tekstualnih elektronskih podataka (word dokumenti, txt dokumenti, …). [3]
Neki od problema, koji mogu nastati u toku razvoja projekta, su:
• Komplikovano praćenje paralelnog razvoja projekta na više radnih mesta.
• Promene u jednom delu projekta mogu prouzrokovati promene u drugom delu, a da se to nije očekivalo i predvidelo.
• Kada se izvrši neka promena i sačuva se u projektu, teško je u slučaju potrebe, vratiti se na prethodno stanje projekta.
• Na kraju razvoja projekta potrebno je spojiti različite celine razvijane na više radnih mesta, što je često težak i komplikovan posao.
Ovi problemi se uspešno prevazilaze primenom Sistema za kontrolu verzija. Danas postoji veliki broj razvijenih sistema za kontrolu verzija softvera i elektronskih podataka. Različiti proizvođači softvera nude ove sisteme kao podršku pri razvoju softverskih aplikacija. Neki od proizvođača su Microsoft, Uni Software Plus, Perforce Inc., a veliki broj ovih sistema je open source.
U ovom radu će biti prikazan razvoj, opis i funkcionisanje Sistema za kontrolu verzija.
2. RAZVOJ SISTEMA ZA KONTROLU VERZIJA
Početak Sistema za kontrolu verzija je bio razvoj programa diff i patch, koji su počeli da se koriste za poređenje fajlova pri projektovanju softverskih aplikacija. Program diff prikazuje razliku između dva fajla. Ako se program diff primeni na neki fajl pre i posle njegove modifikacije, rezultat će biti samo modifikovani redovi, dok će ostali biti preskočeni. Program patch koristi razlike nekih fajlova (uglavnom dobijenih kao proizvod programa diff), i te razlike pridružuje odgovarajućem fajlu. Na primer, ako se pronađe razlika između fajla A i fajla B (pomoću diff programa), i na tu razliku i prvi od tih fajlova se primeni program patch, odgovarajući fajl će se dopuniti razlikama. Ovime je omogućeno da više ljudi radi na razvoju jednog projekta i da svoje promene pomoću diff i patch programa učine dostupne drugim korisnicima. [3]
Tokom razvoja projekta, ponekad se desi da promene koje su napravljene u fajlu posle nekog vremena treba poništiti tj. projekat treba vratiti u stanje kakvo je nekada bilo. Međutim, ako se projekat održava na ovaj način jako je teško ući u trag ko je kakve promene u međuvremenu napravio, a čak i da se to ustanovi, sve promene bi morale ručno da se brišu, što je težak i dugotrajan proces podložan greškama. Rešenje tog problema je bilo u izgradnji sistema za praćenje istorije projekta tj. sistema koji bi mogao da pronađe ranije verzije projekta. Izgrađeno je više takvih sistema, a jedan od poznatijih je Revision Control System (RCS) [1]. RCS je imao veliku primenu ali su uočeni i njegovi nedostaci:
• Nemogućnost kontrole celog projekta,
• Nije dozvoljen istovremeni pristup jednom fajlu od strane više korisnika,
• Nije mrežno orjentisan - svi korisnici sistema moraju da rade na mašini na kojoj je instaliran RCS ili da organizuju transfer podataka između radnih stanica i RCS servera.
Kao rezultat prevazilaženja ovih nedostataka, 1986. godine je razvijen Conccurent Versioning System (CVS) od strane Dick Grune-a [3]. Ovaj sistem je počeo da se razvija od skupa skriptova koje RCS čine funkcionalnijim. CVS je doživeo veliku popularnost, ali se u praksi pokazalo da i on ima neke nedostatke (komplikovana promena strukture skladišta, loš oporavak od pada sistema, ...).
U periodu od 2000. do 2004. godine razvijen je sistem Subversion v1.0 [3]. Od tada njegova popularnost raste i pojavljuju se njegove novije verzije. Subversion je besplatan softver koji se može preuzeti sa različitih internet lokacija.
Danas postoji veliki broj sistema za kontrolu verzija kako komercijalnih, tako i onih besplatnih. Pored pomenutih sistema, koriste se i Git, Perforce, Bazaar, Visual SourceSafe, i dr. [4, 5]
3. OPIS SISTEMA
Osnovni elementi Sistema za kontrolu verzija su [2, 3]:
• Skladište (repository),
• Radni direktorijumi korisnika (working directories), i
• Revizije sistema (revisions).
Na slici 1 je dat šematski prikaz Sistema za kontrolu verzija.
Slika 1. Prikaz Sistema za kontrolu verzija
Skladište je centralni deo sistema za kontrolu verzija, gde se smeštaju fajlovi projekta, izvršene promene korisnika na njima i drugi sistemski podaci. Skladištu može da pristupi veći broj korisnika istovremeno sa ciljem čitanja ili izmena fajlova. Organizacija skladišta varira od sistema do sistema. Skladište može biti:
• direktorijum na serveru u koji su smešteni svi fajlovi projekta i sve njegove verzije,
• baza podataka koja sadrži zapise svih fajlova projekta tj. sve verzije projekta,
• kompleksan distribuirani sistem koji smešta fajlove projekta, tj. sve njegove verzije, na više računara.
Kako god da je skladište organizovano, korisnici ne pristupaju direktno fajlovima u skladištu, već rade na svom radnom direktoriju.
Radni direktorijum korisnika je prostor na lokalnom računaru gde se nalaze kopije podataka iz skladišta. Korisnici u radnom direktorijumu mogu da čitaju, menjaju i testiraju delove projekta tokom procesa njegovog razvoja. Tek kada je zadovoljan izmenama, korisnik ih može potvrditi, i one se upisuju u skladište. Posle toga ostali korisnici mogu da im pristupe. U svakom trenutku se može izvršiti ažuriranje verzije fajlova u radnim direktorijumima sa stanjem u skladištu.
Revizije se mogu opisati kao delovi skladišta u kojima se čuvaju promene koje su korisnici izvršili i potvrdili na svojim radnim direktorijumima. Korisnici mogu menjati fajlove ali i strukturu i arhitekturu celog projekta. Sistemi za kontrolu verzija pamte trenutno stanje i sve prethodne verzije projekta.
U zavisnosti od Sistema za kontrolu verzija, postoje:
• Globalne revizije, i
• Revizije na nivou fajla.
Globalne revizije se odnose na stanje celokupnog skladišta. Ako su revizije globalne, onda svaka potvrda izmene na jednom fajlu povlači novu reviziju za taj fajl i sve ostale fajlove u skladištu. Revizije na nivou fajla se odnose na stanje pojedinačnog fajla u skladištu. Ako su revizije na nivou fajla, onda svaki fajl ima svoju istoriju izmena nezavisnu od ostatka projekta. Ovakav vid praćenja revizija je jako težak kada je potrebno sagledati čitav projekat.
4. Osnovni principi funksionisanja sistema
Svi Sistemi za kontrolu verzija moraju da obezbede korisnicima korišćenje fajlova iz skladišta, ali i da spreče gubitak fajlova ili njihovih delova, koji mogu da nastanu kao posledica kolizije između njih. Do gubitka fajlova ili njihovih delova, može doći kada bar dva korisnika istovremeno pristupaju nekom fajlu i menjaju ga. Tada jedan korisnik može poništiti promene koje je drugi korisnik napravio, a takve situacije se moraju prevazići. Pri tome, izmene koje je napravio prvi korisnik nisu trajno izgubljene, ali se ne nalaze u tekućoj verziji projekta. Na slici 2 je prikazan postupak gubitka podataka kada dva korisnika snimaju svoje izmene.
Jedan od načina za izbegavanje ovakve situacije je 'Zaključaj – Izmeni – Otključaj' pravilo [2]. Po ovom pravilu samo jedan korisnik jednovremeno može da menja jedan fajl, on ga zaključa, a drugi korisnici, ako žele menjati isti fajl, moraju da čekaju da on bude oslobođen tj. otključan. Na slici 3 je prikazan ovaj način pristupa podacima.
Ovo rešenje ima dosta nedostataka, a neki od njih su [2]:
• Korisnik može da zaključa fajl, i da zaboravi da ga otključa čime on postaje nedostupan za ostale korisnike.
• Gubljenje vremena u pristupu kada korisnici žele da menjaju isti fajl, ali ne i i ste delove, jer tada kolizija zapravo ne postoji.
• Zaključavanje može da proizvede lažnu sigurnost jer time što je jedan fajl zaključan ne znači da su zaključani i svi fajlovi koji su vezani za njega, pa je u njima moguće vršiti izmene što može prouzrokovati da pomenuti fajlovi više ne funkcionišu kao sistem.
Većina Sistema za kontrolu verzija koriste 'Kopiraj – Izmeni - Sastavi' pravilo za rešavanje ovih problema [2]. Po ovom pravilu korisnik preuzima kopiju fajla iz skladišta, menja ga i potvrđuje promene. Ako je više korisnika preuzelo kopije istog fajla, kada se izmene potvrde, kopije se spajajaju u konačnu verziju. Međutim, u nekim situacijama neophodna je i pomoć čoveka radi pravilnog spajanja ovih kopija. U situacijama kada jedan korisnik potvrđuje izmene na nekom fajlu, a nakon nekog vremena i drugi korisnik potvrđuje svoje promene na istom fajlu, sistem funkcioniše tako što druga potvrda ne uspeva, već se korisnik obaveštava da nema tekuću verziju fajla. Korisniku je omogućeno da zatraži spajanje svojih izmena sa izmenama u tekućem fajlu. Ovo će biti urađeno osim ako nije došlo do konflikta tj. situacije u kojoj su oba korisnika menjala iste redove u fajlu. Tada će korisniku biti predočeno da je došlo do konflikta, biće mu prikazane obe verzije fajla i on će sam odlučiti na koji će način razrešiti konflikt. Na slici 4 je prikazan opis ovog pravila.