12. týždeň

Riešenie úloh v tíme

Ciele

  1. Naučiť sa čítať kód existujúcej aplikácie a modifikovať ho pre riešenie zadaných úloh.
  2. Naučiť sa vytvárať jednotkové testy pre všetok vytváraný kód.
  3. Vyskúšať si prácu s vetvami v Gite a vytvárať žiadosti o zlúčenie (merge request).
  4. Naučiť sa vykonávať inšpekciu kódu (code review).
  5. Prakticky si vyskúšať zlučovanie vetiev a prípadné riešenie konfliktov.

Úvod

Toto zadanie sa snaží o priblíženie reálneho postupu vývoja softvéru v tíme. Predstavte si, že ste sa ocitli vo firme a ste pridelení na projekt, ktorý už je vyvíjaný nejaký čas. V našom prípade to je projekt implementujúci logickú hru s názvom Míny, ktorý je napísaný v jazyku C. Obsahuje podstatnú časť funkcionality, avšak chýbajú tam niektoré veci, ktoré je potrebné dorobiť.

Podmienky

Zadanie budete riešiť v štvor- až päťčlenných tímoch.

Úlohy sú definované tiketmi v GitLabe (sekcia Issues). Každý člen tímu si musí prideliť jeden tiket a riešiť úlohu, ktorá je v ňom definovaná v samostatnej vetve v Gite. Súčasťou riešenia musia byť aj jednotkové testy, ktoré overujú správnosť vytvorenej implementácie.

Po tom, čo je riešenie implementované, vytvorte žiadosť pre zlúčenie (merge request), ktorá bude asociovaná s riešeným tiketom. Každá žiadosť o zlúčenie musí byť skontrolovaná dvomi členmi tímu (code review). Po vyriešení všetkých pripomienok a získaní súhlasu od kontrolujúcich je potrebné zlúčiť riešenie s hlavnou vetvou. Následne môže byť uzavretý aj príslušný tiket.

Každý študent teda musí:

  • riešiť 1 tiket v samostatnej vetve,
  • vytvoriť žiadosť o zlúčenie pre svoje riešenie,
  • vykonať inšpekciu kódu pre 2 žiadosti o zlúčenie,
  • vykonať opravy svojho riešenia na základe odporúčaní kolegov,
  • zlúčiť svoju vetvu do vetvy master.

Je potrebné zamerať sa okrem samotného kódu riešenia aj na kvalitu testov a hlavne celého procesu komunikácie v GitLabe.

Vytvorenie tímu a projektu

Dohodnite sa so spolužiakmi v rámci študijnej skupiny a vytvorte štvor- až päťčlenné tímy. Jeden z členov tímu vytvorí projekt pre tím pomocou špeciálnej služby, v ktorej si zvolíte vašu skupinu a členov tímu. Po tomto vám bude automaticky vytvorený klon vzorového projektu s potrebnými nastaveniami.

Úloha 0.1

Úlohy

Vyberte si jeden tiket a priraďte seba ako riešiteľa — vybrať assign yourself v pravom paneli. Každý člen tímu musí mať priradenú práve jednu úlohu.

Úlohy nie sú extrémne zložité. Všetky použité programovacie techniky ste už používali na iných predmetoch. Konkrétna úloha sa skladá z týchto častí:

  1. Vykonať zmeny v jadre projektu implementáciou nových funkcií, poprípade úpravou už definovaných funkcií.
  2. Implementovať jednotkové testy, ktorým sa otestuje daná funkcionalita.
  3. Ak si to povaha zadania vyžaduje, je potrebné prepojiť pridanú funkcionalitu s používateľským rozhraním.

Poznámka

Projekt už obsahuje základnú konfiguráciu pre editor VS Code, vďaka ktorej môžete jednoducho spustiť kompiláciu skratkou Ctrl+Shift+B a používať zabudovaný debugger. Podmienkou je inštalácia rozšírenia C/C++. Viac informácií o vývoji vo VS Code nájdete v dokumentácii.

Poznámka

Projekt tiež obsahuje konfiguráciu pre IDE CLion s dvomi konfiguráciami spúšťania: Mines pre kompiláciu a spúšťanie samotnej hry a Tests pre jednotkové testy. Ako študenti máte nárok na bezplatné licencie produktov od JetBrains.

Poznámka

Neexistuje bezchybný projekt, či už je to v škole alebo v práci. To platí aj v tomto prípade. Ak nájdete chyby vo vzorovom projekte, ale budete máť nápady, ako ho vylepšiť, vytvorte tiket v projekte Mínu na GitLabe.

Žiadosť o zlúčenie

Keď je implementácia úlohy dokončená, odošlite vašu Git vetvu do centrálneho repozitára a vytvorte žiadosť o zlúčenie. Informujte o tom svojich kolegov v tíme. Keď kolegovia skontrolujú vaše zmeny, opravte kód na základe ich pripomienok.

Žiadosť o zlučenie musíte vytvoriť najneskôr v 10. týždni semestra (do 23.4.2023), resp. podľa pokynov cvičiaceho.

Kontrola kódu

Každý člen tímu musí skontrolovať aspoň dve žiadosti o zlúčenie (MR). V jedne sa označte ako Assignee a v druhej ako Reviewer.

Prejdite si zmeny vykonané vašim kolegom a zamyslite sa nad tým, ako by bolo možné ich zlepšiť. Svoje návrhy uveďte vo forme komentárov k MR. Riaďte sa odporúčaniami pre kontrolu kódu.

Diskusia ku komentárom

Autor MR musí reagovať na komentáre kolegov, zlepšiť kód prípadne vysvetliť, prečo navrhovaná zmena nie je vhodná. Komunikácia musí byť vedená cez komentáre k MR, aby aj ostatní vývojári mali prehľad o zmenách a ich dôvodoch. Uvádzajte odkazy na konkrétne záznamy (commit), v ktorých boli pripomienky vyriešené.

Ak sú recenzenti spokojní s vyriešením ich pripomienok, označia MR ako schválený pomocou tlačidla „Approve“.

Zlúčenie

Po tom čo obidvaja recenzenti schválili MR, jeho autor (prípadne Assignee, ak sa tak dohodne v celom tíme) musí zlúčiť danú vetvu do vetvy master a tým uzavrieť MR.

Samotné zlúčenie zrecenzovaného a opraveného kódu musí prebehnúť najneskôr do konca 11. týždňa (do 30.4.2022).

Priebeh práce na jednom tikete

Priebeh práce troch študentov na riešení jedného tiketu
Obr. 1: Priebeh práce troch študentov na riešení jedného tiketu