Popište **smysl pyramidy vitality** a význam jejích **jednotlivých pater** (základní obrázek budete mít k dispozici) - popisuje budování firmy a její úspešné fungování 1. **dynamika** - řízení změn a ovlivňování vývoje, vztahů 2. **stabilita** - vyrovnávání se se změnami a potížemi 3. **efektivita** - nízké náklady, pořádek v procesech, ... 4. **užitečnost** - máme co nabídnout, víme komu a proč Popište smysl **Maslowovy pyramidy potřeb** a význam jejích **jednotlivých pater** (základní obrázek budete mít k dispozici) - popisuje univerzální lidské potřeby 1. **smysl** - seberealizace, osobní rozvoj, užitečnost pro jiné 2. **výlučnost** - uznání ostatními, potřeba někam patřit a vynikat 3. **příslušnost** - možnost počítat s tím, že někam patřím (rodina, škola, přátelé) 4. **bezpečí** - zajištění základních potřeb na přežití do budoucna 5. **přežití** - pokytí základních potřeb - metabolismus, reprodukce Popište a vysvětlete základní schéma zajišťování **užitečnosti**: **Subjekty ‐> Potřeby ‐> Produkty** - **subjekty** - komu budeme užiteční? (majitelé, zákazníci, zaměstnanci) - **potřeby** - důležité je subjektivní vnímání vlastních potřeb - většina potřeb univerzální - **produkty** - jejich definice je v IT důležitá - dělení - pro majitele: prestiž, image - pro zákazníky: výrobky, služby - pro zaměstnance: mzdy, benefity Popište a vysvětlete základní schéma zajišťování **efektivity**: **Procesy-> Zdroje-> Struktury** - **procesy** - opakovaně probíhající transformace vstupu na výstup - i malé zlepšení se významně projeví - **zdroje** - pro zajištění procesů, nespotřebávají se - dělení: - **tvrdé** - materiál, energie, informační systém - **lidské** - vlastnosti, schopnosti a postoje lidí - **specifické** - systém firemních myšlenek - **struktury** - odvozeny od procesů ve firmě - odpovědnost za běh procesů a kvalitu zdrojů - organizační struktura firmy (vedení, řízení, výkon) Popište a vysvětlete princip **dvou nezbytných podmínek stability**: **cyklického řízení a podpory lidí** - **stabilita** - schopnost hledat rovnováhu (adaptovat se na změnu) - **cyklické řízení** - učení se z vlastních výsledků a zpětné vazby - zavedení nových prvků do řízení (stanovení cílů, vyhodnocení výsledků, korekce) - **podpora lidí** - cyklický model potřebuje podporu a pochopení od lidí - musí být srozumitelný a přijatelný pro většinu lidí - firma vedená - **lidmi** - nadřízení mají věci pod kontrolou - **myšlenkami** - lidé se méně obrací na nadřízené, řeší problémy podle firemních cílů a myšlenek Popište a vysvětlete princip **dvou nezbytných podmínek dynamiky**: **proaktivního cyklického řízení a aktivity lidí** - firma je užitečná, efektivní a stabilní -> bere změny do své režie a ovlivňuje dynamiku vlastní i svého okolí - **proaktivní cyklické řízení** (tvrdá podmínka) - nekompromisní požadavek na změnu - schopnost odhadnout budoucí vývoj a rozhodovat se podle toho - učit sám sebe, procesy a systémy by měly být schopny se samy vylepšovat, systém zpětných vazeb - **aktivity lidí** (měkká podmínka) - podpora spontánní aktivity, tvůrčí práce a zapojení zaměstnanců do řešení problémů a rozhodování (za rozhodování je ale stále zodpovědný manažer) Popište **význam**, **důležitost** a možnost **změny** následujících **lidských zdrojů**: **vlastností**, **schopností** a **postojů** - **vlastnosti** - zděděné rysy osobnosti člověka spojené s biologickou a psychickou podstatou - téměr nezměnitelné, člověka s určitými vlastnosti nelze vychovávat - spíše nedůležité (důležité např. pro rozdělení rolí v týmu) - **schopnosti** - znalosti (co teoreticky umíme), dovednosti (co prakticky umíme) - je to lidský potenciál, který se dá rozvíjet (snížení nároků, rozvíjení schopností) - nedůležité, dá se doučit - **postoje** - míra snahy a ochoty pracovat, loajalita a motivace daného člověka - důležité pro týmovou práci - v menší míře měnitelné (motivační programy) Popište **princip soutěživého vztahového chování**; jakým způsobem dokážete **soutěž vyvolat**, či naopak **potlačit** - **soutěžení** - prospěch na úkor jiných - přirozená lidská potřeba zvítězit - dlouhodobě udržitelné mezi konkurenty - **vyvolání** - stejné úkoly pro všechny, relativní hodnocení - **potlačení** - nelze zcela potlačit, ale možné přesměrovat mimo skupinu (s jinou skupinou, mezi firmami) - rozdělením rolí v týmu, aby více lidí nedělalo na stejné věci Popište **princip spolupráce**; jakým způsobem dokážete spolupráci **podpořit** - **spolupráce** - dlouhodobá žádoucí taktika vnitřních vztahů vůči vnějším subjektům, se kterými nejsme v přímé konkurenci - menší potenciál než soutěžení (spolupráce pouze, když je to výhodné) - **podpoření** - zadávání úkolů tak, že mohou uspět jedině dohromady (potřeba si pomáhat) - rozlišení rolí ve skupině a zvýšení závislosti mezi lidmi ve skupině - absolutní hodnocení, odměna pro všechny, kteří dosáhnou výsledku Proč se zabýváme **požadavky na software**? **Pro koho** jsou sesbírané a zdokumentované požadavky na software **užitečné**? - **požadavek** - vlastnosti a parametry softwaru, které defunují jeho užitečnost pro zúčastněné - popis toho, co je potřeba implementovat, žádaných chování systému s jeho vlastnostmi a možných omezení procesu vývoje - **užitečné pro** - **zákazníky** - financují projekt a chtějí dostat systém, který pokryje jejich potřeby - **zaměstnance** - definují požadavky, které se poté navrhují, implementují a udržují Vysvětlete pojmy **podnikatelské** a **uživatelské požadavky**. - **podnikatelské požadavky** - formulují strategický rámec organizace (zákazníka) - proč organizace systém chce a čeho jeho zavedením dosáhne - často samostatný dokument (charta projektu) - popis vize a rozsahu projektu - **uživatelské požadavky** - popis cílů uživatelů a toho, co od systému očekávají (případy použití, scénáře) - procesy z pohledu managementu a vykonavatelů - mohou být v rozporu s podnikatelskými (poté komunikace o cílech a omezeních) Vysvětlete pojmy **podnikatelská pravidla** a **parametrické (mimofunkční) požadavky**. - **podnikatelská pravidla** - firemní předpisy, státní nařízení, průmyslové standardy, ... - říkají, jaké postupy by měly být dodržovány - **parametrické požadavky** - požadavky, které nesouvisejí s funkcionalitou, ale mají na ní vliv - zaměřují se na výkon, spolehlivost a bezpečnost Vysvětlete **význam podpisu dokumentu specifikace požadavků**. - stvrzuje nejlepší možnou závaznou dohodu v daném čase, ale umožňuje následné změny - potvrzení toho, že si obě strany specifikaci přečetli a rozumí ji Uveďte alespoň **tři dobré zvyky**, které jste použili **při psaní specifikace požadavků** během vašeho týmového projektu. Vysvětlete význam těchto dobrých zvyků. - definice **vize** a **rozsahu** projektu - pochopení toho, co zadavatel chce, a jistota, že to stihneme vytvořit v učitém čase - pochopení prostředí - stanovení používaných **technologií** a podporovaných **zařízeních** - nakreslení **kontextového diagramu** - **verzování** specifikace požadavků (postupný vývoj SW) Vysvětlete **pojem vize** a popište význam **uvedení vize** a **stanovení rozsahu** v dokumentu specifikace požadavků. - **vize** - dlouhodobá představa o produktu, k čemu má do budoucna sloužit, co zrychlí, zlevní, usnadní, ... - k čemu software je a co by se z něj v budoucnu mělo stát, vize se mění poměrně zvolna, rozsah se v čase upravuje dle termínů, rozpočtu, kvality, … - **rozsah** - podmnožinou vize, řádně definuje, která část dlouhodobé vize bude zpracovávána aktuálním projektem - co projekt bude řešit a co už ne (rozsah zároveň definuje omezení) Vysvětlete **princip a použití kontextového diagramu** a **diagramu případu užití** v rámci specifikace požadavků. Nakreslete jednoduché příkladové obrázky. - **kontextový diagram** - říká, jakým způsobem systém souvisí a komunikuje (přímo) s entitami okolo - používá se jako nástroj k pochopení prostředí - **diagram případů užití** - znázorňuje uživatelské požadavky a jak se systémem uživatelská role pracuje - využívá asociačních vazeb - používá se jako nástroj k popisu funkcionality systému **Jakým způsobem získáte požadavky od uživatelů systému**? Uveďte základní praktiky. - najdeme všechny **třídy uživatelů systému** (dle používaných funkcí, frekvence používání, úkolů, …) - najdeme **zdroje uživatelských požadavků** (rozhovory s potenciálními uživateli, dokumentace popisující stávající nebo konkurenční systémy, chybová hlášení, sledování uživatelů při práci, …) - vybereme **zástupce jednotlivých uživatelských tříd** nebo účastníků a pracujeme s nimi - dohodneme se, kdo bude **rozhodovat o požadavcích** (řešení protichůdných požadavků uživatelů) - **zapojení uživatelů** je jediný způsob, jak se vyhnout rozdílům mezi očekáváním a skutečným systémem Najděte problémy v následujícím zadání požadavku a opravte ho: „**Editor by měl okamžitě zobrazit/schovat všechny formátovací značky**.“ - nejednoznačnost ve výrazu "**formátovací značky**" - není dostatečně specifický - nejasnost časové složky ve výrazu "**okamžitě**" - není dostatečně specifikován - oprava: "Editor musí poskytnout možnost zobrazení (nejpozději do 2s od interakce uživatele) nebo skrytí vybraného typu formátování - např. HTML značek, textových stylů." Popište **smysl a náplň** čtyř základních aktivit při vývoji sw: **specifikace**, **vývoj**, **validace**, **evoluce**. - **specifikace** - definice SW produktu, vytvoření specifikace požadavků (víme co máme dělat) - náplň: vytvoření funkčních požadavků, diagramů - **vývoj** - vytváření SW produktu, který splňuje specifikaci - náplň: návrh a implementace funkcí - **validace** - ověření že produkt je správný, spolehlivý a funkční - náplň: různé testovací techniky, konzultace se zákazníkem - **evoluce** - přizpůsobení SW měnícím se požadavkům zákazníka + nabídka další funkčnosti - náplň: úpravy, rozšíření a zlepšování výkonu SW Popište **vodopádový model vývoje sw**, uveďte jeho **výhody a nevýhody**. - vývoj rozdělen do několika definovaných fází - po splnění jedné fáze se fáze ukončí a přechází se na další fázi (chybí zpětné vazby) - **výhody** - přehledný a použitelný pro malé projekty - **nevýhody** - málo flexibilní, dlouhá prodleva mezi zadáním projektu a vytvořením systému - obtížné reakce na změny požadavků zákazníka - zákazník může na konci zjistit, že vytvořený produkt není to, co chtěl Popište modely vývoje sw: **výzkumník** (evoluční prototypování) a **prototyp** (throw-away prototypování), uveďte **vhodnou oblast jejich použití**. - **výzkumník** - cílem je pracovat se zákazníkem na zajištění jeho požadavků - ze specifikace je velmi rychle vyvinut prvotní systém a ten je dále upravován na základě zákazníka (evoluční model vývoje) - vývoj začíná dobře srozumitelnými částmi systému a vyvíjí se přidáváním nových vlastností navrhovaných zákazníkem, při vývoji se často vrací k předchozím etapám - oblast použití - inovativní projekty, kde nejsou přesně definované požadavky - **prototyp** - tvorba prototypu, který se pak zahodí - prototyp se zaměřuje na ty části požadavků zákazníka, kterým moc nerozumíme - prototyp je částečně zavedený produkt se všemi vnějšími rozhraní - oblast použití - v situacích, kdy je nutné rychlé získání zpětných vazeb od zákazníka - např. vývoj uživatelského rozhraní Vysvětlete základní **principy iteračního a inkrementálního modelu** vývoje sw. - **iterační model** - vývoj probíhá ve více opakováních, kde každá iterace zdokonaluje SW - SW se s každou iterací postupně zlepšuje na základě získané zpětné vazby - možnost změny požadavků mezi iteracemi - pravidelná komunikace s klientem - **inkrementální model** - SW je vyvíjen a dodáván ve formě inkrementů, které přidávají nové funkcionality - každý inkrement je integrován s předchozími inkrementy a testován jako celek - funkcionality jsou přidávány na základě jejich důležitosti - každý inkrement je sám o sobě použitelný a přináší užitek zákazníkovi Popište základní **principy**, **fáze** a **aktivity** metodiky **Rational Unified Proces** (RUP). - **principy** - iterační způsob vývoje SW, inkrementální rozšiřování - iterace končí vytvořením spustitelného systému - průběžné ověřování kvality (princip zpětné vazby), použití UML - **fáze** - **zahájení** - výsledkem vize koncového SW - **rozpracování** - výsledkem je specifikace požadavků a navržená architektura SW - **tvorba** - výsledkem je kompletně implementovaný a otestovaný SW - **předání** - výsledkem je předaný SW produkt - **aktivity** - byznys modelovaní, specifikace požadavků, analýza a návrh, implementace, testování, nasazení Vysvětlete **zásadní rozdíly mezi agilním přístupem** k vývoji sw a **vodopádovým modelem**. - **agilní přístup** - iterativní a inkrementální vývoj s krátkými iteracemi - komunikace mezi zákazníkem a vývojovým týmem - průběžné automatizované testování - **vodopádový model** - zastaralý, méně flexibilní, pomalejší - málo komunikace se zákazníkem Vysvětlete **základní principy agilní metodiky vývoje**, vysvětlete **pojem SCRUM**. - **agilní metodiky** - metodiky odpovídají inkrementálnímu modelu - efektivnější možnost změny - přednost kladena na - individuality a interakce - spolupráci se zákazníkem - reakce na změny - **SCRUM** - princip agilní inkrementální metodiky vývoje - postavený na týmové spolupráci - získávání časté zpětné vazby - transparentní komunikace v rámci týmu, firmy i směrem k zákazníkovi Jak byste **prakticky postupovali při zavádění modelu vývoje sw**? - důležité je určit pořadí kroků, abychom mohli vybrat model, který bude sedět na naše požadavky: - **vodopádový model** - základní model, konzistentní se strukturovaným programováním shora dolů - je vhodný, pokud jsou známe požadavky (platformy, překladače, ...) - **evoluční vývoj** - pokud části požadavků nejsou zřejmé, např.: uživatelské rozhraní (nevím, co chci, ale poznám to, až to uvidím) - **komponentně orientovaný vývoj** - máme-li vhodné komponenty - **inkrementální vývoj** - potřebujeme omezit přepracování, dodáváme systém po částech **Co je to projekt? Jaký je rozdíl mezi projektem a procesem?** - **projekt** - časově omezená pracovní činnost - dočasný, pevně stanovený začátek a konec, jednoznačný cíl - má zákazníka nebo zadavatele - **proces** - opakovaně probíhající transformace vstupu na výstup - skládá se z jasně stanovených posloupností aktivit - **rozdíly** - procesy jsou většinou dlouhodobé a opakující se, projekty jsou jednorázové - proces je vnitřní organizace firmy, o projektu ví spousta lidí okolo - proces je přesně určen a stanoven, projekt se v průběhu práce mění a přepracovává Co znamená **trojí (čtvero) omezení projektu**? - každý projekt je omezen - **rozsahem**, **časem**, **náklady** a někdy **kvalitou** - je vhodné nalézt rovnováhu mezi těmito omezeními - nutnost přijímat kompromisy - abychom splnili termín, musíme redukovat rozsah a snížit náklady Vysvětlete pojmy **Ganttův diagram** a **struktura rozpisu prací (WBS)**. Uveďte ilustrační příklady. - **Ganttův diagram** - definuje, jaké jednotlivé činnosti se budou během projektu provádět - k činnostem definuje přesný časový interval doby trvání - udává návaznost jednotlivých činností na sebe - **Struktura rozpisu prací** - hierarchický rozklad cíle projektu na jednotlivé dodávané výsledky a postupně až na jednotlivé pracovní balíky Popište **princip práce s repository** (**GIT**). - systém pro verzování projektu, možnost spolupráce více lidí na jednom projektu - možnost vytvářet větve (branch) - základní operace - **init** - založení repozitáře - **commit** - uložení změn do lokálního repozitáře - **pull** - stáhnutí vzdáleného repozitáře do lokálního - **push** - nahrání lokálního repozitáře do vzdáleného Co je to **UML** a k čemu ho použiji? - Unified Modeling Language - otevřený a rozšířitelný standard pro vizuální modelování - možnost tvorby různých diagramů pro různé situace - modely v UML obsahují: - statickou strukturu (jaké objekty jsou důležité a jak spolu souvisí) - dynamické chování (vzájemná spolupráce objektů) - použití - modelování objektově orientovaných systémů - ke komunikaci mezi vývojáři a zákazníky Vysvětlete základní **princip a použití UML diagramu případů užití**. Nakreslete příkladový obrázek. - znázorňuje uživatelský požadavek a jak se systémem uživatelská role pracuje - využívá asociačních vazeb - používá se jako nástroj k popisu funkcionality systému Vysvětlete základní **princip a použití UML diagramu tříd**. Nakreslete příkladový obrázek. - popisuje statickou strukturu a vztahy mezi třídami - atributy, metody, třídy a jejich vztahy: dědičnost, závislost, asociace - slouží jako nástroj ke komunikaci mezi vývojáři, architekty - slouží k analýze systému Vysvětlete základní **princip a použití UML stavového diagramu**. Nakreslete příkladový obrázek. - popisuje chování systému s ohledem na jeho různé stavy - zachycuje, jak se systém mění mezi různými stavy v reakci na události nebo akce - používá se k modelování chování SW systémů nebo hardwarových zařízení Vysvětlete základní **princip a použití UML sekvenčního diagramu**. Nakreslete příkladový obrázek. - dynamický diagram - znázorňuje spolupráci instancí v čase - zachycuje, jak spolu objekty komunikují a jak si vyměňují zprávy - slouží ke znázornění scénářů - reprezentace systému - nepřerušovaná čára - zpráva (volání metody) - přerušovaná čára - návratová hodnota - svislý obdélník - instance existuje Vysvětlete základní **princip a použití UML diagramu aktivit**. Nakreslete příkladový obrázek. - popisuje tok činností a chování systému - pomáhá k identifikaci problémových oblastí - používá se k analýze a plánování toku informací - reprezentace systému - uzly - různé činnosti - hrany - tok mezi činnostmi - rozhodovací body - podmínka - synchronizační body - čekání na splnění určitých podmínek Vysvětlete základní **princip a použití** alespoň jednoho z následujících UML diagramů: **diagram nasazení, diagram komponent**. Nakreslete příkladový obrázek. - **diagram komponent** - statický diagram - komponenta zapouzdřuje implementaci a zveřejňuje množinu rozhraní - říká, jaké kompomenty v systému jsou - jak spolu interagují - jaká mají rozhraní a jak spolu souvisí - používá se při návrhu SW architektury - pro identifikaci komponent systému, jejich funkcí, závislostí a rozhraní Vysvětlete **pojem analytický model**, popište, jak vypadá **analytická třída** - **analytický model** - vždy v jazyku domény - zachycuje problém z určité perspektivy - obsahuje artefakty modelující problémovou doménu - vypráví příběh o požadovaném systému - **analytická třída** - obsahuje množinu hlavních kandidátů na atributy a množinu hlavních operací - z názvu je jasný její účel - modeluje jeden specifický element problémové domény - má málo vazeb na okolní třídy Vysvětlete **pojmy asociace, spojení, závislost**. - asociace - vztah mezi dvěma nebo více objekty, který vyjadřuje, že tyto objekty spolu nějakým způsobem souvisí - spojení - vztah, kdy jeden objekt vlastní nebo obsahuje druhý objekt - závislost - vztah mezi dvěma objekty, který vyjadřuje, že jeden objekt potřebuje nebo je závislý na druhém objektu pro provedení určité operace Vysvětlete **pojmy asociace, agregace, kompozice**. - asociace - vztah mezi dvěma nebo více objekty, který vyjadřuje, že tyto objekty spolu nějakým způsobem souvisí - nejvolnější vztah - obousměrná - agregace - vztah, kde jedna část může existovat nezávisle na celku - například tiskárna může existovat bez počítače, když celek je počítač s tiskárnou - jednosměrná asociace - kompozice - vztah, kde je jeden objekt součástí celku a nemůže bez něj existovat - nejsilnější vazba Vysvětlete **rozdíl a návaznost** mezi **analýzou a návrhem softwaru**. - analýza říká, co máme dělat - porozumění požadavkům a potřebám uživatelů - prostředí, kde bude software nasazen - návrh říká, jak to máme dělat - proveden na základě požadavků zjištěných analýzou - návrh architektury a způsobu implementace funkcionality - analýza a návrh probíhají do jisté míry současně Vysvětlete **pojem rozhraní**, jak **rozhodnete** ve fázi návrhu o **vhodnosti existence rozhraní**. - odděluje specifikaci od implementace - lze jej připojit ke třídám či komponentám - definuje nabízené služby - zavedení - v případě, kdy máme více tříd s podobným účelem či rolí - když chceme rozvolnit asociační vazby Vysvětlete **pojmy diagram datových toků** (DFD) a **model kontextu systému** (nakreslete obrázek). - diagram datových toků - jednoduché a intuitivní - říká, jakým způsobem data protékají v systému, kdo je zpracovává a jak to zpracování jde za sebou - model kontextu systému - hranice systému - říká, jakým způsobem systém souvisí a komunikuje (přímo) s entitatmi okolo - používá se jako nástroj k pochopení prostředí Zhodnoťte **význam návrhu architektury sw systému** pro **úspěšnost výsledného sw systému**, popište, jak budete principiálně **postupovat při návrhu architektury**. - dobře navržená architektura je podmínkou pro včasné odladění a udržitelnost produktu - postup: - rozdělení systému do podsystémů - rozdělení vrstev a oddílů - návrh topologie systému - rozložení funkcionalit - výběr architektonických vzorů - definice rozhraní Vysvětlete **pojem softwarová architektura**. - týká se základní struktury, organizace a návrhu softwarového systému - vytváří plán, který určuje, jak jsou komponenty systému propojeny, jak spolu komunikují, jak jsou organizovány a jak jsou zajištěné požadované funkce a vlastnosti systému + správný návrh architektury je klíčový pro dosažení kvalitního SW, který je spolehlivý, rozšiřitelný, snadno udržovatelný a efektivně plní požadavky uživatelů Vysvětlete **pojmy preskripitivní** a **deskriptivní architektura**. - **preskriptivní** - zachycuje designová rozhodnutí učiněná před vývojem systému - jedná se o zamýšlenou architekturu - **deskriptivní** - popisuje, jak byl systém postaven - jedná se o implementovanou architekturu Vysvělete **pojmy komponenta** a **konektor**. - **komponenta** - nezávislá a znovupoužitelná část SW, má jasně definovanou funkčnost a rozhraní - možnost samostatného vývoje a testování, poskytují služby specifické pro aplikaci - **konektor** - prvek, který umožňuje komunikaci a interakci mezi různými komponentami - propojuje komonenty a umožňuje tok dat, obvykle jednoduchá volání metod Popište architektonické styly **dataflow** a **blackboard** (tabule). - dataflow - tok dat mezi různými komponentami systému - komponenty zpracovávají data ihned, jedná se o posloupnost transformací - blackboard - společné úložiště, které je přístupné všem komponentám systému - centrální místo, kde komponenty přispívají svými znalostmi a zpracovávají uložené informace - každá komponenta může číst a zapisovat Popište a vysvětlete **princip třívrstvé architektury**. - rozděluje aplikaci do 3 vrstev, kde každá vrstva má oddělený účel - **prezentační vrstva** - viditelná pro uživatele (např. uživatelské rozhraní - webové, mobilní, desktopové) - zajišťuje vstup požadavků a prezentaci výsledků - je závislá na platformě - **logická vrstvá** - logika a funkčnost aplikace, zajišťuje výpočty a operace nad daty - přijímá data z prezentační vrstvy, zpracovává je a předává je do datové vrstvy - **datová vrstva** - zajišťuje přístup k datům a jejich uložení, správnost, konzistenci, bezpečnost - komunikuje s databázemi, soubory nebo jinými datovými zdroji Popište a vysvětlete princip **architektury MVC**. Nakreslete příkladový obrázek. - cílem je oddělit různé části aplikace a zlepšit modularitu, údržbu a rozšiřitelnost - skládá se ze tří hlavních komponent: - **model** - datová vrstva aplikace, obsahuje data a logiku, která s těmito daty pracuje - **view** - vizuální prezentace dat uživateli, zobrazuje přijatá data z modelu - **controller** - přijímá požadavky od uživatele a provádí potřebné akce Vysvětlete pojmy **návrhový vzor**, **katalog návrhových vzorů**. - **návrhový vzor** - způsob řešení častých a opakujících se problémů při návrhu SW - poskytuje strukturu a pravidla pro návrh a implementaci systému - **katalog návrhových vzorů** - sbírka popsaných návrhových vzorů klasifikovaných podle účelu a chování - nejznámější katalog - Design Patterns: Elements of Reusable Object-Oriented Software Popište **základní principy**, na kterých jsou založeny **návrhové vzory**. - dva pohledy: - klient-rozhraní: zaměřuje se na pohled klienta, implementace ho nezajímá - rozhraní-implementace: změnou implementace klient nebude nijak ovlivněn - polymorfismus - dědění společné funkcionality tříd od předků - abstraktní třída - společná funkcionalita a rozhraní pro konkrétní třídy - rozhraní - specifikují, jaké metody a operace třída musí implementovat Vysvětlete **SOLID** (**Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Inversion of Control/Dependency Injection**) principy v objektovém návrhu. - **SOLID** - pět základních principů objektově orientovaného návrhu. - **S** - **jediná zodpovědnost** = třída má pouze jednu specifickou úlohu nebo funkci - **O** - **otevřenost uzavřenost** = třídy jsou otevřené pro rozšíření a uzavřené pro modifikaci - **L** - **Liskov** = odvozené třídy jsou schopny plnit všechno, co jejich předci - **I** – **rozdělení rozhraní** = rozhraní je specifické pro jednotlivé uživatele - **D** – **invertování závislostí** = moduly závisí na abstrakcích, nikoli na konkrétních třídách Vysvětlete principy **DRY** a **KISS** v souvislosti s návrhem software. - **DRY** - Don't Repeat Yourself - nemělo by docházet k duplikaci kódu nebo informací v systému - snižuje riziko chyb, jelikož změny se provádějí pouze na jednom místě - **KISS** - Keep It Simple, Stupid - návrh a implementace SW má být co nejjednodušší - podporuje jednoduchost a srozumitelnost kódu, což usnadňuje jeho čtení, údržbu a testování Popište základní princip **návrhového vzoru Iterátor**. Nakreslete příkladový obrázek – **UML diagram struktury vzoru**. - **Iterátor** - slouží k procházení kolekcí, aniž bychom museli znát jejich interní strukturu - umožňuje měnit implementaci kolekce beze změn mimo kolekce Popište **návrhový vzor Fasáda**. Nakreslete příkladový obrázek – **UML diagram struktury vzoru**. - **Fasáda** - strukturální vzor, který poskytuje jednotné rozhraní pro usnadnění a zjednodušení používání složitých systémů nebo podsystémů - slouží jako rozhraní mezi klientem a vnitřními komponentami systému, skrývá složitost a poskytuje zjednodušené rozhraní pro klienta Popište základní princip **návrhového vzoru Stavitel** (Builder). Nakreslete příkladový obrázek – **UML diagram struktury vzoru**. - **Stavitel** - vzor je vytvořený s cílem oddělit proces tvorby komplexního objektu od jeho reprezentace - umožnuje postupné konstruování objektu krok za krokem Popište základní princip **návrhového vzoru Tovární metoda**. Nakreslete příkladový obrázek – **UML diagram struktury vzoru**. - **Tovární metoda** - používá se pro zapouzdření složitější inicializace instance Popište základní princip **návrhového vzoru Singleton**. Nakreslete příkladový obrázek – **UML diagram struktury vzoru**. - **Singleton** - třída má pouze jednu instanci, která je globálně získatelná - využívá se tovární metody Popište základní princip **návrhového vzoru Skladba** (Composite). Nakreslete příkladový obrázek – **UML diagram struktury vzoru**. - **Skladba** - představuje řešení, jak uspořádat jednoduché objekty a z nich složené objekty tak, aby k oběma typům objektů bylo možné přistoupit jednotným způsobem - často využívá polymorfismus Popište základní princip **návrhového vzoru Dekorátor** (Decorator). Nakreslete příkladový obrázek – **UML diagram struktury vzoru**. - **Dekorátor** - vytváří se za účelem změny instancí bez nutnosti vytvoření nových odvozených tříd, jelikož pouze dynamicky připojuje další funkčnosti k objektu - každá dodaná funkčnost je u dekorátoru implementována jako "ozdobení" jiného objektu - rozšiřuje objekt Vysvětlete **princip oddělení zodpovědnosti** (separation of concern) v objektovém návrhu. - rozdělení systému na oddělené části, z nichž každá má jasně definovanou zodpovědnost - funkcionalitu tedy vykonává pouze ta část systému, která je k tomu určená - díky tomu snížíme závislost mezi jednotlivými částmi systému Jaký je **smysl testování**? Do jaké míry je ekonomicky **rozumné testovat**? - smyslem je - zajištění kvality a spolehlivosti SW systémů - pomáhá nám odhalovat chyby, ověřit bezpečnost a správnost systému - testuje se protože - lidé dělají chyby - nalezení chyb dříve snižuje náklady - testujeme do té doby, dokud náklady na nalezení dalšího defektu nepřekročí náklady na ponechání daného defektu Vysvětlete **pojmy black box a white-box testování** - **black box** - neznáme implementaci, známe vstupy a očekávané výstupy - pohled uživatele - též funkcionální testování - metoda simulující reálný způsob použití aplikace - výhoda: tester nemusí být programátor - **white box** - známe implementaci, zdrojový kód i strukturu - pohled programátora - též strukturální testování (souvisí s pokrytím kódu) - cílem je otestování vnitřní logiky systému a správnosti algoritmů Vysvětlete **pojem akceptační testování**. - cílem je ověřit, zda systém splňuje předem stanovené požadavky a očekávání zákazníka nebo uživatele - zjišťuje, zda je systém připraven k nasazení do provozu a zda je schopný plnit požadované funkce v reálném prostředí - obsah testů by měl určit zadavatel Vysvětlete a popište, jak probíhá **jednotkové testování**. Uveďte příklad. - testovaní jednoduchých komponent (tříd, metod) - první fáze testování, rychlé a méně nákladné - cílem je ověřit správnou funkčnost jednotlivých částí Vysvětlete **pojmy A/B testování** a **zátěžové testování**. - **A/B testování** - metoda používaná k porovnávání dvou verzí produktu - uživatelé se náhodně rozdělí do dvou skupin a každé se zobrazuje jedna ze dvou různých variant (A a B) a měří se, která verze vede k lepšímu výsledku - **zátěžové testy** - zjišťuje chování a výkon SW při vysokém počtu uživatelů nebo dotazů Co jsou to **automatické testy**, jaký je jejich **význam**, jaké mají **výhody a nevýhody**? - **automatické testy** - navrženy tak aby se prováděly automaticky, bez zásahu testera - založeny na napsaných testovacích skriptech nebo scénářích - mohou být spouštěny opakovaně a systematicky, což usnadňuje kontrolu kvality a identifikaci chyb - **výhody**: rychlost, efektivita, úspora času a nákladů - **nevýhody**: náročná implementace, nelze otestovat vše, mohou generovat falešné výsledky Co je to **code review**? Jak byste code review prováděli? - proces, ve kterém jiný člověk projde kód a vyhodnotí jeho kvalitu, správnost a dodržení určitých standardů - cílem je zlepšit kvalitu, čitelnost a udržitelnost kódu, odhalit a opravit chyby Co popisuje **schéma tzv. agilních testovacích kvadrantů**? - pomáhá týmu testerů naplánovat, připravit a následně provádět testování 1. **unit testy** - testování jednotlivých komponent 2. **testy na úrovni služeb** - komunikace mezi komponentami 3. **testy na uživatelské rozhraní** - fungování UI 4. **testování výkonu, bezpečnosti a udržovatelnosti** Vysvětlete **pojem dostupnost, lhůta plnění, základní doba služeb** v oblasti provozu informačního systému. - **dostupnost** - doba, kdy je garantována funkčnost IS (např. 95 %) - **lhůta plnění** - pro vykonávání stanovených činností (např. jak rychle musí být nahozen server po spadnutí) - **základní doba služeb** - doba, ve které jsou garance a lhůty plnění poskytovány (např. od 7:00 do 19:00) Jak **zabezpečíte dodržování SLA** (service level agreement) v provozu informačních systémů? - pomocí smlouvy, které je podepsaná oběma stranami - definováním sankcí ve smlouvě - včasnou dohodou, pokud není možné dodržet parametry SLA Vysvětlete **princip činnosti primární a sekundární podpory** v servisu informačních systémů. - **primární podpora** - jediné kontaktní místo pro pomoc uživatelům (hotline, helpdesk) - činnost zajišťují operátoři, sledování provozu, poskytnutí informací - poskytuje řešení známých problémů, používá známé postupy (odpověď obratem) - **sekundární podpora** - poskytuje řešení problémů, řešení nadstandardních provozních úloh - řešení změn a nových funkčností pouze v omezeném objemu - řeší případy, kde není řešení doposud známé, statistiky Jaké je **základní pravidlo při řešení problémů** servisu informačních systémů? - nahlásit problém - umožnit uživateli pokračovat v práci jiným způsobem - najít náhradní funkční řešení - kategorie podle závažnosti a severity: - A (kritický problém) - problémy, které nelze odkládat a mají významný dopad na provoz systému - vyžadují okamžité řešení - B (vážný problém) - problémy mají významný dopad na provoz systému, ale je možné je obejít náhradním řešením - řešení v nejbližší době - C - problém, který nemá dopad na funkčnost, jejich řešení lze odložit Jak vypadá **SLA (service level agreement)** v oblasti servisu IS? - definuje úroveň a kvalitu služeb jako parametry (pro porušení parametrů stanoveny sankce) - je smluvní dohodou mezi dodavatelem a odběratelem - stanovuje cenu rizika, základní doba služeb - lhůty plnění (pro zahájení řešení problému, snížení kategorie problému, odstranění problému) Popište **princip dualismu autorského práva** – **právo majetkové** a **právo osobnostní**. Uveďte **dvě výjimky** (omezení) autorského práva. - **právo majetkové** - týká se ekonomických a materiálních práv spojených s autorským dílem - dává autorovi a držiteli autorských práv právo na kontrolu a využívání svého díla za účelem získání hospodářského prospěchu - je často převoditelné a může být předmětem obchodování - **právo osobnostní** - práva jsou nepřevoditelná a autor se nemůže těchto práv vzdát - práva jsou pevně spojena s osobností autora a jsou chráněna i po jeho smrti - **výjimky** - k dílu vytvořeného z pracovněprávního vztahu má majetková práva zaměstnavatel - **školní dílo** = škola má nevýhradní licenci k nekomerčnímu užití Jak můžete vy/firma dále **používat software vytvořený jako zaměstnanecké dílo**? - firma získává autorská práva k SW vytvořenému zaměstnancem - může jej upravovat, používat, prodávat a licencovat - zaměstnanec nesmí SW dále používat pro své účely ani jej licencovat - může být uvedený jako autor a dílo může odvolat Popište **základní typy licencování softwaru** a **základní obsah licenční smlouvy**. - **výhradní typ** - poskytovatel uděluje licenci uživateli právo užívat SW výhradně - nemůže udělit licenci žádné jiné třetí straně ani jej sám využívat - **nevýhradní typ** - umožnuje poskytovateli SW nadále disponovat SW a udělovat licence dalším - **obsah licenční smlouvy** - identifikace stran, specifikace SW, rozsah a způsob užití SW, doba trvání licence, odměna za licenci Popište, jaká práva máte **vy a univerzita k softwaru**, který vytvoříte jako **školní dílo**. - **student** má právo na to být uznán jako tvůrce a má právo chránit dílo proti neoprávněným úpravám - **univerzita** má nevýhradní licenci pro nekomerční užití Uveďte alespoň **dvě nařízení či směrnice z evropského digitálního balíčku** se stručným vysvětlením jejich významu. - **DMA** (Digital Markets Act) - cílí na velké online platformy, které mají velký vliv na trh - zavádí pravidla zabraňující zneužívání tržní síly daných platforem - usnadňuje vstup nových hráčů na trh a podporuje konkurenční prostředí - **GDPR** (General Data Protection Regulation) - stanovuje pravidla pro shromažďování, zpracování a uchovávání osobních údajů - umožňuje uživatelům právo být zapomenut (výmaz) nebo na opravu údajů