Nasadenie nástrojov softvérového inžinierstva pre vývoj softvérového produktu
![]() |
Slovenská technická univerzita
Materiálovotechnologická fakulta so sídlom v Trnave |
![]() |
Nasadenie nástrojov softvérového inžinierstva pre vývoj softvérového produktu Bakalárska práca |
Autor: | Dávid Jánosfalvi |
Pedagogický vedúci: | Ing. Juraj Ďuďák, PhD. |
Študijný odbor: | Aplikovaná informatika a automatizácia v priemysle
|
Akademický rok |
2019/2020
|
1. | Metodika vývoja softvéru |
2. | Nástroje pre správu zdrojových kódov |
3. | Implementácia nástrojov pre vývoj softvérového produktu
|
Abstrakt
Cieľom bakalárskej práce je oboznámiť sa s možnosťami nástrojov softvérového inžinierstva, ktoré pomáhajú vývojárom uľahčiť a zefektívniť svoju prácu. Zameriame sa na nástroje podporujúce prácu vývojárov ako sú systémy na správu verzii a nástroje pre CI/CD. V práci sa venujeme teoretickým poznatkom ohľadom tvorby softvérových diel. Opisujeme životný cyklus softvérov a modely vývoja, podľa ktorých sa pri vývoji produktov postupuje, a taktiež charakterizujeme systémy pre správu zdrojových kódov. Podrobne sa zameriame na systém Git a jeho ponúkané služby - Gitlab a Gogs. Overili sme ich možnosti a následne zistili ako spolupracujú s nástrojmi slúžiace pre vytváranie automatizovaných krokov počas vývoja softvérových produktov - Continuous Integration a Continuous Deployment (CI/CD). Nástroje CI/CD ako Jenkins a Gitlab CI ponúkajú vývojárom v spojení s repozitármi systému Git vytvoriť tzv. CI/CD pipeline, ktorý slúži na automatické spustenie, odskúšanie prípadne aj nasadenie vyvíjaného produktu. Na základe osvojenia si teoretických vedomostí implementujeme získané poznatky do praktickej tvorby projektov služby Git a následné spojenie s nástrojmi CI/CD. Práca opisuje, akým spôsobom sme jednotlivé služby spustili a konfigurovali pre ich správne fungovanie. Vytvorením CI/CD krokov nástrojmi Jenkins a Gitlab CI sme vytvorili automatizačné pipeline na spustenie, testovanie a nasadenie projektov. |
Abstract
The aim of the thesis is to get acquainted with the possibilities of software engineering tools that help developers facilitate their work. We will focus on tools that support the work of developers, such as different version control systems and CI/CD tools. In this work, we describe the software lifecycle and development models used to generate a useful and proper product. We also characterize source code management systems. We describe one of the most used version control systems nowadays - Git and services which use Git such as Gitlab and Gogs. We´ve tested their capabilities and found their true potential with tools used for creating automated steps during software development - Continuous Integration and Continuous Deployment (CI/CD). CI/CD tools such as Jenkins and Gitlab CI offer developers to create so-called CI/CD pipelines, which are used for automatic build, testing or even deployment of the developed product. We have implemented the acquired knowledge into the practical creation of Git projects and connected them with CI/CD tools. The implementation part describes the steps to configure and create CI/CD pipelines. By creating some projects with Jenkins and Gitlab CI, we created an automation pipeline to run, test, and deploy software products. |
Úvod
Softvérové inžinierstvo zahŕňa mnoho nástrojov, ktoré napomáhajú k vytvoreniu úspešného softvérového produktu. Tieto nástroje sú v praxi obľúbenou súčasťou života vývojárskych tímov. V tejto dobe sa čoraz častejšie využívajú automatizované procesy aj v oblasti vývoja softvéru. Tieto procesy napomáhajú k rýchlejšiemu a plynulejšiemu vývoju produktov.
V našej práci sa oboznámime s nástrojmi pre správu verzií. Zistíme, čo všetko tieto nástroje umožňujú a akým spôsobom sa s nimi pracuje. Zameriame sa na službu Git, ktorý v súčasnosti ponúka množstvo užitočných funkcií. Git vytvára úložisko v ktorom sa zaznamenávajú zmeny vykonané na súboroch vyvíjaného produktu a vytvorí tak históriu zaznamenaných zmien, teda umožňuje návrat k špecifickým verziám vyvíjaného diela. Git tiež vytvára možnosť súčasnej práce viacerých vývojárov na jednom projekte. Zistíme ako Git spolupracuje so zvolenými nástrojmi využívané na CI/CD, teda Continous Integration a Continous Delivery/Deployment. CI/CD nástroje vytvárajú automatizované procesy počas celej doby vývoja softvérového produktu. Tieto nástroje dokážu automatizovať kroky, ktoré boli predtým nevyhnutné vykonávať manuálne. V spolupráci s repozitármi služby Git je umožnené automatické spustenie, testovanie a nasadenie vyvíjaného softvérového produktu.
Na záver implementujeme všetky získané poznatky na vytvorenie reálnych projektov rôznych služieb pre prácu s Git ako sú Gogs a Gitlab. Služby pridávajú užitočné funkcie a vizuálne rozhranie pre vytvorené repozitáre. Následne integrujeme spomínané služby pre prácu s Git aj s nástrojmi na vytváranie automatizačných CI/CD krokov ako sú Jenkins a Gitlab CI. Po vytvorení tzv. CI/CD pipeline s oboma nástrojmi na spustenie, testovanie a nasadenie softvérových aplikácií sme vytvorili aj automatizovanú funkciu pre nasadenie web rozhrania vytvoreného za účelom podpori výučby programovacích jazykov. Systém je v správe vedúceho bakalárskej práce a využíva sa na Materiálovotechnologickej fakulte STU v rámci predmetov Informačné technológie a Programovacie jazyky.
V práci sa vyskytujú anglické termíny, ktoré sa v praxi využívajú aj v slovenskom jazyku, tým pádom sú podobné termíny v práci využívané v nepreloženom tvare.
Téma bakalárskej práce úzko súvisí s metódami a nástrojmi softvérového inžinierstva. Týka sa to najmä fázy návrhu, implementácie a testovania softvéru. Pri týchto fázach existujú softvérové nástroje ktoré sú nevyhnutné a nástroje, ktoré značne zvýšia efektivitu a skrátia cyklus vývoja softvéru. V tejto kapitole budú opísané základné metodiky vývoja softvéru a následne podrobne opísané nástroje používané v praxi pri vývoji softvéru.
Metodika vývoja softvéru
Životný cyklus vývoja softvéru
Životný cyklus vývoja softvéru je proces využívaný pri vývoji softvéru pre správny návrh, nasadenie, odskúšanie a údržbu softvérov. Hlavným cieľom tohto procesu je vytvoriť kvalitný a spoľahlivý softvér, ktorý spĺňa, prípadne prekračuje očakávania zákazníka a výsledný produkt vznikne v predbežne dohodnutom časovom a nákladovom rozmedzí. Pozostáva z podrobného plánu opisujúceho ako sa má vyvíjať, udržiavať, nahrádzať a vylepšovať špecifický softvér. Tiež obsahuje metodológiu pre zlepšenie kvality vyvíjaného softvéru.
Plánovanie a analýza požiadaviek
Analýza požiadaviek je najdôležitejším krokom pri vývoji softvéru (projektu). Je vykonávaný na základe požiadaviek zákazníka, prieskumu obchodných trhov a s výpomocou odborníkov v danom odbore. Tieto informácie sú po spracovaní použité na plánovanie ďalších krokov vývoja softvéru. Plánovanie zahŕňa všetky aspekty pre vývoj, zabezpečenie kvality a identifikáciu možných rizík súvisiace s projektom. Stanovia sa hlavné funkcie vyžadované od vyvíjaného softvéru a predbežný opis výsledného produktu. V tejto fáze sa určí aj termín, teda čas, do kedy je výsledný produkt možné zrealizovať. Ekonomické kalkulácie a následné ohodnotenie nákladov sú tiež súčasťou fázy plánovania. Výsledkom plánovania je zistenie technickej uskutočniteľnosti daného softvéru a určí sa najvýhodnejší a najspoľahlivejší spôsob realizácie projektu. Odborný výsledný dokument fázy plánovania sa nazýva hrubý katalóg požiadaviek, ktorý obsahuje podľa systematizácie a klasifikácie zoradené požiadavky.
Definícia požiadaviek
Po správne vykonanej analýze nasleduje zadefinovanie a zdokumentovanie všetkých zistených požiadaviek produktu. Pred začatím vývoja softvéru je potrebné vykonať úpravy na doposiaľ neusporiadaných a neúplných požiadaviek z časti plánovania. Predchádza sa tak možným chybám pri vývoji produktov. Odborný výsledný dokument tejto fázy sa nazýva úplný katalóg požiadaviek, ktorý obsahuje podľa systematizácie a klasifikácie zoradené požiadavky, ktoré musia byť navrhnuté a zrealizované počas životného cyklu projektu. Tieto požiadavky je potrebné odsúhlasiť zákazníkmi a analytikmi trhu.
Vývoj a implementácia produktu
Pomocou výsledkov analýzy a definícii požiadaviek sa prechádza k podkladom pre programovanie a začne sa samotný vývoj produktu. Vzniká návrh implementačného modelu, ktorý obsahuje návrh vhodnej fyzickej reprezentácie dát a algoritmov pre implementáciu požadovaných funkcií. Definujú sa rozhrania, komunikácie a vzájomné pôsobenia komponentov. Pri procese sa dodržiavajú pokyny a požiadavky získané od zákazníkov. Implementačný model sa následne aplikuje pri vytváraní programu. Zvolí sa vhodný programovací jazyk a dodržia sa všetky pravidlá daného jazyka pre bezchybné fungovanie výsledného produktu. Pri implementácii je vhodné používať zmysluplné názvy pre procedúry a premenné, komentovanie prípadne opísanie informácií v hlavičke programu.
Testovanie a určenie kvality softvéru
Po vývoji softvéru môžu vzniknúť chyby, ktoré ostanú bez povšimnutia. Preto je potrebné produkt pred nasadením dôkladne otestovať a preveriť všetky jeho funkcie, či pracujú presne podľa požiadaviek. Softvér musí vykonávať všetky požadované úlohy ktoré zadefinoval používateľ. Testy sú vykonávané prevažne softvérovými inžiniermi priamo po implementácii, prípadne nezávislými externými skupinami ľudí, ktorý skúšajú všetky funkcie a moduly vytvoreného produktu. Prípadne novodobé možnosti ponúkajú automatizované testovanie softvérov pomocou programov vytvorené za účelom testovania jednotlivých častí softvéru. Všetky zistené nedostatky sú nahlásené a následne vývojármi opravené v čo najkratšom časovom intervale. Po odstránení chýb sa produkt vráti k fáze testovania a tento proces sa vykoná do doby, kým sa nedocieli jeho žiadaná kvalita. Kvalita je schopnosť množiny všetkých charakteristík produktu, systému alebo procesu spĺňať všetky požiadavky zákazníkov a ďalších zainteresovaných strán.
Nasadenie a údržba softvéru
V prípade dosiahnutia požadovanej kvality a spoľahlivosti vyvíjaného produktu, je pripravený na odovzdanie zákazníkovi. Nasadenie softvéru sa môže vykonať po častiach alebo ako celok. Často je produkt najskôr prípustný pre limitovaný počet reálnych používateľov, ktorí produkt preveria pred finálnym vypustením na trh. Na základe spätnej väzby sa môže softvér doplniť navrhnutými vylepšeniami alebo v prípade spokojnosti používateľov sa oficiálne vypustiť na trh. Po odovzdaní je potrebné vykonávať neustálu údržbu výrobku pre jeho zdokonaľovanie. Pod údržbou sa rozumie dodatočné opravy chýb, zlepšovanie výkonu a používateľského rozhrania či prispôsobenie výrobku v prípade príchodu nových noriem a iným zmenám prostredia. Údržba predstavuje záverečnú časť v životnom cykle vývoja programovaného produktu.
Modely vývoja softvéru
Model životného cyklu vývoja softvéru (ďalej len model vývoja softvéru) je schéma definujúca procesy/činnosti, ktoré treba vykonať počas životného cyklu vývoja softvéru, ich vstupy a výstupy a časovú následnosť. Model vývoja softvéru neurčuje dĺžku trvania činností. Modely vývoja softvéru môžeme rozdeliť na sekvenčné (označované aj ako lineárne) a iteratívno-inkrementálne. Pri sekvenčných modeloch sú jednotlivé etapy životného cyklu softvéru usporiadané sekvenčne, za sebou – jedna začína vždy potom, keď skončí predošlá. Pri inkrementálnych modeloch je softvér vyvíjaný v menších cykloch, výstupom ktorých sú softvérové inkrementy – prírastky softvéru. Hranica medzi oboma typmi modelov nie je striktná a v praxi sú často zaužívané modely, ktoré obsahujú črty oboch typov.
Kaskádový model
Kaskádový model (nazývaný aj vodopádový model) je priraďovaný ku sekvenčným modelom. Práve tento model považujeme za referenčný a bol uvedený ako historicky prvý prístup používaný v softvérovom inžinierstve. Je na pochopenie najjednoduchší pretože základné fázy vývoja produktu sú jasne oddelené a zoradené sekvenčne za sebou. Každá fáza musí byť dokončená pred začatím ďalšej a taktiež sa fázy neprekrývajú a neprebiehajú súbežne. Každý vyvíjaný softvér je rozdielny a vyžaduje jedinečný prístup. Kaskádový model sa využíva v prípadoch kedy sú požiadavky stále a dôkladne zdokumentované.
Obr. 1.1 zobrazuje priebeh vývoja softvéru pri výbere kaskádového modelu. Jednotlivé kroky sa vykonajú postupne, vždy po dokončení predošlého.
V-model
V-model je rozšírenie kaskádového (vodopádového) modelu. Je verifikačno-validačného charakteru, podľa čoho vznikol aj názov V-model. Jednotlivé etapy vývoja sú zoradené v tvare písmena V. Na ľavej strane sa z pravidla nachádza fáza vývoja, ktoré sa vykonávajú sekvenčne, teda ten ďalší sa začne až po skončení prvého. Na pravej strane je pridelená každej fáze vývoja príslušná fáza testovania, ktorej výstupy sú v nej testované. Dôležitý je návrh samotných testov, ktorý sa vytvára vo fáze vývoja.
Priebeh vývoja a testovania pomocou V-modelu zobrazuje Obr. 1.2.
Iteratívny model
Iteratívny model využíva rozdelenie na jednotlivé etapy vývoja softvéru, ktoré sa postupne vylepšujú. Opakujú sa cyklicky, čím sa vytvárajú nové verzie pričom sa zväčšuje úplnosť až do vzniknutia kompletného systému, ktorý je potom pripravený na odovzdanie. Takýto druh modelu je vhodné použiť ak sú dobre známi požiadavky na produkt. Vývoj začína špecifikáciou a implementáciou len časti požiadaviek, ktoré sú potom preskúmané a postupne sa zistia ďalšie požiadavky. Na Obr. 1.3 je vytvorený príklad vývoja podľa tohto modelu. Tento proces je výhodný, keď je vytváraný veľký softvérový produkt. Je výhodný, keďže sa priebežne vytvárajú zjednodušené verzie produktu. Tie si vie zákazník počas procesu vývoja vyskúšať a poskytne spätnú väzbu vývojárom. Je väčší potenciál odhalenia chýb, bez ovplyvnenia už hotových častí.
Inkrementálny model
Inkrementálny model rozdeľuje proces vývoja na etapy vo forme malých prírastkov (inkrementov). Prírastky sú menšie časti softvéru, ktoré sú tým pádom ľahšie manažovatelné. Každá etapa vývoja je na báze vodopádového modelu avšak koniec prírastku sa pripojí na začiatok ďalšej. Obr. 1.4 opisuje ako postupným spájaním plne dokončených prírastkov sa vytvára kompletný softvér. Tento model je vhodný použiť ak sú známe a dobre zadefinované požiadavky na systém. Inkrementálny model znižuje riziko neúspechu projektu keďže jednotlivé etapy vývoja môžu byť priebežne odskúšané a je overená ich funkčnosť zákazníkom. Model takéhoto druhu je najvhodnejšie využívať pri projektoch, ktoré je potrebné dostať na trh čo najskôr, taktiež ak sa pracuje s novou a menej známou technológiou a v prípade ak nie sú na začiatku vývoja dostupné zdroje na tvorbu všetkých častí systému.
Špirálový model
Špirálový model vývoja je založený na iteratívnom prístupe. Rozdiel oproti iných modelov je v tom, že zavádza prvky manažmentu. Podobne ako iteratívny model, aj tento model redukuje výskyt škodlivých udalostí. Je vhodný najmä pre veľké projekty a vývoj na základe tohto modelu je relatívne drahý, keďže analýza rizík častokrát vyžaduje experta.
Návrh špirálového modelu sa delí na štyri časti:
- Identifikácia požiadaviek a cieľov - zhromažďujú sa obchodné a systémové požiadavky.
- Analýza rizík - zahŕňa identifikáciu a monitorovanie technickej realizovateľnosti a tiež možných rizík ako je sklz harmonogramu a prekročenie nákladov.
- Vývoj a overenie - vytvára sa návrh a realizuje vývoj modulov.
- Vyhodnotenie a plánovanie - vyhodnotenie správnosti aktuálnej a plánovanie nasledujúcej fázy.
Charakteristická črta špirálového modelu je tiež zahrnutie explicitných míľnikov pre vyhodnotenie aktuálneho stavu projektu všetkými účastníkmi (z pohľadu manažmentu), ktoré sú umiestnené vždy na konci jedného cyklu špirály.
Jednotlivé kroky vývoja pomocou Špirálového modelu sú zobrazené na Obr. 1.5. Určí sa začiatok a koniec cyklu a taktiež míľniky, podľa ktorých postupne vzniká hotový produkt.
Prototypovanie
Prototyping vytvára prvotné verzie (prototypy) pre určité oblasti vývoja softvéru. Tento model sa často používa ako doplnenie vodopádového modelu. Pomocou takéhoto modelu sa odstránia neistoty a overí sa fungovanie kľúčových princípov. Prototyp nemusí byť nutne časť vykonateľného programu, je to taká reprezentácia vlastností softvéru, ktorá umožňuje posúdiť uvedené vlastnosti. Dovoľuje tak lepšie pochopiť požiadavky používateľa, ktorý má lepší prehľad o vývoji.