Verzionisanje koda najčešće je korišćena disciplina ALM-a. Mnogi razvojni timovi kojima je pojam ALM-a potpuno nepoznat koriste neki od alata za verzionisanje koda. Verzionisanje, odnosno spremanje koda u središnji repozitorijum u kojemu se bilježi svaka promjena kroz istoriju, jedna je od rijetkih opšteprihvaćenih dobrih praksi u razvoju softvera svih vrsta i namjena.

Izvorni kod je centralni dio svake aplikacije. lzgubite li popis vaših zahtjeva ili rezultate testiranja, još uvijek ćete imati projekat koji razvijate. Možda nećete najbolje moći upravljati daljnjim razvojem svoje aplikacije, ali bar nećete izgubiti ono što je do tada napravljeno. Gubitkom izvornog koda izgubili ste temelje vašeg projekta.

Nema koda, nema aplikacije! Zato je opravdano reći da je verzionisanje koda temeljna disciplina ALM-a i najčešće prvi korak u stvaranju dobro organizovnog razvojnog projekta.

Nije dovoljan, ali je sigurno neophodan uslov za usvajanje ALM-a u razvojnom timu. Preuzmi zadnju verziju (get), označi datoteke koje namjeravaš promijeniti (check-out), nakon izvršenih promjena vrati ih u sistem (check-in) - to su tri osnovne akcije svakog sistema za verzionisanje.

Kod nekih alata međutim akcije check-out i check-in objedinjene su u jednu. U alatu SubVersion takva se akcija naziva commit. Terminologija se razlikuje od alata do alata, ali su principi poprilično slični. Ko je stekao praksu s jednim alatom, vrlo lako će se naviknuti i na drugi.

Ispod haube

Šta se događa ispod haube takvih alata? Moderni sistemi za verzionisanje zasnovani su na bazi podataka što cijeli sistem čini robusnijim, sigurnijim i skalabilinijim. Primjer takvog sistema je Microsoft Team Foundation Server čiji se podsistem za verzionisanje zasnovan na SQL Serveru.

Sa druge strane, zastarjeli Microsoftov alat SourceSafe zasnovan je na klasičnom sistemu fajlova te kao takav ne poznaje pojmove transakcionalnosti, atomarnosti i uopšteno svih dobrih principa baza podataka. SourceSafe alat je kojeg je davno pregazilo vrijeme, međutim radi njegove jednostavnosti mnogi ga i dalje koriste.

Na tržištu postoji još cijeli niz malih i jednostavnih alata za verzionisanje koji su dobri za male „one-man-band" timove, međutim veći timovi svakako bi takve alate trebali zamijeniti pravim  sistemima. 

Funkcija takvih sistema nije samo čuvanje koda nego i njegovo povezivanje s drugim podsistemima ALM-a. Takvi alati mogu svaku metodu izvornog koda povezati sa zadatkom zbog kojeg je nastala, svaku liniju s testom koji je testira, svaki projekt s buildom koji se po želji automatski izvršava na build mašini.

Za svaki dio koda od takvih sistema može se dobiti informacija kada je nastao, te ko ga je i s kojim razlogom stvorio promijenio, i na kraju, koliko je trajala, odnosno koštala njegova implementacija.

Nisu li to pitanja na koja bi svaki ozbiljniji razvojni tim trebao znati odgovor?

Neka grane govore

Grananje (branching) te povezivanje grana (merging) sljedeće su bitne funkcije sistema za verzionisanje koje ne spadaju u kategoriju osnovnih. Grananje je postupak razdvajanja jednog stabla koda u dva odvojena stabla s istim korijenom.

To je postupak sličan kopiranju fajlova, ali pri čemu dvije kopije ostaju povezane preko svoje iste izvorne tačke.

Zamislimo sljedeći scenario: razvijate aplikaciju čija prva verzija odlazi korisniku, a istovremeno nastavljate razvoj na novoj verziji koja će u jednom trenutku u budućnosti biti isporučena. Tokom razvoja te verzije zatražena je hitna promjena ili ispravka u aplikaciji koja je u produkciji, odnosno kod korisnika.

