Pokročílí 6: Agilný vývoj, verziovacie systémy, správa vývoja¶
Ak softvér vyvíja tím ľudí, dohodnú sa na spôsobe spolupráce aby si navzájom rozumeli a nevznikal chaos. Metódy a princípy pri tvorbe softvéru sa s rokmi menili. V súčasnosti je zaužívaný tzv. agilný prístup k vývoju softvéru. Dnes si ho bližšie priblížime.
Agilný vývoj¶
Programovací jazyk Python je svojou dynamickou povahou a veľkou open source komunitou veľmi vhodný na použitie agilných prístupov. Rýchlo sa v ňom tvoria a overujú nové nápady, má výbornú podporu pre automatizované testovanie a nástroje pre priebežné nasadzovanie softvéru.
V oblasti softvérového vývoja sa osvedčilo niekoľko nástrojov a techník, ktoré pomáhajú a uľahčujú používanie agilných prístupov.
Kanban¶
Prvou technikou je Kanban, v ktorom si úlohy rozdelíme do rôznych stĺpcov, ktoré reprezentujú stav, v akom sa úloha nachádza. Tradičné kategórie sú "Backlog", "To Do", "In development", "QA" a "Done". Ako sa na úlohe postupne pracuje, tak sa úloha presúva medzi stĺpcami. Populárnymi nástrojmi pre Kanban sú nástroje GitHub Projects, Trello alebo Jira.
Ukážka nástroja používajúceho Kanban
Scrum¶
Najpopulárnejším nástrojom pre podporu techník SCRUM je Jira, ktorá je však často príliš komplikovaná a práca v Jire zaberá veľa času a energie. Pre menšie tímy sú často vhodnejšie agilné nástroje platformy GitHub.
Učím sa s pomocou umelej inteligencie
Prečo sú Scrum a techniky Extrémneho programovania často kontroverzné pri ich použití v rámci agilného softvérového vývoja? Ako vieme eliminovať ich nevýhody? Vedela by metodológia Lean software development pomôcť?
Ostatné techniky¶
Verziovacie systémy¶
Či už programujete sám alebo v rámci nejakého tímu, nástroje na správu verzií sú jedny z najdôležitejších nástrojov pri softvérovom vývoji.
Verziovacie systémy (VCS – Version Control Systems) sú nástroje, ktoré umožňujú sledovať zmeny v zdrojových súboroch počas softvérového vývoja. Pomocou nich sa vieme vrátiť k starším verziám, sledovať kto čo zmenil, riešiť konflikty, a efektívne spolupracovať v tíme.
V súčasnosti sú populárne distribuovaný verziovacie systémy, kedy každý jeden programátor má na svojom počítači svoju vlastnú kópiu projektu z celou jeho históriou. Pomocou distribuovaných verziovacích systémov si programátori vedia tieto svoje jednotlivé kópie ľahko synchronizovať a zdieľať.
Vlastnosti distribuovaných VCS:
- História zmien, kedykoľvek sa viem vrátiť späť
- Nie je nutný server, celý repozitár mám na svojom počítači
- Vetvenie - branching - pre skúšanie nových vecí, experimentovanie a opravu bugov
- Zlučovanie - merging - zlúčenie zmien z iných vetiev alebo od iných ľudí
- Tagovanie - tagging - označenie konkrétnych bodov v histórii napr. verziou softvéru
- Distribuovaná spolupráca - zdieľanie súborov s inými
git¶
Najpopulárnejším nástrojom na správu verzií je git. Stal sa z neho de facto štandard verzionovania a budeme ho používať aj my. Práci s nástrojom git sa bližšie budeme venovať inokedy, nateraz si však tento nástroj nainštalujte do svojho počítača.
Do svojho počítača si zo stránky https://git-scm.com/downloads stiahnite a nainštalujte git do svojho počítača. Pri inštalácii máte možnosť detailne nastaviť chovanie programu. Odporúčame ponechať všetky nastavenia na odporúčaných hodnotách.
Či máme git správne nainštalovaný zistíme cez príkazový riadok nasledovným spôsobom
GitHub¶
Platforma GitHub poskytuje zdarma nástroje agilného programovania a umožňuje zdieľať git repozitár medzi viacerými vývojármi. Poskytuje tiež Kanban tabuľku, a issues na evidenciu bugov a featurov.
Vytvorte si konto na stránke github.com a cez edupage mi zašlite svoje užívateľské meno, aby som vás vedel pridať do projektov, na ktorých budeme pracovať.
GitHub nie je jediný nástroj na správu vývoja softvéru nad git repozitárom. Jeho hlavnou konkurenciou je GitLab, ktorý si vieme zadarmo nainštalovať ak máme svoj vlastný server.
Správa vývoja¶
Okrem správy verzií máme k dispozícii aj iné nástroje na správu rôznych aspektov softvérového vývoja.
Na správu úloh a sprintov v agilnom programovní vieme využiť Kanban tabuľku a správu ticketov a pull requestov na platforme GitHub. Pull requesty sú žiadosti o pridanie zmien do hlavného kódu, ktoré vieme vyhodnotiť a schváliť alebo odmietnuť. Tickety nám slúžia na evidenciu chýb a požiadaviek na nové funkcionality.
Komunikácie v tíme často prebieha online formou, a medzi nástroje na takúto komunikáciu patria Slack a Microsoft Teams.
Aby sme vedeli čítať kód napísaný inými programátormi, je vhodné dodržiavať určité štandardy kvality. V Pythone sú tieto štandardy spísané v príručke PEP 8 - Sprievodca štýlom. IDE PyCharm nás často automaticky upozorní, keď tieto štandardy nedodržiavame.
Medzi pokročilé nástroje správy vývoja softvéru patrí automatizované testovanie a nasadzovanie aplikácie, anglicky CI/CD, Continuous Integration/Continuous Deployment. V tomto nám tiež vie pomôcť GitHub so svojím GitHub Actions, alebo iné nástroje ako napríklad Jenkins a CircleCI. Testovanie v Pythone sa často realizuje pomocou nástroja pytest.
Zhrnutie cvičenia¶
- Manifesto agilného vývoja softvéru
- Ľudia a komunikácia sú viac než procesy a nástroje
- Funkčný softvér je viac než vyčerpávajúca dokumentácia
- Spolupráca so zákazníkom je viac než dojednávanie zmluvy
- Radšej reagovať na zmenu než sa držať plánu.
- Nevýhody agilného prístupu
- Nedostatok dokumentácie a plánovania
- Scope creep - neustále pridávanie nových funkcionalít
- Prílišná byrokracia, ceremónia a rituály
- Scrum pojmy
- Sprint - mesačné alebo dvojtýždňové iterácie návrhu, vývoja a vyhodnotenia
- Daily Standup - pravidelná krátka tímová porada
- Product Owner - človek zodpovedný za dodržanie vízie projektu
- Scrum Master - asistent, ktorý pomáha, aby v tíme fungovali agilné prístupy
- Verziovacie systémy (VCS – Version Control Systems) sú nástroje, ktoré umožňujú sledovať zmeny v zdrojových súboroch počas softvérového vývoja
- História zmien, kedykoľvek sa viem vrátiť späť
- Nie je nutný server, celý repozitár mám na svojom počítači
- Vetvenie - branching - pre skúšanie nových vecí, experimentovanie a opravu bugov
- Zlučovanie - merging - zlúčenie zmien z iných vetiev alebo od iných ľudí
- Tagovanie - tagging - označenie konkrétnych bodov v histórii napr. verziou softvéru
- Distribuovaná spolupráca - zdieľanie súborov s inými
- git - najpopulárnejší nástroj na správu verzií
- Stiahnuť a nainštalovať zo stránky https://git-scm.com/downloads
- GitHub - Platforma na správu softvérového vývoja a git repozitára
- Vytvoriť si konto na github.com a zaslať mi vaše užívateľské meno
- Ostatné nástroje na správu softvérového vývoja
- Kanban - Rozdelenie úloh do stĺpcov podľa stavu - GitHub projects
- Tickety a Pull requesty - GitHub
- Virtuálna komunikácia pomocou Slack alebo Microsoft Teams
- Dokumentácia pomocou textových súborov vo formáte MarkDown alebo reStructuredText - GitHub vie pekne zobraziť
- Dodržiavanie štýlov programovania - PEP 8
- CI/CD, Continuous Integration/Continuous Deployment pomocou GitHub Actions
- Testovanie pomocou pytest - často súčasť CI/CD
Poznámky do zošita
V zošite je potrebné mať napísané aspoň tieto poznámky:
AGILNÝ VÝVOJ
Manifesto agilného vývoja softvéru
- Ľudia a komunikácia sú viac než procesy a nástroje
- Funkčný softvér je viac než vyčerpávajúca dokumentácia
- Spolupráca so zákazníkom je viac než dojednávanie zmluvy
- Radšej reagovať na zmenu než sa držať plánu.
Riziká
Nedostatok dokumentácie a plánovania
Scope creep - neustále pridávanie nových funkcionalít
Prílišná byrokracia, ceremónia a rituály
Scrum pojmy
- Sprint - 1-4 týždňové opakovanie návrhu, vývoja a vyhodnotenia
- Daily Standup - pravidelná krátka tímová porada
- Product Owner - človek zodpovedný za dodržanie vízie projektu
- Scrum Master - asistent, ktorý pomáha, aby v tíme fungovali agilné prístupy
Verziovacie systémy
- História zmien
- Celý repozitár na svojom počítači
- Vetvenie - branching - experimentovanie a oprava bugov
- Zlučovanie - merging - zakomponovanie zmien
- Tagovanie - tagging - označenie bodov v histórii napr. verziou
- Distribuovaná spolupráca - zdieľanie súborov s inými
Kanban - Rozdelenie úloh do stĺpcov podľa stavu - GitHub projects
Dokumentácia - formát MarkDown alebo reStructuredText
Štýly programovania - PEP 8
Skúšanie a kontrola vedomostí
Do budúcej hodiny:
- Nainštalovať si git na svojom počítačí
- Vytvoriť si konto na GitHube a zaslať mi užívateľské meno
Okruhy otázok na test:
- Aké sú princípy agilného vývoja
- Riziká agilného vývoja
- Scrum pojmy
- Vlastnosti verziovacích systémov
- Čo je Kanban
