Alati za pregled koda
Autor: Nikola Janković
Pregledanje koda (eng. code review) je proces u kojem tim programera zajedničkim čitanjem koda pokušava da uoči moguće propuste nastale u toku procesa razvoja softvera. U najvećem broju slučajeva, pregled koda se organizuje pre nego što novoizmenjen kod bude poslat na zajedničko spremište (eng. repository).
Sistem za kontrolu verzija je korak ka softverskoj formalizaciji pregleda kôda preko ramena. U ovom tekstu će više pažnje biti posvećeno drugim softverskim pristupima za automatizaciju različitih delova pregleda kôda, to su upravo alati za pregled koda.
Veliki broj procesa obuhvaćenih pregledom kôda može da se automatizuje, a softveri koji rešavaju ovakve probleme mogu da se podele u dve kategorije – otvorenog kôda i vlasnički. U ovom članku razmatramo isključivo alate za pregledanje koda koji su otvorenog koda.
RevjuBord
Projekat RevjuBord (eng. ReviewBoard) su započela dva programera, Kristejn Hemond (eng. Christain Hammond) i David Troubridž (eng. David Trowbridge), kompanije VMware. Oni su dobili zadatak da unaprede dotadašnji mehanizam pregledanja kôda u timovima te kompanije. Projekat se svodio na generisanje HTML kôda koji je prikazivao staru i novu verziju kôda i markirao delove koji se razlikuju. Članovi tima su imali mogućnost da dodaju i objašnjenja zašto su pravili te izmene i koje su sve testove sproveli nad novom verzijom kôda. Nakon toga se slao zahtev potencijalnim pregledačima. Sve to je oduzimalo previše vremena, dešavalo se i da neki zahtevi bivaju zagubljeni usled kompleksnosti i zahtevnosti samog sistema. Zato je bilo neophodno unaprediti ceo sistem.
Izvorni kôd ovog alata napisan je u jeziku Pajton uz pomoć radnog okvira Đango. Ovaj alat je pod MIT licencom, a proces rada prikazan na slici ne razlikuje se bitno ni kod ostalih alata koji će biti predstavljeni u nastavku.
Gerit
Gerit alat za pregledanje koda (eng. Gerrit Code Review) je započet kao skup dodatnih mogućnosti na već ranije razvijen projekat pod nazivom Ritveld (eng. Rietveld) i prvobitna svrha mu je bila da služi projektu AOSP (eng. Android Open Source Project). Kasnije je postao zaseban projekat sa novim, značajnijim mogućnostima koje je autor sistema Ritveld, Gvido van Rosum (hol. Guido van Rossum, autor programskog jezika Pajton) odbijao da doda u originalni projekat kako bi zadržao jednostavnost. U tom momentu je počela i značajna promena samog kôda pa je bio potreban novi naziv. Odabrano je ime Gerit, u čast holandskog arhitekte Gerita Ritvelda. Verzija softvera Gerit pod oznakom 2.X je bila značajna jer je izvorni kôd napisan u programskom jeziku Pajton reimplementiran uz pomoć programskog jezika Java. Ovaj softver je licenciran pod Apači licencom, ali postoje i vlasničke verzije softvera.
KôdStrajker
KôdStrajker (eng. Codestriker) je veb aplikacija koja podržava onlajn preglede kôda. Moguće je to učiniti na tradicionalan način, pregledom dokumentacije, ali takođe je podržan i pregled promena generisanih pomoću SCM (eng. Source Code Management) sistema. Prva verzija ovog softvera je nastala u decembru 2001. godine i objavljena je na SourceForge. platformi. Prvobitno, bio je implementiran kao ad-hok rešenje u vidu manjeg skript programa napisanog u programskom jeziku Perl. Sve mogućnosti bi se mogle svesti u jednu rečenicu: „Prosledi svim potencijalnim pregledačima na mejl adresu izlaz komande iz programa koji služi kao posrednik u sistemu za kontrolu verzija CVS i omogući pregledačima da mogu da ostavljaju komentare”.
Poslednje verzije ovog softvera omogućavaju i dalje ovakav manje formalan (eng. light-weight) metod pregleda kôda, ali podržava i potpuno formalan pristup. Za razliku od projekta Gerit, ovaj projekat je u svim svojim verzijama pod licencom koja spada u grupu onih koje zastupaju koncept softvera otvorenog kôda, tačnije GPL.
Fabrikator
Fabrikator (eng. Phabricator) nije jedna, već skup više veb aplikacija koje olakšavaju razvoj softvera, najviše rad u timu. Implementacija je najvećim delom bazirana na internim alatima kompanije Fejsbuk.
Glavne komponente sistema Fabrikator su:
- Diferencijal (eng. Differential)
- Difuzija (eng. Diffusion)
- Manifest (eng. Maniphest)
- Arkanist (eng. Arcanist)
Diferencijal je komponenta koja obavlja glavni deo posla koji se razmatra u ovom članku. Ima sličan tok rada kao RevjuBord, što je prikazano na grafu ranije. Razlika je samo što ceo proces ne obavlja samostalno kao RevjuBord, već koristi i alat Arkanist pomoću kog se iz terminala (eng. command-line) generišu diff datoteke. Difuzija omogućava pregled repozitorijuma, što implicitno omogućava pregled kôda nakon što izmena bude potvrđena na globalnom repozitorijumu (eng. post-push review). Manifest je komponenta koja služi za praćanje grešaka (eng. bug tracker).
Razlog široke upotrebe alata za pregled kôda je potreba proizvodnih menadžera (eng. product managers) da podstaknu članove tima da budu ažurni i pedantni pri pregledanju. Alati mogu da obezbede timovima manje rigoroznu kontrolu pregleda, ali i strože mehanizme kontrole, u vidu servera za praćenje pregleda kôda (eng. verision control server).