CORE013 / Barbora Bühnová1 Přednáška 9 Klíčové atributy kvality CORE013 Vývoj softwarových systémů: od myšlenky k funkčnímu řešení 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 příští přednášku ̶ Podívejte se na možnosti nástroje SONARQUBE ̶ Přijdejte se k nám na Den s průmyslovými patnery FI MU https://www.fi.muni.cz/for-partners/meeting-autumn2022.html.cs CORE013 / Barbora Bühnová3 VÝZNAMNOST 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 ekonomické prostředí, kaskádovité šíření problémů, nepředvídatelné dopady ̶ Nejistota ohledně důvěryhodnosti připojených zařízení ̶ Vysoce distribuované prostředí, více vstupních míst k zabezpečení, nekonzistence dat, nespolehlivé senzory, částečné poruchy. ̶ Nutnost zabezpečení proti dosud neexistujícím hrozbám CORE013 / Barbora Bühnová6 Ochrana proti dosud neexistujícím hrozbám ̶ 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í základních funkcí i při útoku/poruše, ̶ zotavení z útoku/poruchy, ̶ 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 ̶ Klíčovým cílem je předcházet technickému dluhu ̶ tj. č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 v budoucnu na nápravu CORE013 / Barbora Bühnová14 Kde je udržovatelnost důležitá? ̶ V systémech, které musí být funkční po mnoho let, nebo často mění nebo rozšiřují svou funkcionalitu ̶ 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 Taktiky modifikovatelnosti – předcházení lavinovým efektům (ripple effects) ̶ Lavinový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á / http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/10/ADT2.html18 Skrývání informací CORE013 / Barbora Bühnová / https://engineering.fb.com/2020/03/02/data-infrastructure/messenger/19 Real-life story - Rewriting the Messenger codebase CORE013 / Barbora Bühnová / https://engineering.fb.com/2020/03/02/data-infrastructure/messenger/20 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 funkcí limit, který nesmí svými nápady překročit. CORE013 / Barbora Bühnová21 VÝKONNOST CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman22 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á23 Kde je výkonnost 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á24 Jak systém udělat výkonnější? CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman25 Výkonnostní taktiky ̶ Zavedení souběžnosti. ̶ 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á26 SPOLEHLIVOST CORE013 / Barbora Bühnová27 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á28 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á29 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í. CORE013 / Barbora Bühnová30 Kde je spolehlivost důležitá? ̶ V kritických infrastrukturách a projektech, kde vyjdou chyby draho ̶ Například: ̶ Zdravotnictví ̶ řízení letecké dopravy ̶ Elektrárny ̶ vesmírné mise CORE013 / Barbora Bühnová31 Jak systém udělat spolehlivější? CORE013 / Barbora Bühnová32 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 verifikace a validace se používají k odhalení a odstranění chyb před 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á33 Redundance a rozmanitost ̶ Redundance ̶ Mějte k dispozici více než 1 verzi kritické součásti, abyste 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 diverzity 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á34 Dohledové 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ě ̶ Dohledové systémy jsou redundantní, protože obsahují monitorovací a řídicí funkce, které kopírují funkce řízeného softwaru. ̶ Dohledové 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/35 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/36 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á37 BEZPEČNOST CORE013 / Barbora Bühnová38 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á39 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: ̶ Confidentiality – 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. ̶ Integrity – Ohrožení integrity systému a jeho dat Může dojít k poškození nebo zničení softwaru nebo jeho dat. ̶ Availability – 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. CORE013 / Barbora Bühnová40 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 neštěstí. 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á41 Kde je bezpečnost 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á42 Jak systém udělat bezpečnější? CORE013 / Barbora Bühnová43 Návrh pro bezpečnost ̶ Při návrhu pro bezpečnost je třeba zvážit dva základní aspekty ̶ Ochrana – Jak by měl být systém organizován, aby bylo možné chránit aktiva před vnějším útokem? ̶ Distribuce – Jak by měly být rozděleny prostředky, 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á44 Bezpečnostní pokyny Bezpečnostní taktiky Zakládat 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á45 Bezpečnostní doporučení 1-3 ̶ Zakládat zabezpečení 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á46 Bezpečnostní doporučení 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á47 Bezpečnostní doporučení 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á48 Nouzový režim (Survivability) ̶ Nouzový režim = 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ů díky funkcím systému, které umožní odhalit útoky a selhání. ̶ Důležitá role monitorování a zpracování událostí ̶ Zotavení ̶ Zvládnutí problémů zabudováním schopností poskytovat služby i po napadení systému CORE013 / Barbora Bühnová49 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/50 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á51 POUŽITELNOST CORE013 / Barbora Bühnová52 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. ̶ 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á53 Jak systém udělat použitelnější? CORE013 / Barbora Bühnová / © Softwarová architektura v praxi L. Bass, P. Clements a R. Kazman54 Taktiky použitelnosti – viz uživatelská přívětivost ̶ 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ář, architekt, analytik ̶ Výkonnost – softwarový vývojář, performance engineer ̶ Spolehlivost – softwarový vývojář, tester, QA engineer ̶ Bezpečnost – softwarový vývojář, 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 odkázané z této prezentace