Code reviews: sú užitočné alebo strata času?

Jednou z najdôležitejších zručností programátora je schopnosť písať čistý kód, ktorý je udržiavateľný a bez chýb. Bez ohľadu na to, ako si zručný, vždy je možné, že prehliadneš určité chyby alebo potenciálne problémy vo svojom kóde. Tu prichádza na rad proces kontroly kódu (code review).

Kontroly kódu sa stali súčasťou procesu vývoja softvéru v mnohých vývojárskych firmách a ich cieľom je kontrola kódu kolegami z tímov predtým ako sa komitne do repozitára zdrojových kódov za účelom zachytenia možných chýb, zabezpečenia dodržiavania štandardov kódovania a v neposlednom rade zdieľania znalostí medzi členmi tímu.

Niektorí ich majú radi, iní ich nenávidia. Zatiaľ čo niektorí tvrdia, že kontroly kódu sú nevyhnutnou súčasťou procesu vývoja, iní spochybňujú ich efektivitu a označujú ich za časovo náročné a potenciálne nadbytočné. O skutočných benefitoch kontroly kódu sa vedú rozsiahle diskusie. Sú teda kontroly kódu skutočne užitočné alebo sú len stratou času? V našom článku sa pozrieme na argumenty oboch táborov.

Prečítaj si aj článok Ako na efektívne code reviews: tipy a triky.Code reviews (revízia kódu): užitočné alebo nie?

Čo je vlastne tá revízia alebo kontrola kódu (code review)?

Kontrola kódu zahŕňa kontrolu kódu napísaného jedným alebo viacerými vývojármi pred jeho zlúčením do spoločného repozitára zdrojových kódov. Je to systematické preskúmanie zdrojového kódu riadok po riadku jednou alebo viacerými osobami s cieľom nájsť a opraviť chyby, zlepšiť kvalitu a zabezpečiť súlad so štandardmi kódovania.

Zvyčajne zahŕňa vývojárov, ktorí kontrolujú zmeny kódu vykonané ich kolegami, poskytujú spätnú väzbu, navrhujú vylepšenia a identifikujú potenciálne problémy. Kontroly kódu možno vykonávať rôznymi metódami, ako je párové programovanie, emailom, osobné alebo online stretnutia alebo pomocou špecializovaných nástrojov, ktoré uľahčujú asynchrónne kontroly.

Proces kontroly kódu

Pri kontrole (code review) sa zvyčajne preskúmavajú rôzne aspekty kódu s cieľom zabezpečiť jeho kvalitu a správnosť. Ponúkame zoznam niektorých z hlavných metrík, ktoré sa môžu kontrolovať počas procesu code review:

Funkčnosť: Overuje sa, či kód správne vykonáva požadované funkcie a operácie. Kontroluje sa, či kód rieši požiadavky a zabezpečuje správne spracovanie dát a vstupov.

Efektívnosť a optimalizácia: Kontroluje sa efektívnosť kódu a hľadajú sa príležitosti na optimalizáciu. To môže zahŕňať zmenu algoritmov, elimináciu zbytočných opakovaní alebo vylepšenie výkonu kritických častí kódu.

Bezpečnosť: Posudzuje sa, či kód dodržiava bezpečnostné normy a zásady. To zahŕňa prevenciu možných bezpečnostných zraniteľností ako SQL injection, cross-site scripting (XSS) alebo neoprávnené prístupy.

Architektúra a návrhové vzory: Analyzuje sa, či kód dodržiava návrhové vzory a architektonické princípy, ktoré sa používajú v projekte. Tento aspekt zahŕňa aj overenie, či kód dodržiava štandardné pravidlá návrhu tried, modulov a vrstiev.

Pri kontrole (code review) sa zvyčajne preskúmavajú rôzne aspekty kódu s cieľom zabezpečiť jeho kvalitu a správnosť.

Čitateľnosť: Zisťuje sa, ako ľahko je kód čitateľný a pochopiteľný pre ostatných vývojárov. Tento aspekt zahŕňa dôležité faktory ako použitie zrozumiteľných premenných, správnych a popisných názvov funkcií a okomentovania horšie pochopiteľnejších častí kódu.