Scenario nije ni malo neobičan, dapače vrlo je čest u softverskoj industriji.

Kako će razvojni tim ispraviti grešku na isporučenoj verziji? Vjerovatno izvorni kod isporučene verzije negdje postoji i moguće ga je naći te na njemu ugraditi željenu prepravku.

Prepravku koju smo napravili na isporučenoj verziji, potrebno je napraviti i na verziji u razvoju. Korišćenjem branchinga opisani postupak značajno se pojednostavnjuje. Svaka isporučena verzija jedna je grana koda te se promjene na određenoj verziji svode na promjene pripadajućih grana.

Ako je potrebno promjenu nakon toga prenijeti iz jedne grane u drugu, to se radi postupkom spajanja (merging).

Merging verzija omogućava da gotovo jednim klikom miša prenesete sve željene promjene iz jedne grane u drugu, a da se pri tom sistem brine o konzistentnosti koda i rješava sve eventualne konflikte koji prilikom tog spajanja mogu nastati.

Paralelni rad na različitim verzijama aplikacije nije jedini razlog korištenja branchinga. Na većim projektima vrlo je čest pojam „feature branch". To je odvojena grana koda na kojoj se paralelno i nezavisno od ostatka projekta razvija jedna, najčešće relativno velika, osobina aplikacije.

Takva osobina odvaja se u posebnu granu kako zbog svoje kompleksnosti ne bi narušila integritet ostatka koda. Ponekad se za razvoj takve osobine formira i posebna radna grupa koja odvojeno od ostatka tima radi na toj osobini. Takve odvojene grupe nazivamo „feture crew”.

Grananje se ne mora zaustaviti samo na jednom nivou i po potrebi može se hijerarhijski nadovezivati.

Koliko grana će imati pojedini projekat, zavisi o stvarnim potrebama. Svaka grana donosi dodatnu kompleksnost u radu i treba ih kreirati samo onda kada je to opravdano. Prevelikom količinom grana vrijeme potrebno za održavanje promjena među njima može biti veći gubitak od eventualnog benefita koji smo grananjem dobili.

Za one koji žele znati više

Različiti sistemi za verzionisanje nude različite napredne mogućnosti upravljanja i izvještavanja o kodu.

Želite li doći do informacije ko je i kada napravio jednu liniju koda u neko fajlu, možete to na više načina. Podaci o svim promjena na kodu sačuvani su i vidljivi iz istorije promjena svakog fajla i ako krenete tražiti, uvijek ćete naći „krivca" za traženi kod. Neki alati međutim nude jednostavniji način za pronalaženje krivca.

Annotate naredba na TFS ClearCase sistemu, ili kako je u CVS-u i SubVersionu zovu blame, prikazaće nam kod s popisom odgovornih za svaku liniju u kodu.

Ako je taj kod pri tome još i povezan s listom zadataka kao što je to u TFS-u, onda ćete za svaku liniju koda lako pronaći i razlog njenog postojanja. Sistemi za verzionisanje koda najčešće ne nude mogućnost brisanja promjena iz istorije, barem ne kroz standardan korisnički interfejs. Undo u smislu „nikad se nije ni dogodilo" nije predviđena akcija.

Želimo li zanemariti zadnju check-iniranu promjenu, moguće je napraviti kompenzacijsku promjenu ručno ili uz pomoć alata i vratiti stanje koda na prijašnje. Međutim u istorijskom pregledu zauvijek će ostati vidljiva takva akcija. Većina razvojnih alata današnjice omogućava spajanje na sistem za verzionisanje po izboru.

Visual Studio preferiše spajanje s Microsoft TFS-om, ali dopušta i ostale alate. IBM Rational alati najbolje se povezuju s IBM-ovim ALM alatima, ali se mogu spajati i na druge sisteme za verzionisanje. Veliki razvojni timovi često koriste više od jednog razvojnog alata, a ponekad i više od jedne razvojne platforme.

