ALM – Alati za verzioniranje izvornog kôda

Jednom izrečeno, zauvijek zapisano

Verzioniranje kôda najčešće je korištena disciplina ALM-a. Mnogi razvojni timovi kojima je pojam ALM potpuno nepoznat, koriste neki od alata za verzioniranje koda. Verzioniranje,odnosno spremanje koda u središnji repozitorij u kojemu se bilježi svaka promjena kroz povijest, jedna je od rijetkih općeprihvaćenih dobrih praksi u razvoju softvera svih vrsta i namjena.

mainKôd je središnji dio svake aplikacije. Izgubite li popis vaših zahtjeva ili rezultate testiranja, još uvijek imat ćete projekt koji razvijate. Možda nećete najbolje moći upravljati daljnjim razvojem svoje aplikacije, ali barem nećete izgubiti ono što je do tada napravljeno. Gubitkom izvornog koda, izgubili ste temelje vašeg projekta. Nema koda, nema aplikacije! Stoga je opravdano reći da je verzioniranje koda temeljna disciplina ALM-a i najčešće prvi korak u stvaranju dobro organiziranog razvojnog projekta. Nije dovoljan, ali je sigurno nužan uvjet 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 sustav (check-in) i to je to. Tri su to osnovne akcije svakog sustava za verzioniranje. 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. Tko je stekao praksu sa jednim alatom, vrlo lako će se naviknuti i na drugi.

Što se ispod haube takvih alata događa? Moderni sustavi za verzioniranje temelje se na bazi podataka što cijeli sustav čini robusnijim, sigurnijim i skalabilinijim. Primjer takvog sustava je Microsoft Team Foundation Server, čiji se podsustav za verzioniranje temelji na SQL Serveru. S druge strane, zastarjeli Microsoftov alat SourceSafe temeljen je na klasičnom sustavu datoteka, te kao takav ne poznaje pojmove transakcionalnosti, atomarnosti i općenito svih dobrih principa baza podataka. SourceSafe alat je kojeg je davno pregazilo vrijeme, međutim radi svoje jednostavnosti, mnogi ga i dalje koriste. Na tržištu postoji još cijeli niz malih i jednostavnih alata za verzioniranje koji su dobri za male „one-man-band“ timove, međutim veći timovi svakako bi takve alate trebali zamijeniti pravim ALM sustavima. Funkcija takvih sustava nije samo spremanje koda nego i njegovo povezivanje sa drugim podsustavima ALM-a. Takvi alati mogu svaku metodu izvornog koda povezati sa zadatkom radi kojeg je nastala, svaku liniju sa testom koji ju testira, svaki projekt sa buildom koji se po želji automatski izvršava na buildmašini. Za svaki dio koda, od takvih sustava može se dobiti informacija kada je nastao, te tko ga je i s kojim razlogom stvorio ili 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 odgovore?

Neka grane govore…branching

Grananje (branching) te povezivanje grana (merging) sljedeće su bitne funkcije sustava za verzioniranje koja ne spadaju u kategoriju osnovnih. Grananje je postupak razdvajanja jednog stabla koda u dva odvojena stabla sa istim korijenom. Postupak sličan kopiranju datoteka, ali pri čemu dvije kopije ostaju povezane preko svoje iste izvorne točke. Zamislimo sljedeći scenarij. Razvijate aplikaciju čija prva verzija odlazi korisniku, a istovremenu nastavljate razvoj na novoj verziji koja će u jednom trenutku u budućnosti biti isporučena. Tijekom razvoja te verzije, zatražena je hitna promjena ili ispravka u aplikaciji koja je u produkciji, odnosno kod korisnika. Scenarij nije ni malo neobičan, dapače vrlo je čest u softverskoj industriji. Kako će razvojni tim ispraviti grešku na isporučenoj verziji? Vjerojatno 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štenjem 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 drugo, 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 sustav 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 neovisno od ostatka projekta razvija jedno, najčešće relativno veliko, svojstvo aplikacije. Takvo svojstvo odvaja se u posebnu granu kako radi svoje kompleksnosti ne bi narušilo integritet ostatka koda. Ponekad se za razvoj takvog svojstva formira i posebna radna skupina koja odvojeno od ostatka tima radi na tom svojstvu. Takve odvojene grupe nazivamo „feture crew“.

Grananje se naravno ne mora zaustaviti samo na jednoj razni i po potrebi može se hijerarhijski nadovezivati. Koliko grana će imati pojedini projekt ovisi o stvarnim potrebama. Svaka grana donosi dodatnu kompleksnost u radu i treba ih kreirati samo onda kada je to opravdano. Prevelikom količina grana, vrijeme potrebno za održavanje promjena među njima može biti veći gubitak od eventualnog benefita koji smo grananjem dobili. Annotate

Za one koji žele znati više

