Automatizace Procesu Vývoje Na Platformě Xamarin
Total Page:16
File Type:pdf, Size:1020Kb
Masarykova univerzita Fakulta informatiky Automatizace procesu vývoje na platformě Xamarin Diplomová práce Bc. Tomáš Šmíd Brno, jaro 2019 Prohlášení Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj. Bc. Tomáš Šmíd Vedoucí práce: doc. Ing. RNDr. Barbora Bühnová, Ph.D. i Poděkování Rád bych poděkoval doc. Ing. RNDr. Barboře Bühnové, Ph.D. za velmi vstřícné a odborné vedení a za poskytnutí velmi cenných rad a připomínek především při psaní textové části práce. Rád bych také poděkoval Ing. Martinu Vídeňskému co by odbornému konzultantovi za cenné rady a připomínky při realizaci praktické části. Nakonec bych rád poděkoval společnosti A-WebSys spol. s r.o. za velmi vstřícný a otevřený přístup při řešení jakéhokoliv problému spojeného s vy- pracováním této diplomové práce. ii Shrnutí Cílem této práce je automatizovat procesy mobilního vývoje na plat- formě Xamarin, a to zejména s důrazem na oblasti verzování, kontroly kvality a testování zdrojového kódu ve firmě A-WebSys spol. s r.o. V první části práce jsou představeny termíny spojeny s automatizací procesů a platformou Xamarin. Ve druhé části práce je popsána ana- lýza vývojových procesů a všech dalších oblastí potřebných k pocho- pení problematiky a následnému vytvoření návrhu řešení, které je také součástí této části. V závěrečné třetí části práce je představena implementace praktického řešení společně s vyhodnocením, do jaké míry se ho podařilo ve firmě integrovat a jaký je jeho přínos. iii Klíčová slova Xamarin, automatizace, CI, CD, DevOps, procesy, Git, GitLab, GitLab CI/CD, GitLab runner, yaml, mobilní vývoj iv Obsah 1 Úvod 1 2 Procesy a automatizace 3 2.1 DevOps ............................4 2.1.1 Průběžná integrace . .5 2.1.2 Průběžné doručení, průběžné nasazení . .5 3 Platforma Xamarin 7 3.1 Mvvm, MvvmCross .....................7 4 Analýza 9 4.1 Aktuálně nastavené procesy mobilního vývoje ve firmě ...9 4.1.1 Klíčové ukazatele výkonnosti procesů . 12 4.1.2 Vyhodnocení výkonnosti procesů . 13 4.2 Verzování kódu ........................ 14 4.2.1 Git vs. Subversion . 14 4.2.2 Strategie použití nástroje Git . 15 4.3 GitLab CI/CD ......................... 20 4.3.1 Základní komponenty . 21 4.3.2 Požadavky a omezení nástroje . 25 4.3.3 Požadavky a omezení na realizaci . 25 4.4 Kontrola kvality kódu ..................... 26 4.4.1 StyleCop Analyzers . 27 4.5 Sestavení a jednotkové testy .................. 28 4.6 Distribuce aplikace ...................... 29 4.6.1 Tvorba APK a IPA balíčků . 30 4.6.2 Distribuce k živým testerům . 31 4.6.3 Distribuce do produkčního prostředí . 33 4.7 Sběr dat od klientů ...................... 34 4.8 Návrh řešení .......................... 35 4.8.1 Distribuce aplikace . 38 5 Implementace 40 5.1 Nastavená pravidla pro kontrolu kvality kódu ........ 40 5.2 Skriptovací soubory ...................... 41 5.3 Nastavení GitLab CI/CD ................... 49 v 5.3.1 GitLab runner . 49 5.3.2 YAML soubor . 50 5.4 Překážky k vyřešení ...................... 57 5.4.1 Konfigurace nástroje GitLab runner . 57 5.4.2 Práce s NuGet balíčky . 58 6 Vyhodnocení 62 6.1 Dosažené výsledky ...................... 62 6.2 Srovnání s původním stavem ................. 64 7 Závěr 66 Bibliografie 67 A Přílohy 78 A.1 Verzování ........................... 78 A.2 Kontrola kvality kódu ..................... 79 A.3 Skriptovací soubory ...................... 87 A.3.1 Vstupní parametry . 87 A.3.2 Ukázky kódů . 90 A.4 Konfigurace .......................... 94 A.4.1 YAML soubor . 94 A.5 Řešení zásadních překážek .................. 97 A.5.1 Vzájemná kompatibilita .NET platforem . 97 A.5.2 Převedení formátu Packages.config na Package- Reference . 98 A.5.3 Přesun metadat do souboru .csproj . 100 A.5.4 Používání přípon u názvů NuGet balíčků . 101 A.5.5 Funkce IncludeReferencedProjects u programu dotnet . 102 A.5.6 Nastavení umístění NuGet balíčků . 104 vi 1 Úvod Přesně definované procesy jsou základem správně nastaveného vývo- jového prostředí. K dosažení větší efektivity tohoto prostředí se dnes v maximální možné míře využívá automatizace. Té lze dosáhnout vhodně zvolenými podpůrnými nástroji, které doplňují definované procesy. Nicméně, nasazení a použití těchto ná- strojů k provádění specifikovaných úkolů samo o sobě často nestačí k dosažení zlepšení procesů. Při zavádění automatizace je potřeba také změnit celkovou kulturu organizace. Proces je tvořen několika různými složkami, které se podílejí na dosažení požadovaného výstupu. Proto je potřeba zajistit, aby spo- lupráce mezi jednotlivými složkami byla co nejhladší (viz kapitola 2). A-WebSys spol. s r.o. [62] (dále jen A-WebSys) je společnost, která se ve své dlouholeté historii specializovala především na vývoj inter- netových aplikací v oblasti finančního sektoru. Za sebou má celou řadu úspěšných projektů, a tak se v roce 2017 rozhodla v této oblasti rozšířit svou působnost a zařadit do svého portfolia vývoj mobilních a desktopových aplikací. Pro multiplatformní vývoj musela firma A-WebSys zvolit mnoho nových technologii. Především však pro vývoj zvolila platformu Xama- rin (viz kapitola 3), která umožňuje kód psát v jednom jazyce, kterým je C#, a ten sdílet a použít pro více cílových platforem. A i když při vývoji internetových aplikací kód verzuje pomocí nástroje Subversion, zde se rozhodla přejít k systému Git (viz podsekce 4.2.1). Nakonec pro vývoj na platformě Xamarin vznikl zcela nový tým. Do začátku se firma rozhodla nastavit procesy vývoje především dle zkušeností a postupů používaných při vývoji webových aplikací, protože oblast mobilního vývoje pro ní byla zcela nová a neměla v ní žádné zkušenosti. Současně díky nově používaným technologiím a novým lidem tak zůstává prostor ke zlepšení těchto procesů. Cílem této diplomové práce je seznámit se s procesy vývoje pro mobilní platformy ve společnosti A-WebSys postavené na platformě Xamarin, a to zejména s důrazem na oblasti verzování, kontroly kvality a testování zdrojového kódu, a zjistit, v čem by bylo možné používané procesy zefektivnit. Pro tento účel je vyhrazena celá kapitola 4, která 1 1. Úvod čtenáře seznámí s aktuálně nastavenými procesy ve firmě a detailně rozebírá jednotlivé důležité části vývojových procesů ať už z pohledu postupů či z pohledu nástrojů, které se buď používají ve firmě, anebo bude nutné je použít za účelem jejich zefektivnění. Důraz je především kladen na použití nástrojů, které jsou volně dostupné. Dalším požadavkem na tuto práci je navrhnout možné řešení na základě informací získaných po seznámení se všemi důležitými body vývojových procesů ve firmě, které zajistí zefektivnění těchto procesů. Návrh řešení se nachází v sekci 4.8. Posledním z požadavků na tuto práci je navržené řešení realizovat, nasadit ve firmě a vyhodnotit, zda se pomocí implementovaného řešení podařilo procesy zlepšit. Popis reálného řešení včetně popisu klíčových překážek, které bylo nutné vyřešit při implementaci, se nachází v kapitole 5. V kapitole 6 je popsáno, do jaké míry se imple- mentované řešení podařilo ve firmě úspěšně nasadit. Popsán je zde také samotný přínos práce. 2 2 Procesy a automatizace Proces představuje základní kámen žívotního cyklu vývoje software. Definuje co, jak a kdy má být provedeno při vývoji. Staví nazku- šenostech a ověřených činnostech. Součástí procesu jsou role lidí, aktivity, techniky a nástroje, které jsou společně využity k dosažení požadovaných výstupů [51]. Typickými procesy při vývoji software jsou plánování, analýza po- žadavků, návrh, implementace, stabilizace a testování kódu, nasazení do produkčního prostředí a údržba. Jednotlivé pořadí, význam a další vlastnosti těchto procesů určuje konkrétní strategie či model životního cyklu vývoje projektu [52]. Procesy se mohou po nějakém čase stát nevhodnými. Důvodem mohou být například změny strategických cílů organizace či jejich výkonnostní aspekty, které mají finanční dopad. V takovém případě je potřeba procesy upravit a zefektivnit. Před tím, než je možné začít s jejich optimalizací, je potřeba se s nimi důkladně seznámit a popsat jejich současný stav. Na základě zjištěných údajů lze rozhodnout, co je potřeba v pro- cesech zlepšit a dojít k volbě vhodné techniky, která by měla pomoci procesy zefektivnit. Pokud je problém v lidské činnosti, pak je možným řešením napří- klad reorganizace zaměstnanců zapojených do daných procesů, anebo zpřesnění definic jednotlivých rolí. Jako slabý článek procesu se může projevit nepřesné či chybějící definice aktivit, které mají být prováděny. To může vést k zbyteč- nému množství rozhodování a nerovnoměrnému zatížení technických či lidských zdrojů. To vše může vést k snížení výkonnosti procesu a zpomalení celého vývoje. Řešením pro tento problém je zavedení automatizace procesu. Cílem automatizace procesů je urychlit a usnadnit práci rychlým a opakovatelným prováděním konkrétních úkolů a aktivit. Tím se také snižují náklady potřebné k vytvoření požadovaných výstupů a celkově snižuje chybovost. Aby bylo možné procesy efektivně automatizovat, je potřeba kromě vhodně zvolených nástrojů, které konkrétní úkoly budou provádět, zpřesnit jejich celkovou definici, tj. specifikovat jednotlivé role aod- 3 2. Procesy a automatizace povědnosti, aktivity a jejich vlastnosti a využití technik a nástrojů. Především však musí být přesně určeny výstupy těchto procesů. Konceptem, který napomáhá zefektivnění procesů v organizaci, a to včetně využití jejich automatizace, je DevOps