Nije rijetkost da se na primjer serverski slojevi poslovnih aplikacija razvijaju u Javi na Unix sistemima, a klijenti u .NET-u na Microsoftovom okruženju. Zahvaljujući otvorenosti pojedinih sistema za verzionisanje moguće je takve timove integrisati u zajednički ALM sistem. U integraciji heterogenih okruženja iznenađujuća je otvorenost Microsoft ALM-a.

Možda iz nekih drugih alata nismo navikli da Microsoft otvoreno gleda prema Unixu, Linuxu ili pak Macu. Zahvaljujući alatu Team Explorer Everywhere, koji je dio Microsoftovog ALM sistema namijenjen heterogenim okruženjima, klijenti iz najrazličitijih okolina mogu se jednostavno povezati na TFS sistem.

Nezavisno rade li u Javi, programiraju li u Eclipseu te bez obzira na to o kojem je operativnom sistemu riječ, dostupan im je isti ALM centralni sistem. Kada je u pitanju verzionisanje, nužna je mogućnost povezivanja različitih okruženja u isti centralni sistem. U protivnom, dio koda uvijek će ostati zakinut za verzionisanje, a jedna od pretpostavki ALM-a je da se verzioniše kompletan kod sa svim dijelovima.

PREGLED NAJPOZNATIJIH ALATA ZA VERZIONISANJE IZVORNOG KODA

Broj 1: Git

Brzina, jednostavan dizajn i mogućnost konkurentnog rada na velikim projektima su bili najbitniji zahtjevi, koje su postavili pred sebe, kao i jedan vrlo neobičan zahtjev – da novi sistem bude antagonizam postojećeg CVS sistema, koji im je bio anti uzor. Tako je prva verzija izašla aprila 2005 godine. Git sistem je razvijen je pod GNU General Public 2 licencom i više detalja o istorijatu možete pronaći na adresi http://en.wikipedia.org/wiki/Git_(software)

Sistem za verzionisanje služi da bilježi kompletnu istoriju nad grupom fajlova, od momenta kreiranja pa do finalne, aktuelne verzije, uz mogućnost povraćaja željenje verzije fajla u bilo kom momentu. Namjenski fajlovi su grupisani po projektima (negdje ćete naići na izraz repozitorija).

Sistemi za verzionisanje obezbjeđuju centralizaciju podataka, omogućuju lakšu organizacija posla, pospješuju produktivnost. Pored toga, smanjuju i vrijeme otklanjanje nastalih grešaka i pomaže redukuju nastajanje istih. Apache Subersion sistem je centralizovani VCS sistem (version control system), za razliku od Git-a koji je distribuirani VCS sistem. Između ova dva pristupa postoji suštinska razlika u dizajnu. Centralizovani sistem podrazumjeva server, kao centralno skladište i klijente koji mrežno kupe sve podatke sa servera. Ukoliko server nije dostupan nastaju problemi.

Kod distribuiranih sistema ne postoji klijent pristup u pravom smislu te riječi, jer svaki klijent sadrži potpunu kopiju repositorije. Koristeći datu kopiju možemo povratiti podatke na server ili ih postaviti na neki drugu lokaciju. Velika prednost ovakvog pristupa je mogućnost offline rada, odnosno nezavisnost od centralnog servera. Mrežne resurse koristimo samo za objavljivanje napravljenih promjena. Suštinski Git sistem nudi krajnje drugačiji pristup u odnosu na ostale sisteme verzionisanja. Organizovan je kao mini fajl sistem, a svaka promjena se arhivira kao snimak datog sistema (snapshot). Ukoliko neki fajl nije mijenjan, ne kopiramo ga, već čuvamo samo referencu ka originalnom fajlu.