Štýl a konvencie kódovania: Kontroluje sa, či kód dodržiava stanovené konvencie a štýly kódovania, ktoré sú definované pre daný projekt alebo jazyk programovania. Tento aspekt zahŕňa formátovanie kódu, používanie medzier, odrážky, a podobne.

Testovanie: Skúma sa, či bol kód riadne otestovaný a či sú napísané testy, ktoré pokrývajú všetky kritické aspekty jeho funkcionality. Tento bod zahŕňa aj kontrolu, či nový kód nezničil už existujúce testy a či pridáva nové prípady testovania.

Dokumentácia: Posudzuje sa, či je kód primerane zdokumentovaný, aby ho bolo ľahké pochopiť a používať ostatnými vývojármi. Tento bod zahŕňa komentáre kódu, dokumentáciu nového API a používateľské príručky.

Typy code review

Pozrime sa teraz aké rôzne typy kontrol kódu sa používajú vo firmách.

Osobne (alebo zdieľaním obrazovky cez MS Teams)

Tento spôsob je pre väčšinu vývojárov pomerne jednoduchý, pohodlný a vývojár dostane spätnú väzbu pomerne rýchlo. Keď je tvoj kód pripravený, nájdeš si skúseného kolegu z tímu, dohodneš si termín a osobne alebo online si spoločne prejdete napísaný kód, ktorý by si rád komitol do repozitára. Tento typ code review je vhodný pre zmeny menšieho rozsahu, keďže recenzent má menej času si kód v pokoji pozrieť.

E-mailové vlákno

Rieši problém hľadania termínu na code review. Akonáhle je daný kus kódu pripravený na kontrolu, súbor (alebo hyperlinka naň) sa odošle e-mailom príslušnému kolegovi (alebo kolegom), aby si ich každý mohol prezrieť hneď, ako mu to pracovný harmonogram dovolí. Aj keď tento prístup môže byť určite flexibilnejší a prispôsobivejší než tradičnejšie techniky, ako je napríklad meeting ľudí zameraný na kontrolu kódu, e-mailové vlákno s návrhmi a rozdielnymi názormi na opravu kódu sa môže rýchlo nafúknuť a nemusí byť zrejmé, čo sa už opravilo a čo ešte nie.

Párové programovanie

Párové programovanie je prístup k písaniu softvéru, keď sa jednej úlohe venujú (najčastejšie) dvaja vývojári, pracujú na rovnakom kóde spoločne, a tak si navzájom kontrolujú prácu. Je to dobrý spôsob, ako môžu starší vývojári mentorovať mladších kolegov a kontrolu kódu zapracujú priamo do procesu programovania. Tento prístup kontroly kódu však stráca na objektívnosti a nezaujatom prístupe pri pohľade a kontrole vlastného kódu. Najväčšou nevýhodou je však v porovnaní s inými metódami vyššia spotreba zdrojov (najmä personál a čas).

Párové programovanie je prístup k písaniu softvéru, keď sa jednej úlohe venujú (najčastejšie) dvaja vývojári.

Softvérové nástroje

Kombinujú výhody predchádzajúcich prístupov a riešia mnohé z obmedzení predchádzajúcich vyššie spomenutých prístupov a ponúkajú jednoduchší a efektívnejší spôsob kontroly kódu. Kontrola kódu môže prebiehať priamo v prehliadači alebo sa tieto nástroje dajú bezproblémovo prostredníctvom pluginov integrovať do rôznych vývojových prostredí alebo nástrojov na správu kódu.

Umožňujú sledovať komentáre kolegov a navrhované riešenia defektov v jasnom a súvislom poradí (podobne ako sledovanie zmien v MS Word), kontroly sú asynchrónne (to znamená podľa toho, kto má kedy čas), autor posudzovaného kódu dostáva notifikácie na nové recenzie.

Odpadáva hľadanie skúseného kolegu a dohadovanie termínu na kontrolu kódu, ľudia pracujú na svojich mašinách a majú k dispozícií toľko času, koľko potrebujú na posúdenie správnosti kódu. Softvérové nástroje navyše mávajú zabudované rôzne metriky na statickú analýzu kódu, ktorá môžu recenzenta upozorniť na konkrétne časti kódu, na ktoré by sa mal pri svojej kontrole zamerať.

