Vývoj software
Vývoj softwaru je proces koncipování, popisu, specifikace, návrhu, programování, dokumentace, testování a oprav chyb používaný při vytváření a údržbě aplikací, frameworků a jiných softwarových komponent.
Základní činnosti vývoje software
Sběr požadavků a analýza
Proč software tvoříme, co má být cílem projektu, čeho chceme dosáhnout, co to má způsobit. Sbírání požadavků a návrh jak to vyřešit.
Zúčastnění: analytik, Product Owner (Scrum) – pokud se vyvíjí agilním způsobem, odborníci (programátoři dle potřeby), zástupci uživatelů (klíčové osoby, na které se často zapomíná)
Jak na to: interview (rozhovory se zadavatelem i uživatelem), průzkumy (hlavně tam, kde k uživatelům nemáte přístup – služby v terénu, nad větším vzorkem lidí), prototypy (dobře udělaný obrázek, jak by mohl projekt vypadat, první hrubý návrh např. v PowerPointu – slouží k ověření, zda máme v návrhu vše a nic naopak nepřebývá)
Specifikace = výsledný dokument se zadáním, srozumitelný pro všechny; obsahuje souhrn požadavků (tak jak je uživatelé řekli, ideálně citace), use case (popis toho, jak to bude uživatel používat, jak bude daná věc realně využita, konkrétní příklady), user stories (strukturovaný popis toho, co uživatel potřebuje, aby se stalo; jako někdo potřebuji něco, abych dosáhl něčeho; součástí agilního vývoje)
Návrh (architektura)
Způsob řešení, jak to má uvnitř vypadat. Vytvoří se obrázky a návrhy, jak by mohlo vše vypadat. Nejde jen o vzhled.
Vrstvená architektura v IT nám pomůže s komplexitou – rozpad na vrstvy (části software):
- Prezentační vrstva, UI = Front-End – komunikuje s uživatelem
- Zadní vrstva = Back-End – aplikační logika – srdce aplikace, nabízí služby
- Datová vrstva = Databáze – bezpečně uloží data a umonží dotazování
Výhodou vrstvení je více front-endů s jedním back-endem. Nemusíme programovat všechno separátně pro mobilní, webové, desktopové nebo CLI (command line interface, zobrazení příkazové řádky) zobrazení.
Databáze
Součástí návrhu je také databáze, která obsahuje všechny záznamy a informace o webu či projektu. Z databáze dostaneme záznamy pomocí jazyka SQL (Structured Query Language) = standardizovaný strukturovaný dotazovací jazyk, který je používán pro práci s daty v databázích. Práci s obrovským množstvím dat se zabývá oblast big data.
Distribuovaný systém nabízí sdílení dat na externím úložišti. Jedná se o bezpečnou, výkonnou a dostupnou formu ukládání dat a informací. Smyslem distribuovaného systému je spolupráce všech jeho komponentů k dosažení nějakého společného cíle, případně koordinovat používání sdílených zdrojů mezi jednotlivými uživateli a poskytovat jim podporu v podobě komunikačního nástroje. Příkladem je firma Google.
Formou distribuovaného systému je cloud. Definice cloudu nemusí být úplně jasná, ale v zásadě je to termín, který se používá pro popis globální sítě serverů, z nichž každý má svoji funkci. Cloud není fyzický objekt, ale rozsáhlá síť vzájemně propojených vzdálených serverů po celém světě, které fungují jako jeden ekosystém. Tyto servery jsou navržené buď k ukládání a správě dat, spouštění aplikací, nebo doručování obsahu a služeb, jako je streamování videí, webová pošta, kancelářský software nebo sociální média. Místo přistupování k souborům a aplikacím z místního nebo osobního počítače k nim přistupujete online z jakéhokoli zařízení s podporou internetu – informace tak budou dostupné kdekoli a kdykoli je budete potřebovat. Příkladem je Amazon, Microsoft Azure, Google Workspace, Dropbox.
Opakem je pokud nedistribuovaný systém na jednom počítači. Využívá se pro svoji jednoduchost, kdy systém není závislý na připojení a nepotřebuje nic z výhod distribuovaného systému. Příklady jsou střih videa, úprava fotek, psaní dokumentů nebo hry.
UX = User Experience
Nová disciplína s cílem maximalizovat dobrou uživatelskou zkušenost s používáním vyvíjeného softwaru. Používají se uživatelské průzkumy a interview, ale i interakční a vizuální návrhy, které ukazují, jak se bude aplikace pravděpodobně chovat. Z daných návrhů se následně vybere ten, který byl nejužitečnější a nejrelevantnější.
Pro náhled nového řešení se používá wireframe, jež definuje rozmístění funkčních prvků na stránce. Nejedná se v žádném případě o grafický návrh, neobsahuje obrázky a je tvořen pouze pomocí čar a textu. Jedná se o první nástřel, který má zamezit tomu, aby se pracovalo na něčem, co je úplně mimo představu klienta nebo vaší. Je primárně statický, a to proto, aby byl co nejjednodušší na případné větší zásahy a opravy.
Klikatelné prototypy jsou přesnější návrhy než wireframe a propracovanější návrhy, které mají v sobě už zapracované grafické prvky a texty. Jedná se o poslední náhled finálního produktu před kodováním a programováním. Slouží pro uživatelské testování a připomínky klienta, zda je web intuitivní a srozumitelný pro uživatele.
Vizuální návrh nebo-li mockup je čistě prezentační obrázek/video s náhledem finálního produktu. Slouží k navození emocí a ukázky produktu v různých situacích (například u loga).
K otestování použitelnosti se využívá uživatelské testování, které je klíčem k funkční aplikaci a srozumitelnému webu. Jedná se o jednu z nejdůležitějších a nejčastěji používaných metod při testování použitelnosti v rámci vývoje počítačových aplikací. Uživatelské testování tak může určovat správný směr při vývoji samotné aplikace a předcházet tak vznikajícím problémům.
K porovnání dvou různých variant se využívá A/B testování. Průběh metody A/B testování spočívá ve vytvoření několika testovacích variant, z nichž vždy původní varianta A (někdy označována jako šampion) je zobrazena jedné polovině uživatelů, a nová varianta B (někdy označována jako vyzyvatel) je zobrazena polovině druhé. Jedná se o klasickou marketingovou metodu, jež má za cíl zvýšit konverze či konverzní poměry projektu prostřednictvím změny jednoho funkčního či designového prvku.
Implementace (programování)
Část vývoje, kdy se programuje. Používají se programovací jazyky nebo kusy již hotového software, které se propojí. Lidem, kteří programují se říká různě – programátor, vývojář, software inženýř nebo kodér (označení spíše pro juniory).
Kterým jazykem začít?
- Chcete dělat web stránky? HTML & CSS – struktura a vizuální podoba webové stránky
- Chcete je rozhýbat? JavaScript – jednoduchý jazyk, jež umožní web aplikacím chovat se interaktivněji; pro použití jednotlivých částí struktury webu
- Chcete přidat backend a mít univerzální jazyk? Python – univerzální jazyk pro back-endová řešení, datové analýzy a automatizované testování
- Chcete psát velké aplikace? Java, C# – pro front-end i back-end, pro webové aplikace
- Nechcete C/C++, jedná se o velmi složité jazyky, především pro vývojáře hardwaru
Framework je způsob práce spojený s nějakým programovacím jazykem nebo prostředím, ve kterém se programuje. Ustálené pracovní prostředí, ve kterém se vyvíjí projekty. Upravené způsoby, jak pracovat s programovacím jazykem. Zajednodušení, jak se daným jazykem pracovat.
Známé frameworky:
- JavaScrypt – React, Angular, Node.js, npm
- HTML/CSS – Bootstrap
- Python – Django, Pandas, NumPy, SciPy, TensorFlow
Programátoři využívají:
- IDE = Integrated Development Environment – Vývojové prostředí usnadňující práci programátorů, většinou zaměřené na jeden konkrétní programovací jazyk. Obsahuje editor zdrojového kódu, kompilátor, případně interpret a většinou také debugger. Např. Microsoft Visual Studio.
- Verzovací systémy slouží k uchovávání historie veškerých změn provedených v informacích nebo datech. Nejčastěji se používá pro sledování změn ve zdrojových kódech softwaru během jeho vývoje, ale verzovat lze všechny počítačové soubory, a v případě potřeby se verzují i primární data. Např. Git (webová verze GitHub). – comit, push, merge
- Prostředí vývojové (kde se pořád programuje, pouze pro vývojáře, bez ostrých dat), testovací (kam se přesunou vše, co je hotové a je na čase umožnit testerům vše zkontrolovat, nachází se zde již ostrá data, ale testeři nemohou data upravovat) a produkční (kde jsou reální uživatelé, napojuje se na živá a ostrá data uživatelů, nesmí dojít již k pochybení, vše funguje, jak jsme chtěli, o tuto část se starají lidé z provozu)
Testování (QA = Quality Assurance/Assistance)
Ověření, že je program správně a funkčně navržen. Úkolem testování je zařídit, aby software dělal to co má, to je úkol pro testery; testeři mají za úkol vmínat celý kontext, vidět, když se něco upraví v jedné části programu, nezmění se něco v jiné části programu; testovat nové části programu a zároveň udržovat integritu celého projektu.
Programátoři si testují vlastní kód (unit testy, integrační testy) a testeři proklikávají aplikaci. Provádí se také specializované testy (výkonnostní, bezpečnostní), unit testy nebo integrační testy.
Při manuálním testování často používá testovací scénář (test case), kde je popsáno, jak má test proběhnout a jak má vypadat úspěšný výsledek, stejně jako jaké chyby má tester nasimulovat. Test driven development nebo-li programování řízené testy je přístup k vývoji software, který je založen na malých, stále se opakujících krocích, vedoucích ke zefektivnění celého vývoje. Když se najde chyba, říká se jí bug.
Nikdo nechce proklikávat stejnou aplikaci stále dokola, proto se často využívá automatizace, kde se testování již blíží programování. Oblíbenými programy jsou JIRA nebo Selnium.
Provoz a údržba (Operations)
Když vše projde testy, nasadí se do provozu a následně probíhá údržba. Oprava chyb. Dodatečné úpravy dle přání zákazníka. Zákazníci musí být spokojení!
Místo, kde se často začne na softwaru vydělávat. Samotný vývoj bývá často náročnější než bylo odhadnuto v analýze, proto je důležité udržovat dlouhodobé vztahy se zákazníky.
Nasazení (deployment) do produkce. Nahrání hotového softwaru do prostředí, kde ho chceme používat.
DevOps = Development & Operations – vývojáři počítají s tím, že jejich software někdo bude provozovat. Jedná se o programátory „opraváře“ = rozumí napsanému softwaru a jsou schopni jej zaimplementovat do již stávajícího kódu. Nejsou vidět, ale díky nim služby běží 24/7 bez komplikací.
Při provozu aplikací se nabízejí různé úrovně podpory:
- Level 1 – infolinka, kam lidé zavolají a pouze se zapíše problém
- Level 2 – zaměřuje se na vyřešení problémů
- Level 3 – vývojáři, kteří aplikaci naprogramovali, ale podpora na druhé úrovni si s problémem neví rady
Helpdesk je místo, odkud někdo pomůže. Nejčastěji používanými helpdesky jsou JIRA nebo ZenDesk, které sbírají jednotlivé problémy či dotazy od uživatelů, včetně detailních informací o délce trvání zpracování dotazu či míře spokojenosti s odpovědí.
Monitoring – činnost, kdy se sleduje, jak to funguje. Grafy, ukazatele aplikace. Kontrola, zda všechno funguje jak má.
SLA = Service-Level Agreement – dohoda mezi poskytovatelem a příjemcem služby.
Change management – management změn dává pravidla o prioritách jak inovovat software.
Řízení IT projektů
Aby vše mohlo běžet tak jak má, musí projekt někdo řídit (projektový manager).
Tradiční způsob
Vodopádový model je přístup k vývoji nebo k řízení projektu, který předpokládá předem jasně daný plán projektu. Jedná se o sekvenční vývojový proces, ve kterém je vývoj nahlížen jako neustále se svažující tok (jako když teče vodopád) fázemi analýzy požadavků, návrhu, implementace, testování (validace), integrace a údržby.
Zejména pak plánování procesu testování až téměř na konec celého modelu, neumožňuje v dnešní době vodopádový model využít v praxi. Dnes se tento model využívá především k výukovým účelům.
Agilní vývoj – Protypování
V opozici vůči vodopádovému modelu stojí agilní metodiky. Umožňují rychlý vývoj softwaru a zároveň dokáží reagovat na změnu požadavků v průběhu vývojového cyklu. Podle těchto metodik se správnost systému ověří jedině pomocí rychlého vývoje, předložení zákazníkovi a následných úprav dle zpětné vazby. Agilní přístup není omezen pouze na programování, ale našel své uplatnění také v Business Intelligence a v marketingovém plánování.
Hypotéza – vývoj – rozhodnutí – ověření = sprint, cyklus vývoje. Velmi rychle se dozvíte, zda realizace vašeho projektu je reálná a poptávaná. Realizovat špatný nápad je strašně drahé. Čím dříve přijdeme na to, že je něco špatně, tím lépe. To je součást agile vývoje.
MVP = minimal viable product – výsledek práce, který je nejmenší možný použitelný.
Scrum
V souvislosti s agilním vývojem se často používá technika, pracovní framework scrum, iterativní a inkrementální způsob řízení vývoje softwaru. Definuje flexibilní strategii produktového vývoje. Klíčové na scrumu je poznání, že během projektu mohou zákazníci změnit názor na to, co chtějí a potřebují (často zvané „souhrn požadavků“) a že nové nepředvídané úkoly nelze řešit jen lepším předvídáním a plánováním.
Projektové vedení
Projektové vedení pomáhá vývojářům se soustředit na projekt a jeho hlavní cíle/úkoly, zasahují do obsahu projektu:
- Projektový manager má na starost nastavení pravidel hry, plánování a koordinaci, rozsah, rizika a komunikaci.
- Srum master není projektový manager, drží se stranou od obsahu, má za úkol pracovat na tom, aby členové týmu mezi sebou spolupracovali a komunikovali a maximálně těžili z toho, že jsou tým.
Mezi nejznámější projekťácké nástroje patří MS Project, pro přidělování úkolů pak JIRA, Asana či Trello, MS Excell nebo pro sdílení dokumentů Google Drive, Confluence ši SharePoint.
Bezpečnost
Autentizace je proces ověření proklamované identity subjektu. Po dokončení autentizace obvykle následuje autorizace, což je souhlas, schválení, umožnění přístupu či provedení konkrétní operace daným subjektem. Autenticita je pak vlastnost subjektu, jejíž přítomnost se procesem autentizace ověřuje.
Certifikáty prokazují identitu stránek, které v komunikaci s počítači uživatelů využívají nějakého šifrovacího mechanismu. Typickým příkladem takových stránek je třeba internetové bankovnictví.
Certifikáty se používají pro šifrování, jež slouží k ochraně dat proti nežádoucímu zjištění cizí osobou a uplatňuje se při ukládání dat i při jejich přenosu včetně telekomunikace. Jedná se o proces, kterým se nezabezpečená elektronická data převádí za pomoci kryptografie na data šifrovaná, čitelná pouze pro majitele dešifrovacího klíče. Šifrování soukromých elektronických informací by mělo být nutností zpravidla na firemních telefonech a tabletech.
Slovníček pojmů
- CMS = content management system – software pro redakční práci s webem (s uživatelským rozhraním), např. WordPress
- E-Commerce – elektronický obchod, e-shopy
- ERP = enterprise resource planning – ve větších firmách, velké účetnictví (zásoby, lidi, finance), programátoři upravují na potřeby firmy, např. SAP
- CRM = customer relationship management – pro řízení vztahů se zákazníky, s databází a údaji o zákaznících; odvětví/firmy, které vyrábí daný software
- BI = business inteligence – zkoumání dat a analýzy, BI systémy sbírání a formátují data, nad tím vším je potřeba vytvářet hledání řešení/odpovědí = programování, automatizace, např. PowerBi, MoneyS4, Tableau
- AI = artificial intelligence = umělá inteligence – stroje pracují za lidi
- Machine learning – strojové učení, práce se statistikou, učení na základě nějakého chování nebo pravidelných činností
- IoT = Internet of things = internet věcí – rozvíjející se obor, chytrá domácnost, používá se hodně k měření (teplot, koncentrací oxidu uhličitého atd.) a sbírání dat, např. využití pro automobily (mikrofony v autě, sbírají se zvuky a data z fungování vozu i jeho servisu, diagnostiky a odhady, kdy dojde k poruše), kotelny (jak se pracuje s teplou vodou – strategie pro efektivní využití energií pro vytápění)
- Infrastruktura – všechny routery, switche a části, na kterých běží datové přenosy; programování bezpečnostních aplikací či směrování dat
- API = rozhraní na back-endu, ke kterému se rozhraní na front-endu připojují a ptají se na informace
- Big data – práce s obrovským množstvím dat – celá vědní disciplína, jak pracovat s enormním množstvím dat. Používáno hodně v dopravě a logistice.
- Open-souce – práce s otevřeným zdrojovým kódem. Kód je plně k dispozici bez nároku na odměnu. Např. Linux.