Za Git slobobno možemo reći da je multiplatformsko rješenje, jer su podržani sljedeći operativni sistemi: Microsoft Windows, Linux i Mac OS X. Proces instalacije je prilično jednostavan. Za Microsoft Windows postoji instaler, a i na Linux-u, gdje sve umije da bude komplikovanje, cijela procedura staje u dve komande, pošto sve renomiranje distribucije imaju Git paket u svojim repozitorijama. Detalje o procesu instalacije možete pronaći na http://git-scm.com/book/en/Getting-Started-Installing-Git

Za kraj, navešćemo još jednu zanimljivost. Riječ Git u britanskom slengu znači „neprijatna osoba“ (unpleasant person), a značenje bliže opisuje tvorca ovog sistema (Linux Torvalds), kako je on to i sam izjavio. Više o Git-u možete pronaći na zvaničnoj web strani sa dokumentacijom http://git-scm.com/documentation, a preporučujemo vam i video sekciju http://git-scm.com/videos

Autor: Vladimir

SubVersion

SubVersion je jedan od najpoznatijih i najraširenijih alata za verzionisanje koda. Nije ALM alat, međutim razni ALM alati omogućavaju integraciju sa njim. Najviše korišćen u open-source zajednici. Koriste ga razni poznati projekti, a među ostalima i Google Code za distribuciju koda. Postoje razni klijentski alati na raznim platformama koji se povezuju sa SubVersionom. Za Windows platformu poznat je klijent Tortoise SVN.

Proizvodač
: 0pen-source, izvorno proizveden od kompanije CollabNet
Tip: Alat za verzionisanje koda
Platforma: Unix, Linux, Solaris, Windows, Mac
+ Besplatan, jednostavan, dostupan kroz razne platforme, omogućena većina naprednih funkcija, integriše se u razne druge sisteme
-    Ne nudi potpunu integraciju u ALM sisteme
Utisak: Vrlo raširen alat za verzionisanje. Jednostavni projekti kojima treba samo verzionisanje, a ne traže cjelokupni ALM sistem, zadovoljiće se osobinama ovog alata
URL http://subversion.apache.org/

Rational ClearCase

Rational ClearCase alat je iz IBM Rational porodice. Nije ALM alat, ali je omogućeno povezivanje IBM-ovog ALM sistema TeamConcert na način da se uspostavi sinhronizacija ili pak da se jednokratno importuju podaci u novi sistem. ClearCase je u odnosu na SubVersion i većinu drugih alata relativno složeniji i nije prikladan za većinu manjih timova. Velika mana mu je i cijena - većina sličnih alata je besplatna ili barem jeftinija.

Proizvodač
: IBM
Tip: Alat za verzionisanje koda, Software Configuration Management alat
Platforma:Linux, Solaris,Windows
+ Napredne funkcije, mogućnost povezivanja na ALM sistem
- Cijena, složenost   
Utisak: Lako omogućuje razne napredne funkcije, nije dio ALM sistema. Većina timova vjernih IBM-u zamijeniće ga modemijim sistemima baziranim na IBM Jazz Serveru
URL http://www-01.ibm.com/software/awdtools/clearcase/

CVS

CVS izrađen je još davne 1986 pa je veteran među sistemima za verzionisanje. Vrlo je popularan u open-source svijetu, zastupljen je praktično svugdje i dostupan kroz sve platforme, međutim u nekim segmentima je zastarjeli sistem koji ne podržava razne naprednije mogućnosti sistema za verzionisanje.

Proizvodač
Open-source, proizveo CVS tim programera
Tip: Alat za verzionisanje koda
Platforma:Unix, Linux, Solaris, Windows, Mac
+ Besplatan, jednostavan, dostupan kroz razne platforme
- Zastarjeli alat, nedostatak naprednih funkcija, netransakcijsko upravljanje brisanjem i preimenovanjem fajlova
Utisak: Zastarjeli sistem za verzionisanje koda koji omogućava samo osnovne funkcije. Glavna prednost mu je jednostavnost kod instalacije i kod korišćenja
URL http://savannah.nongnu.org/projects/cvs

Team Foundation Server