Výhody kontrol kódu

Teraz sa poďme pozrieť na argumenty zástancov vykonávania kontrol kódu ako aj ich odporcov. Začnime s argumentami, s ktorými asi všetci budeme súhlasiť.

Dva pári očí vidia viac ako jeden.

My vývojári niekedy preceňujeme aký dobrý je náš kód a druhý nezávislý pohľad nám môže poskytnúť na náš kód iný pohľad a dovolí nám pozerať sa na kód objektívnejšie.

Recenzent nám môže poskytnúť cennú spätnú väzbu ako čitateľný a pochopiteľný je náš kód. Zvyčajne sa snažíme písať kód tak, že keď sa k nemu po nejakej dobe vrátime, tak nemáme problém pomerne rýchlo pochopiť, ako daný kód funguje a čo rieši.

Zdieľanie znalostí.

Kontrola kódu poskytuje vynikajúcu príležitosť na zdieľanie znalostí medzi členmi tímu a niečo nového sa naučiť. Či sa jedná o rôzne štýly kódovania, techník a osvedčených postupov alebo využívania nových frameworkov a knižníc, v tomto vzájomnom obohacovaní osobne vidím najvýznamnejší prínos procesu kontroly kódu.

Detekcia chýb

Často sa spomína ako výhoda kontroly kódu, že je to istá forma detekcie chýb a ich odchytenie ešte predtým ako sa začne kód používať v produkčnom prostredí z dlhodobého hľadiska ušetrí čas a zdroje. Ako protiargument sa však pripomína, že kód pred code review by mal byť funkčný a otestovaný.

Zlepšená kvalita kódu

Ďalším často spomínaním prínosom je zlepšená kvalita kódu. Prostredníctvom konštruktívnej spätnej väzby a návrhov na vylepšenia, pomáhajú kontroly kódu zlepšiť celkovú kvalitu zdrojových kódov. Recenzenti môžu ale identifikovať aj oblasti pre optimalizáciu, refaktoring kódu alebo zlepšenie dokumentácie.

Tieto výhody ale skúsenosťami programátora postupne miznú a vývojár s mnohými odpracovanými rokmi je tieto oblasti schopný identifikovať sám a zohľadniť ich pri návrhu a implementácií riešenia.

Konzistentnosť štandardov a postupov

Kontroly kódu zabezpečujú konzistentnosť štandardov a dohodnutých postupov kódovania v rámci tímu. To je síce pravda, ale na to sa dajú využiť rôzne aplikácie, ako napr. Sonar, ktoré to budú kontrolovať automaticky a tým odpadáva nutnosť kontrolovať to pri code review.

Nevýhody kontrol kódu

Dostávame sa k argumentom odporcov vykonávania code reviews.

Zdĺhavé, časovo náročné, a preto aj drahé
A okrem toho sú code reviews málokedy zábavné. Preto sa najmä pod časovým tlakom (pod ktorým sa z času na čas ocitneme všetci) alebo rýchlo sa blížiacim termínom buď vôbec nevykonávajú, alebo sa aspoň občas vynechávajú. To sa týka predovšetkým už raz kontrolovaného kódu, ktorý by sa mal opakovane kontrolovať pri každej zmene.

Kontrola kódu navyše môže byť časovo náročná, najmä vo veľkých vývojových tímoch alebo projektoch s rozsiahlymi bázami kódu. Dôkladná kontrola každého riadku kódu si vyžaduje značný čas a úsilie, čo môže spomaliť proces vývoja.

Náchylné na chyby

Sú náchylné na chyby, pretože recenzent je tiež iba človek s väčšími či menšími skúsenosťami a vo väčšine prípadov nie je odborníkom na bezpečnosť. Napriek maximálnemu úsiliu recenzentov môžu niektoré problémy počas kontroly kódu stále prekĺznuť. Ľudská chyba, únava alebo nedostatok odborných znalostí v určitých oblastiach môžu viesť k prehliadaniu kritických problémov, čím sa znižuje účinnosť procesu kontroly kódu.

Vyžadujú aspoň dvoch programátorov