Različiti sustavi za verzioniranje nude različite napredne mogućnosti upravljanja i izvještavanja o kodu. Želite li doći do informacije tko je i kada napravio jednu liniju koda u nekoj datoteci, možete to na više načina. Podaci o svim promjena na kodu spremljeni su i vidljivi iz povijesti promjena svake datoteke 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 ili ClearCase sustavu ili kako je u CVS-u i SubVersionu zovu blame, prikazat će nam kod sa popisom odgovornih za svaku liniju u kodu. Ako je taj kod k tome još i povezan sa listom zadataka kao što je to u TFS-u onda ćete za svaku liniju koda lako pronaći i razlog njenog postojanja.

Sustavi za verzioniranje koda najčešće ne nude mogućnost brisanja promjena iz povijesti, barem ne kroz standardno korisničko sučelje. Undo u smislu „nikad se nije niti dogodilo“ nije predviđena akcija. Želimo li zanemariti zadnju checkiniranupromjenu, moguće je napraviti kompenzacijsku promjenu ili ručno ili uz pomoć alata i vratiti stanje koda na prijašnje. Međutim u povijesnom pregledu zauvijek će ostati vidljiva takva akcija.

Većina razvojnih alata današnjice omogućava spajanje na sustav za verzioniranje po izboru. Visual Studio preferira spajanje sa Microsoft TFS-om, ali dopušta i ostale alate. IBM Rational alati najbolje se povezuju sa IBM-ovim ALM alatima, ali se mogu spajati i na druge sustave za verzioniranje. 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 sustavima, a klijenti u .NET-u na Micorosoft okolini. Zahvaljujući otvorenosti pojedinih sustava za verzioniranje, moguće je takve timove integrirati u zajednički ALM sustav. 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 sustava namijenjen heterogenim okruženjima, klijenti iz najrazličitijih okolina mogu se jednostavno povezati na TFS sustav. Neovisno rade li u javi, programiraju li u Eclipsu, te bez obzira na to o kojem je operativnom sustavu riječ, dostupan im je isti ALM središnji sustav. Kada je u pitanju verzioniranje, nužna je mogućnost povezivanja različitih okruženja u isti središnji sustav. U protivnom, dio koda uvijek će ostati zakinut za verzioniranje, a jedna od pretpostavki ALM-a je da se verzionira kompletan kod sa svim svojim dijelovima.

Objašnjenje osnovnih pojmova sustava za verzioniranje

Get /update – proces dohvaćanja aktualne ili neke od prethodnih verzija izvornog koda iz sustava za verzioniranje

Checkin /commit – spremanje lokalnih promjena u sustav za verzioniranje

Checkout – označavanje datoteka iz sustava za verzioniranje koje se namjeravaju mijenjati. Promjene su moguće samo na datotekama na kojima je napravljen checkout. Kod nekih sustava ne postoji akcija checkout nego se sve datoteke mogu mijenjati odmah nakon dohvata.

Branching – proces razdvajanja jedne grane u sustavu za varzioniranje u dvije jednake kopije, pri čemu jedna grana predstavlja “branch” od druge grane. Grane se mogu međusobno uspoređivati te se promjene iz jedne grane mogu prebaciti u drugu.

Merging – proces prenošenja promjena načinjenih na jednoj grani (branch) u drugu.

Label – oznaka stanja izvornog koda u određenom vremenskom trenutku.

Revision – jedinstvena oznaka (ID) stanja datoteke u sustavu za verzioniranje. Svakom promjenom datoteke, mijenja se i njegov revision

Changeset – pojam poznat kod novijih (naprednijih) sustava za verzioniranje. Skup svih lokalnih promjena koje su predmet jednog checkina. Changeset tijekom checkinau obliku transakcije odlazi na server kao atomarna cjelina. Jednostavniji i zastarjeli alati nemaju taj koncept što je ozbiljno ograničenje npr. SourceSafea ili CVS-a

Lock- naziva se i ekskluzivni checkout. Datoteke nad kojima je jedan korisnik načinio lock ne mogu mijenjati drugi korisnici, odnosno nije moguć checkoutod drugih korisnika.

Shelve –spremanje lokalnih promjena na server na privremenu lokaciju izvan glavnog projektnog repozitorija. Omogućuje korisnicima spremanje verzije koja nema utjecaja na trenutno stanje datoteka u sustavu za verzioniranje. Akcija je omogućena samo kod nekih sustava (Team Foundation Server, Bazaar)

Rollback – mogućnost brisanja jedne promjene iz povijesti promjena. Većina sustava ne podržava takvu akciju. Oni koji podržavaju najčešće rade na način da sustav generira promjenu koja poništava ranije napravljeno, zapravo nastaje novi changeset koji poništava utjecaj onog changesetakoji se želi “stornirati”.