Team Foundation Server sadrži kao jedan od podsistema alate za verzionisanje integrisane u cjelokupni ALM sistem. Sveukupno gledano, to je robustan sistem baziran na SQL Serveru koji omogućuje sve napredne funkcije. Klijent se integriše u Visual Studio, a dostupan je i Eclipse add-in preko kojeg je pristup TFS-u moguć iz raznih ne-Windows platformi.

Proizvodač
Microsoft 
Tip: ALM sistem
Platforma:Windows Server 2003/2008 za server, a za klijente Windows, Mac, Unix, Linux, Solaris
+ Dio ALM sistema, robustan, pouzdan, dostupan u raznim platformama
- Velik i složen sistem, TFS je predviđen za puno više od verzionisanja
Utisak: Puno više od alata za verzionisanje. Velik i moderan ALM sistem u kojemu je sistem za verzionisanje jedan od glavnih dijelova. Koristi ga sve više razvojnih timova koji prelaze sa starijih alata.
URL http://msdn.microsoft.com/en-us/vstudio/ff637362

SourceSafe

SourceSafe je stari Microsoftov alat. Osim što je jednostavan i nezahtjevan za instalaciju, nema drugih razloga zbog čega biste ga koristili u odnosu na noviji Microsoftov alat TFS, pogotovo nakon što je Microsoft izdao TFS Basics koji i po cijeni odgovara SourceSafeu. Većina timova SourceSafe koristi iz inercije, čekajući priliku da ga zamijene boljim alatom, najčešće TFS-om.

Proizvodač
Microsoft
Tip: Alat za verzionisanje koda
Platforma:Windows
+ Jednostavan, softverski i hardverski nezahtjevan.
- Nepouzdan, netransakcijski check-in, zastarjeli alat bez mnoštva funkcija
Utisak: Alat koga je pregazilo vrijeme. Većina timova koji ga koriste namjeravaju ga zamijeniti modernim Microsoftovim ALM sistemom Team Foundation Server
URL  http://msdn.microsoft.com/en-us/vstudio/aa718670.aspx

IBM Jazz

Jazz je nova platforma IBM ALM sistema Team Concert. Riječ je o modernom sistemu za verzionisanje ukomponisanom u ALM sistem koji bi trebao u IBM-ovom svijetu zamijeniti ClearCase. Kao i kod TFS-a, riječ je o velikom i modernom sistemu koji se može povezati na sve druge dijelove ALM sistema.

Proizvodač
IBM
Tip: ALM sistem
Platforma:Windows, Unix, Linux
+ Dio ALM sistema, robustan, velik broj naprednih opcija, dostupan kroz razna razvojna okruženja
- Velik i složen sistem prvenstveno namijenjen velikim korisnicima  
Utisak: Moderni ALM sistem iz IBM svijeta. Verzionisanje je samo jedan od njegovih podsistema. Sve veći broj timova koji koriste ClearCase okreću se prema ovom modernijem alatu
URL http://www-01.ibm.com/software/rational/jazz/

NAPOMENA: Ako želite da promovišete link u ovom članku, javite mi.

Ako vam se ovaj članak dopao, lajkujte FB stranicu DM Spot, Twitter ili LinkedIn i budite obavješteni kad novi članak bude objavljen.


Dobrodošli

Hvala Vam što ste izabrali posjetiti DM Spot portal.

Na njemu ćete naći:

  • podatke o autoru,
  • članke na temu nauke i tehnologije,
  • eBiblioteku, preporuke,
  • članke iz života i stila i
  • promociju potencijala Republike Srpske.

Vidjećete i nešto što se nalazi između redova, moju ljubav i trud da ovaj sajt i komunikaciju prema Vama učinim originalnom, korisnom i atraktivnom i obećanje da neću prestati da se trudim.

Ukoliko nađete da Vam je posjeta ovom portalu bila koristila u bilo kom pogledu, razmislite o tome da mi platite kafu kako biste podržali moj rad.

Recommended