Moj predmet interesovanja je Menadžment informacionih tehnologija u javnom i privatnom sektoru

Interes je baziran na segmentima tog  projekta kao što su: IT inicijative, IT bezbjednost, nacionalne IT strategije, Strategijsko planiranje IS, E-učenje, Upravljanje projektima, IT istraživanje u industriji, e-Vlada, Sistem za upravljanje znanjem, Open Source politike i implementacije itd...

Alati za verzionisanje izvornog (Source) koda
Ocjena korisnika: / 1
LošeNajbolje 
IT vijesti
utorak, 05 jul 2011 16:26
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. Ko-rišć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

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
Preporučene knjige: Biće postavljene u narednim danima
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
Preporučene knjige: Biće postavljene u narednim danima
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
Preporučene knjige: Biće postavljene u narednim danima
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.
Preporučene knjige: Biće postavljene u narednim danima
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
Preporučene knjige: Biće postavljene u narednim danima
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
Preporučene knjige: Biće postavljene u narednim danima
URL http://www-01.ibm.com/software/rational/jazz/

Autor: Ivan K.

 

Dodaj komentar


Sigurnosni kod
Osvježi