Ciele
- Dozvedieť sa o nástrojoch a postupoch používaných pri profesionálnom vývoji softvéru v tíme.
- Pochopiť použitie vetiev a žiadosti o zlúčenie.
- Oboznámiť sa s princípmi kontroly kódu (code review).
Úvod
Pri praktickom vývoji sa okrem systémov pre správu verzií používajú aj ďalšie podporné nástroje. Patria medzi ne systémy pre sledovanie tiketov (issue tracking), ktoré umožňujú systematicky zaznamenávať úlohy a problémy a diskutovať o ich riešení. Súvisiacim nástrojom sú žiadosti o zlúčenie, ktoré umožňujú členom tímu skontrolovať kód pred tým, ako bude pridaný do hlavnej vetvy projektu.
Postup
Krok 1: Sledovanie problémov a úloh
Pri vývoji softvéru sa často používajú systémy, ktoré sa po anglicky označujú „issue tracking systems“ alebo „ticket tracking systems“. Presný preklad pojmu issue nie je jednoduchý, jeho definícia podľa slovníka Cambridge Dictionary je nasledovná:
Issue — a subject or problem that people are thinking and talking about.
My budeme preto používať pojem sledovanie tiketov. Každý záznam o probléme, úlohe alebo téme pre diskusiu sa označuje ako tiket.
Úloha 1.1
Pozrite si tikety populárneho vektorového grafického editora Inkscape: https://gitlab.com/inkscape/inkscape/issues
Ako môžete vidieť, každý tiket má poradové číslo názov, popis a ďalšie atribúty. Tikety môžu byť zatvorené, ak bol problém vyriešený alebo sa naopak rozhodlo, že sa z nejakého dôvodu riešiť nebude. Ku každému tiketu je tiež otvorená diskusia, kde sa jednotliví členovia tímu a prípadne aj používatelia môžu vyjadriť. Zvyčajne má tiket pridelenú aj osobu, ktorá je za jeho vyriešenie zodpovedná.
V jednom zo zadaní na tomto predmete bude vašou úlohu vyriešiť pridelené tikety v zadanom projekte.
Úloha 1.2
Zamyslite sa nad tým, čo by mal obsahovať dobrý popis úlohy a čo dobrý popis chyby (bug report)?
Krok 2: Vývoj vo vetvách, žiadosti o zlúčenie
Ako sme už spomínali, je užitočné každú novú funkcionalitu vyvíjať v samostatnej vetve, ktorej sa hovorí feature branch. Jednou z výhod práce v samostatnej vetve je to, že po dokončení implementácie je možné, aby ďalší členovia vývojového tímu skontrolovali zmeny v kóde predtým, ako budú zlúčené do hlavnej vetvy. Systémy ako GitHub, Bitbucket alebo GitLab poskytujú nástroj pre kontrolu zmien pred zlúčením, ktorý sa v niektorých systémoch nazýva pull request (PR) a v iných merge request (MR). Keďže my používame GitLab, budeme používať pojem žiadosť o zlúčenie (merge request).
Keď autor nejakej novej funkcionality ju považuje za pripravenú na zlúčenie do hlavnej vetvy, vytvorí žiadosť o zlúčenie vo webovom rozhraní GitLabu. Ostatní členovia tímu môžu skontrolovať kód a napísať komentáre upozorňujúce na nedostatky alebo navrhujúce zlepšenie. Autor zmien môže pridať ďalšie záznamy do vetvy so zlepšeniami kódu, až kým nevyrieši všetky nedostatky. Na konci niekto z tímu zlúči zmeny do vetvy master, čím sa žiadosť o zlúčenie uzavrie.
Úloha 2.1
Pozrite si príklady žiadosti o zlúčenie projektu Inkscape.
Úloha 2.2
Prečítajte si úvod do práce s žiadosťami o zlúčenie v GitLabe.
Krok 3: Kontrola kódu
Kontrola kódu (z angl. Code Review) je proces, pri ktorom jeden programátor systematicky prechádza kód iného programátora za účelom nájsť chyby, vylepšiť architektúru a funkcionalitu kódu a pomôcť zrozumiteľnosti kódu. Hlavnou výhodou tejto metódy je, že umožňuje odhalenie chýb, ktoré môžu uniknúť automatizovaným testom.
Okrem možnosti nájsť chyby je kontrola kódu dôležitá pre zabezpečenie udržateľnosti kódu — schopnosti vývojárov použiť a upraviť existujúci kód v budúcnosti. Pri vývoji softvéru treba dávať pozor na to, že my na ňom nebudeme robiť navždy. To, čo sa nám v kóde javí ako samozrejmé, môže prísť inému vývojárovi ako úplne nezmyselné. Udržovať softvér je náročné a drahé. Obzvlášť to platí v prípade zmeny vývojárov, keď jeden vývojár opustí projekt a nahradí ho nový.
Poznámka
Skúste sa pozrieť na kód, ktorý ste napísali pred šiestimi mesiacmi, či porozumiete tomu, čo ste daným kódom mysleli.
Udržateľnosť kódu je možné dosiahnuť organizáciou kódu a pomocou dokumentácie. Dôležité je, aby aj vývojár, ktorý sa nezapojil pri vývoji softvéru, bol schopný pri pozretí sa na kód identifikovať, čo daný kód robí, aké má obmedzenia a kde ho je možné využiť. Pri inšpekcii kódu je možné odhaliť časti kódu, ktoré sú nepochopiteľné.
Kontrola kódu tiež umožňuje učiť sa a zdieľať vedomosti. Pri vykonávaní inšpekcie kódu spoluvývojárov v projekte sa zabezpečí to, že každý vývojár získa istý prehľad o kóde, ktorý píšu jeho kolegovia. Je to obzvlášť dôležité pre nových vývojárov. Noví vývojári majú možnosť pri inšpekcii kódu starších vývojárov naučiť sa nové technológie a metódy. Starší vývojári zase pri inšpekcii kódu nových vývojárov majú možnosť upozorniť nováčikov na chyby a podeliť sa s nimi o svoje vedomosti.
Ďalšie informácie o užitočnosti inšpekcie kódu nájdete v článku Why code reviews matter and actually save time.
Úloha 3.1
Pozrite si príklad kontroly kódu v jednej zo žiadosti o zlúčenie projektu Inkscape.
Poznámka
Rozbaľte všetky uzavreté diskusie, aby ste si mohli ľahko prečítať aj komentáre, ktoré už boli vyriešené.
Úloha 3.2
Zamyslieť sa nad tým, čo by ste očakávali od komentárov z kontroly kódu, aby vám pomohli pri programovaní a zlepšovaní vyvíjaného programu?
Krok 4: Domáca úloha
Úloha 4.1
Prečítajte príručku pre kontrolu kódu spoločnosti Google. Predovšetkým si pozrite časť What to look for in a code review.
Zdroje
- Gunnar Morling: The Code Review Pyramid
- Google: Code Review Developer Guide