- 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ů.
- 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.
- 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 snimi
- 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ů
- 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
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ý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
- 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í**
- 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