Blame/Annotate – prikaz datoteka tako da se za svaku liniju koda vidi tko ju je promijenio ili stvorio. Omogućuje brzo otkrivanje kada i zašto je nastala svaka pojedinačna linija u izvornom kodu. TFS to naziva Annotate, a CVS ili SVN Blame.


SubVersion

subversionSubVersion jedan je od najpoznatijih i najraširenijih alata za verzioniranje koda. Nije ALM alat, međutim razni ALM alati omogućavaju integraciju s njime. Najviše korišten 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.

Proizvođač: open-source, izvorno proizveden od kompanije CollabNet

Tip: alat za verzioniranje koda

Url: http://subversion.apache.org/

Platforma: Unix, Linux, Solaris, Windows, Mac

+: Besplatan, jednostavan, dostupan kroz razne platforme, omogućena većina naprednih funkcija, integrira se u razne druge sustave

-: Ne nudi potpunu integraciju u ALM sustave


CVS

cvsCVS izrađen je još davne 1986. Veteran je među sustavima za verzioniranje. Vrlo popularan u open-source svijetu. Zastupljen praktički svugdje i dostupan kroz sve platforme, međutim u nekim segmentima zastarjeli sustav koji ne podržava razne naprednije mogućnosti sustava za verzioniranja. Veliki nedostatak je što nije moguće čisto obrisati ili preimenovati datoteke i mape. Takve operacije potrebno je napraviti direktno na serveru, a nije ih moguće napraviti transakcionalno kroz proces commita.

Proizvođač: open-source, proizveo CVS tim programera

Tip: alat za verzioniranje koda

Url: http://savannah.nongnu.org/projects/cvs

Platforma: Unix, Linux, Solaris, Windows, Mac

+: Besplatan, jednostavan, dostupan kroz razne platforme,

-: Zastarjeli alat, nedostatak naprednih funkcija, netransakcijsko upravljanje brisanjem i preimenovanjem datoteka


Bazaar

bazaarBazaar je još jedan jednostavan i besplatan alat. Kroz jednostavno korisničko sučelje omogućuje razne prilagodljive procese (workflowe) tijekom verzioniranja. Nije toliko raširen kao SubVersion ili CVS. Postoje razni add-in ovi koji nadopunjuju Bazaar.

Proizvođač: open-source, sponzoriran od Canonical

Tip: alat za verzioniranje koda

Url: http://bazaar.canonical.com

Platforma: Unix, Linux, Solaris, Windows, Mac

+: Besplatan, jednostavan, ugodno korisničko sučelje, mnoštvo communitydodataka, prilagodljiv

-: Nije dio ALM sustava, nema sve naprednije funkcije


SourceSafe

sourcesafeSourceSafe stari je Microsoftov alat. Osim što je jednostavan i nezahtjevan za instalaciju, nema drugih razloga zbog čega bi 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.

Proizvođač: Microsoft

Tip: alat za verzioniranje koda

Url: http://msdn.microsoft.com/en-us/vstudio/aa718670.aspx

Platforma: Windows

+: jednostavan, softverski i hardverski nezahtjevan

– : nepouzdan, netransakcijski check-in, zastarjeli alat bez mnoštva funkcija


Rational ClearCase

clearcaseRational ClearCase alat je iz IBM Rational obitelji. Nije ALM alat, ali je omogućeno povezivanje IBM-ovog ALM sustava TeamConcert na način da se uspostavi sinkronizacija ili pak da se jednokratno importiraju podaci u novi sustav. ClearCase je u odnosu na SubVersion i većinu drugih alata relativno složeniji sustav i nije prikladan za većinu manjih timova. Velika mana mu je i cijena. Većina sličnih alata su ili besplatni ili barem jeftiniji.

Proizvođač: IBM

Tip: alat za verzioniranje koda, Software Configuration Management alat

Url: http://www-01.ibm.com/software/awdtools/clearcase/

Platforma: Linux, Solaris,Windows

+: napredne funkcije, mogućnost povezivanja na ALM sustav

-: Cijena, složenost


Team Foundation Server

tfsTeam Foundation Server sadrži kao jedan od podsustava alate za verzioniranje integrirane u cjelokupni ALM sustav. Robustan sustav, baziran na SQL Serveru. Omogućuje sve napredne funkcije. Klijent se integrira u Visual Studio, a dostupan je i Eclipse Add-in preko kojeg je pristup TFS-u moguć iz raznih ne Windows platformi.

Proizvođač: Microsoft

Tip: ALM sustav

Url: http://msdn.microsoft.com/en-us/vstudio/ff637362

Platforma: Windows Server 2003/2008 za poslužitelja, a za klijente Windows, Mac, Unix, Linux, Solaris

+: dio ALM sustava, robustan, pouzdan, dostupan u raznim platformama

-: Veliki i složen sustav, ako vam treba samo sustav za verzioniranje. TFS je predviđen za puno više od toga.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>