CORE013 / Barbora Bühnová1 Přednáška 9 Klíčové atributy kvality CORE013 / Barbora Bühnová2 9. Klíčové atributy kvality ̶ Udržovatelnost ̶ Výkonnost ̶ Spolehlivost ̶ Bezpečnost ̶ Použitelnost Domácí práce a příprava na dnešní přednášku ̶ Přijdejte se k nám na Den s průmyslovými patnery FI MU https://www.fi.muni.cz/for-partners/meeting-autumn2021.html.cs CORE013 / Barbora Bühnová3 VÝZNAMNOST ATRIBUTŮ KVALITY STOUPÁ CORE013 / Barbora Bühnová4 Střet digitalizace s kritickými infrastrukturami Kritické infrastruktury ̶ Kybernetický a fyzický prostor se spojil v jeden ̶ Kdybychom zůstali digitální, moc by toho nehrozilo, ale přecházíme na dálkové ovládání různých kritických funkcí CORE013 / Barbora Bühnová / Inspirace od Awaise Rashida, Bristolská univerzita5 Situace je komplikovaná i vlivem dalších faktorů ̶ Hyperpropojený svět a podnikatelské prostředí, kaskádovité řešení problémů, nepředvídatelné dopady ̶ Nejistota ohledně důvěryhodnosti připojených zařízení ̶ Vysoce distribuované prostředí, vstupní body k zabezpečení, nekonzistence dat, nespolehlivé senzory, částečné poruchy. ̶ Zabezpečení proti dosud neexistujícím hrozbám CORE013 / Barbora Bühnová6 Engineering for the Unknown ̶ Už nestačí navrhovat systémy pro předcházení problémům. ̶ Musíme předvídat úmyslné a neúmyslné problémy na všech úrovních. ̶ Předpřipravené mechanismy pro: ̶ rozpoznání útoku/poruchy, ̶ zabránit jejímu šíření, ̶ zajištění bezpečnosti při útoku/poruše, ̶ zotavení z útoku/neúspěchu, ̶ forenzní analýza po útoku/poruše CORE013 / Barbora Bühnová7 RŮZNÉ ÚHLY POHLEDU NA KVALITU SOFTWARE CORE013 / Barbora Bühnová8 Funkční a nefunkční požadavky ̶ Funkční požadavky ̶ Definice služeb, které by měl systém poskytovat, toho, jak by měl systém reagovat na určité vstupy a jak by se měl chovat v určitých situacích. ̶ Nefunkční požadavky ̶ Vlastnosti a omezení služeb nabízených systémem, jako jsou časová, spolehlivostní a bezpečnostní omezení, omezení vývojového procesu, platformy, standardů atd. ̶ Nefunkční požadavky nám pomáhají definovat ̶ Kvalitu softwarového produktu ̶ Omezení, tj. soulad s kontextem (organizace a legislativa) CORE013 / Barbora Bühnová9 Požadavky na produkt a kvalita SW EXTERNÍ KVALITA INTERNÍ KVALITA Viditelné / příznaky Neviditelné / příčiny použitelnost přesnost náklady výkonnost spolehlivost struktura programu složitost postupy kódování testovatelnost opakované použití udržovatelnost flexibilita srozumitelnost bezpečnost CORE013 / Barbora Bühnová10 Požadavky na kvalitu produktu ̶ Udržovatelnost ̶ Výkonnost ̶ Spolehlivost ̶ Bezpečnost ̶ Použitelnost ̶ Odolnost, robustnost ̶ Přenositelnost ̶ Přizpůsobivost ̶ Modularita ̶ Opakovaná použitelnost ̶ Srozumitelnost, složitost ̶ Testovatelnost CORE013 / Barbora Bühnová / https://www.theguardian.com/money/2014/dec/14/amazon-glitch-prices-penny-repricerexpress11 Real-life story – Amazon 1p Christmas problem CORE013 / Barbora Bühnová12 UDRŽOVATELNOST CORE013 / Barbora Bühnová13 Udržovatelnost ̶ Určuje schopnost systému přizpůsobovat se změnám a pokroku ̶ Hlavním cílem je předcházet technickému dluhu ̶ technical dept je čas, který v budoucnu strávíme refactoringem současného řešení ̶ vzniká špatným návrhem nebo snahou co nejvíce urychlit proces vývoje ̶ krátkodobě se může zdát výhodné rychle vytvořit funkční produkt, ten ale může být dlouhodobě neudržovatelný a vytvořit tak náklady navíc na opravu CORE013 / Barbora Bühnová14 Kde je důležitá? ̶ V systémech, které často mění nebo rozšiřují své funkcionality Například: ̶ Bankovnictví (tradiční systémy žijící dlouhou dobu) ̶ personalistika ̶ řízení dopravy ̶ sociální sítě (dynamické a rychle se měnící systémy) CORE013 / Barbora Bühnová15 Jak systém udělat udržovatelnější? CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman16 Modifikovatelnost ̶ Modifikovatelnost se týká nákladů na změnu. ̶ Co se může změnit (artefakt)? ̶ Funkce, které systém počítá, platforma, na které systém existuje (hardware, operační systém, middleware atd.), prostředí, ve kterém systém funguje, atd. ̶ Kdy se změna provádí a kdo ji provádí (prostředí)? ̶ Při implementaci (úpravou zdrojového kódu), kompilaci (pomocí přepínačů při kompilaci), sestavení (výběrem knihoven), nastavení konfigurace (řadou technik, včetně nastavení parametrů) nebo spuštění (nastavením parametrů). ̶ vývojářem, koncovým uživatelem nebo správcem systému. CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman17 Taktika modifikovatelnosti - Předcházení vlnovým efektům ̶ Vlnovým efektem změny je nutnost provést změny v modulech, kterých se změna přímo netýká. ̶ Pokud je například modul A změněn tak, aby bylo možné provést určitou modifikaci, pak je modul B změněn pouze kvůli změně modulu A. Modul B musí být změněn, protože v určitém smyslu závisí na modulu A. ̶ Skrýt informace. Skrývání informací je rozklad odpovědnosti za entitu (systém nebo určitý rozklad systému) na menší části a výběr informací, které budou viditelné. CORE013 / Barbora Bühnová / https://engineering.fb.com/2020/03/02/data-infrastructure/messenger/18 Real-life story - Rewriting the Messenger codebase CORE013 / Barbora Bühnová / https://engineering.fb.com/2020/03/02/data-infrastructure/messenger/19 Real-life story - Rewriting the Messenger codebase ̶ Od svého vzniku v roce 2011 byl Messenger rozšířen o mnoho nových funkcionalit, což vedlo k postupnému nárůstu počtu řádků kódu až na více než 1,7 milionu. ̶ Toto výrazně znesnadňovalo jakékoli úpravy aplikace, proto se v roce 2020 rozhodli návrháři přepsat ji celou od začátku a zmenšili počet řádků na 360 tisíc. ̶ Aby se předcházelo opětovnému nárůstu velikosti, mají nyní návrháři nových funkcionalit limit, který nesmí svými nápady překročit. CORE013 / Barbora Bühnová20 VÝKONNOST CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman21 Výkonnost ̶ Výkonnost je o čase - o době odezvy na události (přerušení, zprávy, požadavky uživatelů nebo plynutí času). ̶ U webového finančního systému může být odpovědí počet transakcí, které lze zpracovat za minutu, nebo očekávaná doba trvání jedné transakce (zadaná jako náhodná veličina). ̶ Velmi citlivé na souběžné efekty (počet uživatelů, sdílené zdroje), hardware, implementaci operačního systému (např. strategii plánovače) atd. ̶ Často je doprovázeno charakterizací propustnosti a využití zdrojů. CORE013 / Barbora Bühnová22 Kde je důležitá? ̶ V systémech, kde očekáváme rychlou odezvu Například: ̶ počítačové hry ̶ řízení dopravy ̶ biochemické simulace ̶ machine learning CORE013 / Barbora Bühnová23 Jak systém udělat výkonnější? CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman24 Výkonnostní taktiky ̶ Zavedení souběhu. ̶ Pokud lze požadavky zpracovávat paralelně, lze zkrátit dobu blokování. Je však nutné dobře porozumět účinkům souběhu. ̶ Kontrola využívání zdrojů. ̶ To zahrnuje výpočetní zdroje i data. Konkrétně jde o vyvážení zátěže, řízení přístupu, plánování (prostřednictvím priority), ukládání do mezipaměti, udržování více kopií s cílem snížit spor. ̶ Zvýšení dostupných zdrojů. ̶ Rychlejší procesory, další procesory, další paměť a rychlejší sítě mají potenciál snížit latenci. CORE013 / Barbora Bühnová25 SPOLEHLIVOST CORE013 / Barbora Bühnová26 Spolehlivost (Reliability) ̶ Pravděpodobnost bezporuchového provozu systému po určitou dobu v daném prostředí pro daný účel. ̶ Týká se ̶ Jak se zjišťuje závada/chyba/porucha systému. ̶ Jak často může dojít k poruše/chybě/závadě systému. ̶ Co se stane, když dojde k poruše/chybě/závadě. ̶ Lze vyjádřit kvantitativně ̶ Použití pravděpodobnosti selhání na vyžádání (POFOD) v rámci jedné služby nebo provedení scénáře použití jako 1 - POFOD. CORE013 / Barbora Bühnová27 Dostupnost (Availability) ̶ Pravděpodobnost, že systém bude v určitém okamžiku funkční a schopen poskytovat požadované služby. ̶ Týká se ̶ Jak dlouho by měl systém fungovat bez poruchy. ̶ Jak dlouho může být systém mimo provoz. ̶ Lze vyjádřit kvantitativně ̶ Pomocí střední doby do poruchy (MTTF) a opravy (MTTR) jako MTTF / (MTTF + MTTR). ̶ Tj. dostupnost 0,999 znamená, že systém je v provozu 99,9 % času. CORE013 / Barbora Bühnová28 Nároky na spolehlivost ̶ Zákazníci softwaru obecně očekávají, že veškerý software bude spolehlivý. U nekritických aplikací však mohou být ochotni akceptovat určité selhání systému. ̶ Některé aplikace (kritické systémy) mají velmi vysoké požadavky na spolehlivost a k dosažení tohoto cíle mohou být použity speciální techniky softwarového inženýrství. ̶ Zdravotnické systémy ̶ Telekomunikační a energetické systémy ̶ Letecké a kosmické systémy CORE013 / Barbora Bühnová29 Kde je důležitá? ̶ V kritických infrastrukturách Například: ̶ zdravotnictví ̶ řízení letecké dopravy ̶ elektrárny ̶ vesmírné mise CORE013 / Barbora Bühnová30 Jak systém udělat spolehlivější? CORE013 / Barbora Bühnová31 Dosažení spolehlivosti ̶ Vyhýbání se poruchám ̶ Vývojový proces je organizován tak, aby byly chyby v systému odhaleny a opraveny ještě před dodáním zákazníkovi. ̶ Techniky ověřování a validace se používají k odhalení a odstranění chyb v systému před jeho nasazením. ̶ Detekce poruch ̶ Techniky detekce chyb a selhání za běhu, jako jsou akceptační testy, ping/echo, heartbeat. ̶ Odolnost proti chybám ̶ Systém je navržen tak, aby chyby v dodaném softwaru nevedly k selhání systému. CORE013 / Barbora Bühnová32 Redundance a rozmanitost ̶ Redundance ̶ Mějte k dispozici více než 1 verzi kritické součásti, abyste v případě selhání jedné měli k dispozici zálohu. ̶ Např. automatické přepnutí na záložní servery v případě poruchy. ̶ Diverzita ̶ Stejné funkce poskytněte různými způsoby, aby nedošlo k jejich stejnému selhání. ̶ Např. různé servery mohou používat různé operační systémy (např. Windows a Linux). ̶ Přidáním rozmanitosti a redundance se však zvyšuje složitost, což může zvýšit pravděpodobnost chyby. ̶ Někteří inženýři jsou zastánci jednoduchosti a rozsáhlého V & V, což je efektivnější cesta ke spolehlivosti softwaru. CORE013 / Barbora Bühnová33 Ochranné systémy ̶ Specializovaný monitorovací a řídicí systém, který je spojen s jiným systémem a který může v případě poruchy provést nouzovou akci. ̶ Systém pro zastavení vlaku při průjezdu na červenou ̶ Systém pro vypnutí reaktoru při příliš vysoké teplotě ̶ Ochranné systémy jsou redundantní, protože obsahují monitorovací a řídicí funkce, které kopírují funkce řízeného softwaru. ̶ Ochranné systémy by měly být různorodé a měly by používat jinou technologii než řízený software. CORE013 / Barbora Bühnová / https://stackoverflow.blog/2021/05/11/testing-software-so-its-reliable-enough-for-space/34 Real-life story - Testing software for space CORE013 / Barbora Bühnová / https://stackoverflow.blog/2021/05/11/testing-software-so-its-reliable-enough-for-space/35 Real-life story - Testing software for space ̶ Software používaný na lety do vesmíru má vysoké požadavky na spolehlivost. ̶ SpaceX používá vlastní systém pro správu verzí a změn ve svém software. ̶ Každá změna musí projít různými fázemi testování a být zkontrolována vícero lidmi než je umožněno ji zanést do ostrého provozu. CORE013 / Barbora Bühnová36 BEZPEČNOST CORE013 / Barbora Bühnová37 Bezpečnost ̶ Vyjadřuje schopnost systému pracovat normálně nebo abnormálně, aniž by hrozilo nebezpečí zranění nebo smrti člověka a aniž by bylo poškozeno prostředí systému. ̶ Je důležité vzít v úvahu bezpečnost softwaru, protože většina zařízení, jejichž selhání je kritické, dnes obsahuje řídicí systémy založené na softwaru. ̶ Požadavky na bezpečnost jsou často požadavky výlučné, tj. vylučují nežádoucí situace, spíše než aby specifikovaly požadované služby systému. Ty vytvářejí požadavky na funkční bezpečnost. CORE013 / Barbora Bühnová38 Zabezpečení ̶ Vlastnost systému, která odráží schopnost systému chránit se před náhodným nebo úmyslným vnějším útokem. ̶ Chrání systém proti: ̶ Ohrožení důvěrnosti systému a jeho údajů Může zpřístupnit informace osobám nebo programům, které nemají oprávnění k přístupu k těmto informacím. ̶ Ohrožení integrity systému a jeho dat Může dojít k poškození nebo zničení softwaru nebo jeho dat. ̶ Ohrožení dostupnosti systému a jeho dat Může omezit přístup k systému a datům pro oprávněné uživatele. ̶ Bezpečnost je základním předpokladem dostupnosti, spolehlivosti a bezpečnosti. CORE013 / Barbora Bühnová39 Bezpečnostní terminologie Termín Definice Neštěstí Neplánovaná událost nebo sled událostí, které mají za následek smrt nebo zranění lidí, škody na majetku nebo na životním prostředí. Např. předávkování inzulinem. Riziko Jedná se o míru pravděpodobnosti, že systém způsobí neštěstí. Riziko se posuzuje na základě pravděpodobnosti nebezpečí, závažnosti nebezpečí a pravděpodobnosti, že nebezpečí povede k nehodě. Např. riziko předávkování inzulinem je pravděpodobně střední až nízké. Zranitelnost Slabé místo v počítačovém systému, které může být zneužito ke způsobení ztráty nebo škody (např. slabé heslo). Útok Zneužití zranitelnosti systému. Zpravidla se jedná o záměrný pokus o způsobení škody zvenčí systému. Hrozby Okolnosti, které mohou způsobit ztrátu nebo škodu. Můžete si je představit jako zranitelnost systému, která je předmětem útoku (např. uhodnutí slabého hesla). Opatření Ochranné opatření, které snižuje zranitelnost systému. Např. šifrování je příkladem kontroly, která snižuje zranitelnost slabého systému kontroly přístupu, nebo v našem příkladu systému kontroly hesel. CORE013 / Barbora Bühnová40 Kde je důležitá? ̶ V systémech pracujících s citlivými/cennými daty Například: ̶ zdravotnictví ̶ bankovnictví ̶ elektrárny ̶ vojenství ̶ státní správa CORE013 / Barbora Bühnová41 Jak systém udělat bezpečnější? CORE013 / Barbora Bühnová42 Návrh pro bezpečnost ̶ Při navrhování architektury pro zabezpečení je třeba zvážit dvě základní otázky. ̶ Ochrana Jak by měl být systém organizován, aby bylo možné chránit kritická aktiva před vnějším útokem? ̶ Distribuce Jak by měly být rozděleny prostředky systému, aby byly minimalizovány následky úspěšného útoku? ̶ Potenciálně protichůdné ̶ Pokud je majetek rozdělen, je jeho ochrana nákladnější. Pokud jsou aktiva chráněna, mohou být ohroženy požadavky na použitelnost a výkon. CORE013 / Barbora Bühnová43 Bezpečnostní pokyny Bezpečnostní taktiky Zakládat rozhodnutí o zabezpečení na explicitní bezpečnostní politice Vyhněte se jedinému bodu selhání Bezpečné selhání Vyvážení bezpečnosti a použitelnosti Zaznamenávání akcí uživatele Využití redundance a diverzity ke snížení rizika Rozdělení majetku Návrh pro obnovitelnost Ověření všech vstupů CORE013 / Barbora Bühnová44 Bezpečnostní pokyny 1-3 ̶ Zakládat rozhodnutí na explicitní bezpečnostní politice ̶ Definujte bezpečnostní politiku organizace, která stanoví základní bezpečnostní požadavky, jež by měly platit pro všechny systémy organizace. ̶ Vyhněte se jedinému bodu selhání ̶ Zajistěte, aby k selhání zabezpečení mohlo dojít pouze v případě, že dojde k více než jednomu selhání bezpečnostních postupů. Mějte například ověřování založené na heslech a otázkách. ̶ Bezpečné selhání ̶ Pokud systémy z jakéhokoli důvodu selžou, zajistěte, aby k citlivým informacím neměli přístup neoprávnění uživatelé, i když nejsou k dispozici běžné bezpečnostní postupy. CORE013 / Barbora Bühnová45 Bezpečnostní pokyny 4-6 ̶ Vyvážení bezpečnosti a použitelnosti ̶ Snažte se vyhnout bezpečnostním postupům, které ztěžují používání systému. Někdy je nutné přijmout slabší zabezpečení, aby byl systém použitelnější. ̶ Zaznamenávání akcí uživatele ̶ Udržujte protokol uživatelských akcí, který lze analyzovat a zjistit, kdo co udělal. Pokud uživatelé o takovém záznamu vědí, je méně pravděpodobné, že se budou chovat nezodpovědně. ̶ Využití redundance a diverzity ke snížení rizika ̶ Uchovávejte více kopií dat a používejte různorodou infrastrukturu, aby zranitelnost infrastruktury nemohla být jediným bodem selhání. CORE013 / Barbora Bühnová46 Bezpečnostní pokyny 7-9 ̶ Rozdělení přístupu ̶ Uspořádejte systém tak, aby aktiva byla v oddělených oblastech a uživatelé měli přístup pouze k informacím, které potřebují, a ne ke všem systémovým informacím. ̶ Návrh pro obnovitelnost ̶ Navrhněte systém tak, aby zjednodušil obnovitelnost po úspěšném útoku. ̶ Ověření všech vstupů ̶ Zkontrolujte, zda jsou všechny vstupy v rozsahu, aby neočekávané vstupy nemohly způsobit problémy. CORE013 / Barbora Bühnová47 Schopnost přežití (Survivability) ̶ Schopnost přežití = schopnost systému poskytovat základní služby, i když je napaden nebo poté, co byla jeho část poškozena. ̶ Odolnost ̶ Předcházení problémům zabudováním schopností systému odolávat útokům. ̶ Detekce ̶ Odhalování problémů zabudováním funkcí do systému, které umožní odhalit útoky a selhání a vyhodnotit vzniklé škody. ̶ Důležitá role monitorování a zpracování událostí ̶ Zotavení ̶ Tolerování problémů zabudováním schopností do systému poskytovat služby, i když je napaden. CORE013 / Barbora Bühnová48 Real-life story - Hack of Ukraine’s Power Grid CORE013 / Barbora Bühnová / https://www.wired.com/2016/03/inside-cunning-unprecedented-hack-ukraines-power-grid/49 Real-life story - Hack of Ukraine’s Power Grid ̶ Příklad projektu, který selhal na všech úrovních. ̶ Nepoznali, že po dobu 6 měsíců byly sbírány přihlašovací údaje uživatelů. ̶ Když viděli, jak se jejich kurzory pohybují po obrazovce a vypínají rozvodny, nedokázali to zastavit. ̶ Nebyli schopni zajistit bezpečnost, dokonce i jejich vlastní záložní energie byla vypnuta a firmware smazán. ̶ Trvalo měsíce, než se z toho systém vzpamatoval. CORE013 / Barbora Bühnová50 POUŽITELNOST CORE013 / Barbora Bühnová51 Použitelnost ̶ Použitelnost se zabývá tím, jak snadno může uživatel provést požadovaný úkol a jakou podporu uživateli systém poskytuje. ̶ Lze ji rozdělit do následujících oblastí: ̶ Funkce výukového systému. ̶ Efektivní používání systému. ̶ Minimalizace dopadu chyb. ̶ Přizpůsobení systému potřebám uživatelů. ̶ Zvyšování důvěry a spokojenosti. ̶ Vždy dodržujte pokyny pro lidské rozhraní (HIG), pokud jsou k dispozici (HIG pro Windows, HIG pro Mac OS a další). CORE013 / Barbora Bühnová52 Jak systém udělat použitelnější? CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman53 Taktiky použitelnosti - Taktiky v době návrhu ̶ Oddělte uživatelské rozhraní od zbytku aplikace. Lokalizace očekávaných změn je důvodem pro sémantickou koherenci. ̶ Vzhledem k tomu, že se očekává, že se uživatelské rozhraní bude často měnit jak během vývoje, tak po nasazení, udržování kódu uživatelského rozhraní odděleně umožní lokalizovat jeho změny. CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman54 Taktiky použitelnosti - Taktiky spouštění ̶ Udržujte model úkolu. ̶ Model úlohy slouží k určení kontextu, aby systém měl představu o tom, o co se uživatel pokouší, a mohl mu poskytnout různé druhy pomoci. ̶ Udržujte model uživatele. ̶ Model určuje znalosti uživatele o systému, chování uživatele z hlediska očekávané doby odezvy a další aspekty specifické pro uživatele nebo třídu uživatelů. ̶ Udržujte model systému. ̶ Model určuje očekávané chování systému, aby bylo možné poskytnout uživateli vhodnou zpětnou vazbu. CORE013 / Barbora Bühnová55 KONFLIKTY KVALITY CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman56 Konflikty kvality ̶ V rámci komplexních systémů nelze nikdy dosáhnout atributů kvality izolovaně. ̶ Úspěch každého z nich bude mít vliv, někdy pozitivní a někdy negativní, na úspěchy ostatních. ̶ Například téměř každý atribut kvality negativně ovlivňuje výkonnost. ̶ Spolehlivost. Redundance spolu s hlasovacím schématem zpožďuje odezvu systému. ̶ Přenositelnost. Hlavní technikou pro dosažení přenositelného softwaru je izolace závislostí systému, která do jeho provádění vnáší režii. CORE013 / Barbora Bühnová57 Konflikty kvality ̶ Žádný systém nemůže být optimalizován pro všechny tyto vlastnosti. ̶ Plán kvality by proto měl definovat nejdůležitější atributy kvality vyvíjeného softwaru. CORE013 / Barbora Bühnová58 ROLE S VLIVEM NA KVALITU CORE013 / Barbora Bühnová59 Role s vlivem na kvalitu ̶ Udržovatelnost – softwarový vývojář, analytik ̶ Výkonnost – performance engineer ̶ Spolehlivost – tester, QA engineer ̶ Bezpečnost – penetration tester ̶ Použitelnost – UI/UX designer CORE013 / Barbora Bühnová60 CO NÁS ČEKÁ PŘÍŠTĚ CORE013 / Barbora Bühnová61 10. Provoz softwarových systémů ̶ Příprava infrastruktury ̶ Nasazení na infrastrukturu, po částech (releases), automatizovaně (CI/CD) ̶ Testovací provoz ̶ Zaškolení uživatelů ̶ Ostrý provoz ̶ Kontinuální rozvoj, opravování a vylepšování systému Domácí práce a příprava na příští přednášku ̶ Pročíst si články nalinkované z této prezentace