Vyžadujú aspoň dvoch programátorov v tíme, ktorí sú oboznámení s technológiou. Recenzent, ktorý kontroluje kód by mal byť skúsenostne na rovnakej alebo vyššej úrovni, pretože, keď robí code review menej skúsený programátor svojmu skúsenejšiemu kolegovi, celá kontrola kódu väčšinou stráca zmysel.

Subjektívne a demotivujúce

Kontroly kódu môžu byť niekedy subjektívne, pričom rôzni recenzenti majú rôzne názory na kvalitu a štýl kódu. Táto subjektivita často potom vedie ku konfliktom, alebo zdĺhavým diskusiám v tíme, čo môže oneskoriť dokončenie kontroly a brániť produktivite.

Ak je spätná väzba príliš kritická alebo nesprávne podaná, autor posudzovaného kódu sa môže cítiť demotivovaný. Podobne, ak jeho kód nie je po opakovaných kontrolách a zapracovaní spätnej väzby prijatý do repozitára.

Vývojári softvéru majú tendenciu milovať svoj vlastný kód viac ako čokoľvek iné a nenávidia kód iných vývojárov, ak je napísaný spôsobom, ktorý sa im nepáči. Sú na svoj kód pomerne citliví a ak niekto poukáže, že ich kód je zlý, asociujú si to s tým, že oni sú zlí programátori.

Nekonečné debaty

Celkovo kontroly kódu podnecujú nekonečné debaty medzi vývojármi. Vývojár nemôže odolať túžbe dokázať inému vývojárovi, že spôsob, akým píše kód, je nesprávny. Vývojári zvyčajne robia recenzie kódu zo svojho vlastného pohľadu a neradi považujú rôzne prístupy za správne. Radšej veríme, že naše prístupy sú len tie správne. Vysvetľuje sa to tým, že sme ako ľudia príliš leniví a míňať čas a energiu na riešenie už vyriešeného problému, je pre nás príliš bolestivé.

Každý vývojár chce byť uznaný, a preto predkladá svoje argumenty a prípady použitia, aby presvedčil recenzenta, že jeho prístup k riešeniu problému je lepší a optimálnejší. To privádza vývojárov k nekonečným debatám, ktoré v konečnom dôsledku ubližujú firme aj biznisu.

Nadmerné premýšľanie

Ďalším problémom, ktorý sa objavuje pri kontrole kódu, je nadmerné premýšľanie. Aj keď kód vyzerá na prvý pohľad dobre, podvedome v ňom chceme nájsť nejakú chybu. Prirodzene sa cítime dobre, keď sme v niečom užitoční, a keď v kóde nájdeme nejakú chybu, cítime sa užitoční.

Paradoxne, ak dáme vylepšený (opravený) kód tomu istému recenzentovi, aby ho znova skontroloval, nájde viac vecí na zlepšenie. Navyše, ak dáme rovnaký kód na kontrolu inému vývojárovi, nájde ešte viac defektov.

Záver

Priniesli sme vám rôzne pohľady na revízie kódu pred komitovaním a je zrejmé, že majú veľa výhod aj nevýhod, ktoré prevažujú to necháme na posúdenie čitateľa. Avšak ak sa nenastaví správne proces kontroly kódu, nevyčlení sa dostatok času, resp. kontroly sa vykonávajú pod časovým stresom a ešte k tomu nie je správne podaná konštruktívna spätná väzba recenzenta autorovi kódu, kontroly kódu môžu významne narušiť pracovnú pohodu v tíme a viesť ku nekonštruktívnym hádkam, koho riešenie problému je lepšie. Preto je dôležité začať si viac dôverovať a nechať ostatným slobodu rozhodovania.

My v msg life Slovakia používame tiež code reviews, ale iba pre začínajúcich programátorov. Takto sa môžu prostredníctvom skúsenejších kolegov veľa naučiť a rýchlejšie sa dostanú do produktívneho pracovného procesu.

Ak si Java programátor a hľadáš prácu, pozri si naše benefity pre zamestnancov a reaguj na najnovšie ponuky práce.

O autorovi

Jozef Wagner

Java Developer Senior

Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

Daj nám o sebe vedieť