Úvod do softwarového inženýrství

Softwarové inženýrství se zabývá teoriemi, metodami a nástroji pro profesionální vývoj softwaru.

SW produkty

Generické produkty – prodávány všem zákazníkům, kteří si je přejí koupit (grafické progrmy, CAD software)

Customized products – vytvářeny na míru zákazníkovi (vestavěné systémy, systémy kontrolující dopravu)

Typy aplikací

Stand-alone applications, Embedded control systems, Batch processing systems, Entertainment systems, …

Diagramy UML

Proces vývoje softwaru

  1. specifikace – definice SW a omezení
  2. vývoj
  1. analýza a design
  2. implementace
  1. validace – dělá systém co má?
  2. evoluce – modifikace podle požadavků zákazníka a trhu

Modely

Vodopádový model (Waterfall model)

  1. plan-driven model
  2. sekvenční vývojový proces
  3. výhody:
  1. odstranění dříve nalezené chyby je levnější (jistota při dokončení každé fáze)
  2. stejný důraz na dokumentaci i zdrojový kód
  3. jednoduchost přístupu (strukturovaný přístup)
  4. vhodný pro projekty, které jsou stabilní (neměnné požadavky)
  1. zápory:
  1. považován za nevhodný pro praxi (nelze dovést jednu část k dokonalosti, aniž by začala práce na další)
  2. teprve v implementační fázi se může ukázat, že je těžké určitou funkcionalitu implementovat

Jiný zdroj

Pozitiva: Vytvořením zevrubné dokumentace se usnadňuje zapojení nových členů do týmu a snižuje závislost na jednotlivých řešitelích. Jednoduše manažersky uchopitelný.

Negativa: Vytváření podrobné dokumentace zabere kapacity, které by byly jinak využitelné. Odhalení chyby či změna v požadavcích v pozdní fázi je velmi nákladné a vyžaduje revizi všech ostatních kroků. Některé technologické limitace, požadavky či rizika nemusí být možné odhalit včas.

Inkrementální vývoj (Incremental development)

  1. rozdělení aplikace na menší celky, každá část probíhá samostatně
  2. výhody:
  1. jednodušší získání zpětné vazby od zákazníka (z dokončených částí)
  2. rychlejší doručení užitečného SW k zákazníkovi
  3. menší množství předělané analýzy a dokumentace v případě změn
  1. nevýhody:
  1. proces není viditelný
  2. po přidání nových inkremetů dochází k degradaci struktury (více času a peněz je věnováno na refactoring)

Reuse-oriented software engineering

  1. založen na systematickém znovupoužití a integraci existujících komponent

Modelování systému

  1. Model je abstraktní pohled na systém, který ignoruje detaily. Každý model prezentuje jiný pohled (perspektivu) na systém.
  2. Založeno na UML.
  3. Systémové modelování usnadňuje komunikaci mezi zákazníky a analytiky (funkcionality systému)

Perspektivy

  1. Externí perspektiva (external perspective) – modelování hranic systému, kontextu a prostředí systému.
  1. Use Case Diagram.
  1. Strukturální perspektiva (Structural perspective) – uspořádání systému, struktura dat zpracovávána systémem.
  1. Class diagram, Object diagram, Component diagram, Package diagram, Deployment diagram, Composite structure diagram.
  1. Interakce (Interaction perspective) – interakce mezi systémem a prostředím nebo mezi komponentami systému.
  1. Sequence diagram, Communication diagram, Interaction overview diagram, Timing diagram.
  1. Chování (Behavioral perspective) – dynamické chování systému a odpovědi na události.
  1. Activity diagram, State diagram.

Požadavky a jejich specifikace

Specifikace SW požadavků je začátkem procesu tvorby SW. Obecně se považuje za počáteční vstup k objektové analýze a k následnému objektovému návrhu.

Typy požadavků

Požadavky uživatelů (User requirements) – tvrzení v přirozeném jazyce a diagramy služeb poskytované systémem a omezení, pro zákazníky.

Požadavky systému (System requirements) – strukturovaný dokument s detailním popisem funkcí systému. Definují, co by mělo být součástí systému.

Funkční požadavky

Formulace toho, co by měl systém dělat. Popisují požadovanou funkci systému. (např. Bankomat bude ověřovat validitu platební karty. Bankomat vydá na každou kartu maximálně 1000 Kč za 24 hodin.)

  1. preciznost (precise) – pouze jedna interpretace
  2. kompletnost (complete) – měly by zahrnovat popis všech požadovaných vlastností
  3. konzistence (consistent) – neměly by být konflikty a rozpory v popisu

Nefunkční požadavky

Omezující podmínky uvalené na daný systém či vlastnost systému. (např. Řídicí systém bankomatu bude napsán v jazyce C++. Řídicí systém bankomatu ověří validitu PIN kódu maximálně do pěti sekund.)

  1. produktové požadavky (Product requirements) – specifikace toho, že produkt se musí chovat s určitou kvalitou (rychlost, spolehlivost)
  2. organizační požadavky (Organisational requirements) – organizační omezení a procedury (standarty)
  3. externí požadavky (External requirements) – vznikají z faktorů, které jsou k systému externí (legislativa, interoperabilita)

Nefunkční požadavky ovlivňují celou architekturu systému spíše než individuální komponenty. Jeden nefuknční požadavek může vytvářet mnoho dalších souvisejících funkčních požadavků.

Metriky – rychlost, velikost, spolehlivost, robustnost, přenositelnost, …

Dokumenty s požadavky

Obsahuje co by měl systém dělat, spíše než jak by to měl systém dělat. Informace v dokumentech závisí na typu přístupu k tvorbě systému (plan-driven vs. agile approach).

Přirozený jazyk (Natural language)

Expresivní, intuitivní, unverzální. Problémy – nejasnosti, zmatek (funkční a nefunkční požadavky mohou být pomíchany), slučování.

Strukturovaný přirozený jazyk (Structured natural language specification)

Založeny na tabulkách a formulářích.

Případy užití (Use Cases)

Identifikace aktérů a interakcí.

Analýza a získání požadavků

Spolupráce s uživateli systému. Hledáme:  aplikační doménu, služby poskytované systémem, výkon systému, HW omezení, …

Requirements prioritisation – MoSCoW criteria – Must have, Should have, Could have, Want to have.

Problémy – uživatelé často nevědí, co chtějí; různí uživatelé mohou mít konfliktní požadavky; mohou nastat změny požadavků během analýzy; organizační a politické faktory mohou ovlivňovat požadavky.

Interviewing

Formální a neformální interview. Typy: otevřená interview, uzavřená interview.

Etnografie

Sběr dat v rámci terénního výzkumu.

Validace požadavků

  1. Konzistence (Consistency)
  2. Kompletnost (Completeness)
  3. Realita (Realism)
  4. Ověritelnost (Verifiability)

Techniky

Prototypování, testování, Reviews – formální a neformální; kontrola srozumitelnosti (Comprehensibility), návaznosti (Traceability), přizpůsobivosti (Adaptability).

Správa požadavků je proces udržování a kontrolování změn.

Use Case Diagram

Diagram případu užití představuje způsob zachycení funkčních požadavků na sysém. Hledáme:

  1. hranice systému
  2. aktéry
  3. případy užití (specifikace případu užití, scénáře)
  4. vztahy/asociace

Aktéři

Role přidělené vnějším entitám, které přímo komunikují se systémem. Nejedná se o konkrétní osoby nebo objekty. Jeden objekt může zastávat více rolí současně.

Kdo používá daný systém? Jakou roli hrají při této interakci? Jaké další systémy spolupracují se systémem? Kdo získává/poskytuje informace? Dochází k nějaké události v pevně daném čase?

Případy užití

Popisují chování systému při interakci s externími aktéry. Akce, které aktér požaduje od systému. Případy užití začínají nějakou akcí aktéra, jsou psány z pohledu aktérů.

Jaké funkce požaduje aktér od systému? Ukládá a získává nějaké informace? Co se stane při změně stavu systému? Existují externí události, které ovlivňují daný systém?

Specifikace případů užití

Obsahuje název, jedinečný identifikátor, krátký popis, aktéry (hlavní, vedlejší), vstupní podmínky, hlavní scénář, výstupní podmínky, alternativní scénáře.

  1. Název: sloveso nebo slovesná fráze, UpperCamelCase.
  2. Popis: shrnutí cíle případu užití.
  3. Aktéři: Hlavní – ti, co spouštějí případ užití, vedlejší – jsou v interakci s případem užití po jeho spuštění.
  4. Vstupní podmínky – omezují stav systému předtím, než je možné případ užití spustit.
  5. Výstupní podmínky – omezují stav systému po skončení případu užití.
  6. Tok událostí – jednotlivé kroky případu užití. Vždy představují perfektní scénář.
  1. <number> The <something> <some action>
  2. Rozvětvení hlavního scénáře:
  1. IF
  2. FOR
  3. WHILE
  1. Alternativní scénáře – zachycují chyby, rozvětvení nebo přerušení hlavního scénáře.

Pokročilé modelování případů užití

Zobecnění aktéra

Vyčlenění chování, které je společné dvěma a více aktérům. Rodičovský aktér je obecnější než jeho potomci. Rodičovský aktér je často abstraktní. Používáme, jen pokud to zjednodušší model.

Zobecnění případů užití

Umožňuje funkce společné více případům užití vyčlenit do rodičovského případu užití. Odvozené případy užití dědí všechny vlastnosti od svých předků – aktéry, relace, vstupní a výstupní podmínky, tok událostí, … Odvozené případy užití mohou být doplněny o nové funkce a vlastnosti, mohou také překrývat zděděnou charakteristiku.

<<include>>

Relace <<include>> umožňuje kroky opakující se v několika tocích případů užití vyčlenit do samostatného případu užití, který bude moci zahrnout v případě potřeby do bázového případu užití.

  1. include (název případu užití)
  2. klient není úplný bez všech svých dodavatelů

<<extend>>

Relace <<extend>> přidává do existujícího případu užití nové chování. Bázový případ užití obsahuje místa rozšíření, která jsou umístěna v samostatné vrstvě překrývající hlavní scénář. Bázový případ užití je úplný i bez vkládaných segmentů (neví o nich vůbec nic).

Nefunkční požadavky

Product requirements

Dependability (spolehlivost)

Availability (dostupnost)

Pravděpodobnost, že systém bude fungovat a dodávat požadovanou službu. Souvisí s:

  1. Jak dlouho by mohl systém pracovat bez chyby.
  2. Jak dlouho může být systém mimo provoz.

Může být vyjádřena kvantitativně.

Reliability (spolehlivost)

Pravděpodobnost, že systém bude dodávat službu. Souvisí s:

  1. Jak je chyba detekována?
  2. Jak často může chyba nastat?
  3. Co se stane, když se objeví chyba?

Může být vyjádřena kvantitativně.

Je možné mít systém s nízkou spolehlivostí, který ale musí být dostupný.

Safety (bezpečnost)

Schopnost systému pracovat bez kritickén chyby.

Safety and reliability jsou podobné, ale ne stejné. Existují “unsafe reliable systems”.

Security (zabezpečení)

Schopnost systému bránit se náhodným nebo mířeným útokům. Ohrožení důvěrnosti systému a dat, integrity systému a dat, dostupnosti systému a dat.

Zabezpečení je nezbytný předpoklad pro dostupnost, spolehlivost a bezpečnost.

Performance (výkon)

Souvisí s časováním – odpovědi na události (přerušení, zprávy, požadavky).

Modifiability (modifikovatelnost)

Souvisí s cenou za změnu (cost of change). Co se může změnit? Kdy je změna provedena a kým?

Testability (testovatelnost)

Jak je snadné zjistit chybu pomocí testování?

Usability (použitelnost)

Jak je pro uživatele snadné provést požadovaný úkon a jaká je poskytována uživatelská podpora?

Organisational requirements

Development requirements

  1. programovací jazyk, vývojové prostředí
  2. process standarts – ISO 9001 core process
  3. time to market
  4. rollout schedule
  5. cost and benefit

Operational requirements

  1. platforma, kde bude aplikace spouštěna
  2. projected lifetime of the system

Environmental requirements

  1. integration with legacy systems (integrace s existujícím systémem)
  2. targeted market

External requirements

  1. regulatory (regulační) requirements
  2. etické požadavky
  3. legislativní požadavky

UML Activity Diagram

Diagramy aktivit lze používat k modelování mnoha různých procesů. Jsou objektově orientovanými vývojovými diagramy. Dobrý diagram aktivit popisuje jeden konkrétní aspekt chování systému. Často jsou připojeny k případům užití, třídám, rozhraním, komponentám, spolupracím, operacím.

Aktivity jsou sítěmi uzlů spojených hranami. Kategorie uzlů:

  1. akční uzly – nedělitelné jednotky práce uvnitř aktivity
  2. řídicí uzly – řídí postup uvnitř aktivity
  3. objektové uzly – zastupují objekty použité v rámci aktivity

Hrany reprezentují tok skrz aktivitu. Kategorie hran:

  1. řídicí hrany – zastupují postup řízení uvnitř aktivity
  2. objektové hrany – zastupují postup objektu uvnitř aktivity

Syntaxe

Tokeny

Tokeny postupují po síti a mohou představovat: postup řízení, objekt či určitá data.

Tokeny postupují od zdrojového k cílovému uzlu skrze hrany v závislosti na:

  1. výstupních podmínkách zdrojového uzlu,
  2. kontrolních podmínkách hrany,
  3. vstupních podmínkách cíle.

Oddíly aktivit (Activity partitions)

Jedná se o obecný způsob seskupování souvisejících akcí. Často představují jednotlivé případy užití při použití vztahů <<include>> a <<extend>>.

<<include>>

Základní i vložený případ užití mají své vlastní oddíly (plavecké dráhy).

<<extend>>

Pokud je bod rozšíření mezi Akce1 a Akce2, za Akce1 se vloží rozhodovací uzel, ze kterého se umožní jeden přechod do Akce2 a druhý přechod do rozšiřujícího případu užití. Po jeho ukončení se přejde do Akce2. Každý případ užití může být ve vlastní plavecké zóně.

Akční uzly

Jsou spouštěny, mají-li na všech svých vstupních hranách tokeny a jsou-li zároveň splněny všechny jejich vstupní podmínky. Po dokončení nabízejí akční uzly své tokeny simultánně na všech výstupech, jejichž podmínky jsou splněny.

Typy akčních uzlů

Řídicí uzly

Řídí postup v rámci aktivity.

Objektové uzly

Zastupují instance klasifikátoru.

Vstupní a výstupní hrany jsou cestami objektů – zastupují jejich postup. Výstupní hrany objektového uzlu soutěží o každý výstupní token. Objektové uzly se chovají jako vyrovnávací paměť. Mohou zastupovat objekty v určitém stavu (musí být konzistentní se stavovým automatem).

Parametry aktivit

Jsou to objektové uzly, které označují vstupy do aktivity nebo výstupy z nich. Jsou kresleny tak, aby překrývaly obklopující rámeček aktivity. Vstupní parametry mají jednu nebo více hran směřujících do aktivity. Výstupní parametry mají jednu nebo více hran směřujících z aktivity.

Sponky (pins)

Jsou to objektové uzly zastupující jeden vstup nebo jeden výstup akce nebo aktivity.

SW analýza a design

Analýza spočívá v tvorbě modelů, jež zachycují podstatné požadavky a charakteristické rysy požadovaného systému. Design kombinuje analytické modely s implementací. Implementace je proces realizace designu jako programu.

Proces zahrnuje aktivity jako: definování kontextu a modelů použití systému, načrtnutí architektury, identifikaci systémových procesů a entit, tvorbu modelu, specifikaci rozhraní pro komponenty a objekty, dokončení architektury.

Návrh architektury (architectural design) by měl začínat systémovou analýzu nebo končit design systému (často obojí).

Abstrakce

  1. Architecture in the small (analysis) – architektura individuálních programů.
  2. Architecture in the large (design) – architektura komplexních systémů, které zahrnují jiné systémy, programy a komponenty.

Systémová analýza

Identifikace systémových entit (objektové třídy v OO analýze), jejich rolí a vztahů.

Strukturovaná vs. objektově orientovaná analýza

Pohledy

  1. Orientován na funkce (Function oriented view) – systém je množina komunikujících funkcí.
  2. Orientován na data (Data oriented view) – hledání fundamentálních datových struktur v systému.
  3. Orientován na objekty (Object oriented view) – systém je množina interagujících objektů.

Strukturovaná analýza

Řízena pomocí Function oriented view v souladu s Data oriented view pomocí funkční dekompozice.

Objektově orientovaná analýza

Řízena pomocí Object oriented view.

Strukturovaná analýza a design

Rozdělění projektu na malé, dobře definované aktivity a definování pořadí a interakcí aktivit. Efektivní v projektech strukturovaných do malých částí.

Funkční dekompozice

Metody

  1. DeMarco: Structured Analysis and System Specification (SASS)
  2. Gane-Sarson: Logical Modelling (LM)
  3. Yourdon: Modern Structured Analysis (YMSA)
  1. Concentrates on the data and control flow of system processes and sub-processes.
  1. Structured Systems Analysis and Design Method (SSADM)
  1. Physical design, logical process design and logical data design.

Notace (Core notations of structured methods)

  1. Context diagram – model hranic a prostředí (boundary and environment).
  2. Data flow diagram – modelování systému jako sítě procesů.
  3. Entity relationship diagram – modelování dat.
  4. State diagram – stavy a akce, hlídání přechodu z jednoho stavu do druhého.

Příklad metody (Gane-Sarson)

  1. Definujeme systémový kontext a tvoříme iniciální Data flow diagram.
  2. Načrtneme datový model (ERD).
  3. Analyzujeme entity a vztahy, vytvoříme finální ERD.
  4. Předěláme DFD na základě ERD.
  5. Dekomponujeme logické procesy do procedurálních elementů.
  6. Specifikujeme detaily každého elementu.

Objektově orientovaná analýza a design

Modelování systému jako skupiny interagujících objektů. Každý objekt představuje entity a je charakterizován třídou, stavem a chováním.

Metody

  1. Jim Rumbaugh: Object Modelling Technique (OMT)
  2. Coad-Yourdon: Method for Object-Oriented Analysis (OOA)
  3. Jacobson: Object-Oriented Software Engineering (OOSE)
  4. Kruchten et al.: Rational Unified Process (RUP)
  1. Risk-driven iterations, component-based, with continuous quality verification and change management.
  1. Booch-Jacobson-Rumbaugh: Unified Process (UP)
  1. Simplified non-commercial version of RUP maintained by Object Management Group (OMG).

UML notace

  1. External perspective – Use case diagram.
  2. Structural perspective – Class diagram, Object diagram, Component diagram, Package diagram, Deployment diagram, Composite structure diagram.
  3. Interaction perspective – Sequence diagram, Communication diagram, Interaction overview diagram, Timing diagram.
  4. Behavioral perspective – Activity diagram, State diagram.

Příklad metody UP

  1. Požadavky – hranice, aktéři a požadavky; Use Case diagram.
  2. Analýza – hledání analytických tříd, vztahů, dědičnosti a polymorfismu pomocí Class diagramu; realizace Use Case pomocí Interaction a Activity diagramu.
  3. Design – design tříd, rozhraní a komponent vedoucích k přepracovanému Class diagramu a Component diagramu; detailní rozpracování Use Case pomocí Interaction a State diagramu.

Objektově orientovaná analýza

Tvorba analytického modelu – co systém dělá, ne jak do dělá. Identifikujeme analytické třídy a realizaci případů užití. Každý objekt je instancí třídy.

Objekty

Soudržné jednotky, v nichž se snoubí data s funkčností. Objekt zapouzdřuje data. Všechny objekty mají: 

  1. identitu (identity) – jedinečná identifikace existence objektu, jedinečný odkaz na specifický objekt
  2. stav (state) – smysluplná množina hodnot atributů objektu v určitém čase
  3. chování (behaviour) – vyjádření služeb objektu poskytovaných dalším objektům

Zapouzdření

Jedná se o ukrývání dat uvnitř objektu poskytující možnost manipulace s nimi prostřednictvím funkcí poskytovaných příslušným objektem.

Předávání zpráv

Notace

Třídy a objekty

Objekty jsou instancemi tříd. Tvorba instance je proces, v němž jako šablonu k tvorbě nového objektu používáme třídu.

K tvorbě nových objektů používáme konstruktory. Ty nastavují nebo inicializují objekty. Mají platnost třídy.

Notace třídy

Viditelnost (Visibility)

  1. public (+) – jakýkoliv prvek s přístupem k třídě může používat jakékoliv její vlastnosti a veřejné funkce
  2. private (-) – přístup mají jen operace uvnitř třídy
  3. protected (#) – přístup mají jen operace uvnitř třídy a potomci
  4. package (~) – přístup mají prvky jen z daného balíčku

Násobnost (Multiplicity)

Poskytuje přesný a výstižný způsob vyjádření určitých obchodních omezení vztahující se k počtu předmětů účastnících se relace.

Rozsah platnosti (Scope)

Atributy a operace instance se vztahují pouze ke specifickým objektům. Operace instance mohou používat další atributy nebo operace instance. Operace instance mohou používat všechny atributy a operace mající platnost třídy. Atributy a operace se vztahují na celou třídu objektů.

Analytické třídy

Analytické třídy vyjadřují velmi přesné definované zobecnění entity problémové domény. Měly by být jednoznačným způsobem mapovány na pojem používaný ve skutečném světě.

Analytický model obsahuje pouze analytické třídy.

Dobrá analytické třída

  1. v názvu se zrcadlí účel
  1. jedná se o výlučné zobecnění, které modeluje jeden specifický prvek problémové domény
  2. je mapována na jasně a zřetelně definovanou vlastnost problémové domény
  3. vlastní malou, jasně definovanou množinu odpovědnosti
  4. třída je vysoce soudržná – všechny charakteristické vlastnosti třídy by měly pomáhat v určení jejího účelu
  5. vyznačuje se malým počtem vazeb na okolní třídy

Špatná analytická třída

  1. je to funktoid – třída s jednou operací
  2. je to “všemohoucí třída”
  3. obsahuje široce rozvětvený strom dědičnosti
  4. je málo soudržná
  5. má úzké vazby na mnoho dalších tříd

Analýza podstatných jmen a sloves

Hledáme všechna podstatná jména a spojení podstatných jmen = kandidáti na třídy a atributy. Hledáme slovesa = uchazeči o místa odpovědností nebo operací.

Metoda CRC štítků

Brainstorming + analýza informací. Každý lísteček je rozdělen na tři oddíly: oddíl třídy (název), odpovědnosti, spolupracovníci.

Vztahy mezi objekty a třídami

Vztah je spojení mezi elementy.

Spojení (links)

Ke spojení dochází, pokud jeden objekt obsahuje odkaz na další objekt. Objekty uskutečňují chvoání systému díky spolupráci.

Objektové diagramy

Ukazují objekty a jejich vzájemná spojení v určitém okamžiku. Jsou to snímky běžícího objektově orientovaného systému. Objekty mohou vůči sobě hrát různé role.

Asociace

Sémantické vazby mezi třídami. Je-li mezi dvěma objekty spojení, musí rovněž existovat asociace. Spojení jsou instancemi asociací.

Syntaxe

Asociace mohou mít názvy, názvy rolí, násobnost, navigovatelnost.

Násobnost

Označuje interval objektů, které lze zahrnout do relace v určitém okamžiku. Znamená, že objekty mohou vznikat a zanikat, ovšem omezující je počet aktuálně existujících objektů v daném okamžiku.

Reflexivní asociace

Hierarchie a sítě

Průchodnost (Navigability)

Vyjadřuje, že relaci lze řídit ve směru šipky.

Asociace a atributy

Asociační třídy

Asociační třída je asociací, která má vlastnost třídy.

Asociace s kvalifikátorem

Jendá se o redukci asociací typu M:N na asociace typu N:1 tím, že se specifikuje jedinečný objekt cílové sady. Slouží k výběru člena z cílové množiny.

Závislosti

Závislost je ralce mezi dvěma prvky, v níž se změna jednoho prvku (dodavatele) promítá do druhého prvku (klienta). Klient je svým způsobem na dodavateli závislý.

  1. usage – klient používá nějaké služby dodavatele k implementaci vlastního chování
  2. abstraction – dodavatel je více abstraktní než klient
  3. permission – dodavatel garantuje nějaký typ povolení k přístupu k vlasntímu obsahu, dodavatel kontroluje a limituje přístup ke svému obsahu

Usage dependencies

<<use>>

Klient používá dodavatele jako argument, návratovou hodnotu nebo jako prvek vlastní implementace (univerzální použití).

<<call>>

Klientská operace volá dodavatelskou operaci.

<<parameter>>

Dodavatel je argumentem nebo návratovou hodnotou jedné z klientských metod.

<<send>>

Klient odesílá dodavatele (jenž musí být signálem) k určitému cíli.

<<instantiate>>

Klient je instancí dodavatele.

Abstraction dependencies

Modelují závislost mezi předměty, které jsou na různých stupních abstrakce.

<<trace>>

Klient je historickým vývojem dodavatele.

<<substitute>>

Klient dodavatele může být za běhu programu nahrazen.

<<refine>>

Klient je další verzí dodavatele.

<<derive>>

Klient může být odvozen od dodavatele.

Permission dependencies

<<access>>

Závislost mezi balíčky, díky níž může klientský balíček používat veškerý obsah dodavatelského balíčku. Jmenné prostory zůstávají odděleny.

<<import>>

Závislost mezi balíčky, v níž může klientský balíček používat veškerý veřejný obsah dodavatelského balíčku. Jmenné prostory jsou sloučeny.

<<permit>>

Řízené narušení zapouzdření, kdy může klient používat soukromé členy dodavatele.

Dědičnost a polymorfismus

Generalizace

Vztah mezi více a méně specifickým elementem. Konkrétnější předměty jsou důsledně konzistentní s obecnějšími předměty. Obecnější předmět lze nahradit konkrétnějším typem.

Dědičnost tříd

Potomci dědí:

  1. atributy,
  2. operace,
  3. relace,
  4. omezení.

Překrývání

Potomek definuje novou operaci se stejnou signaturou, jakou má operace předka.

Abstraktní operace a třídy

Abstraktní operace slouží jako držitelé prostoru. Abstraktní operace nemá implementaci. Všichni potomci musí implementovat všechny zděděné abstraktní operace.

Abstraktní třída obsahuje alespoň jednu abstraktní operaci. Abstraktní třídy neumožňují tvorbu vlastních instancí.

Polymorfismus

Mnohotvárnost. Umožňuje návrh systémů, jež využívají abstraktní třídu, kterou pak za běhu programu nahradí jejími konkrétními potomky.

Polymorfní operace mají více implementací. Různé třídy mohou implementovat stejnou polymorfní operaci jiným způsobem. Polymorfismus umožňuje instancím různých tříd reagovat na stejnou zprávu odlišným způsobem.

Diagramy interakce (Interaction Diagrams)

  1. Sekvenční diagramy – zdůrazňují časovou posloupnost odeslaných zpráv.
  2. Komunikační diagramy – zdůrazňují časovou posloupnost odeslaných zpráv.
  3. Zjednodušený diagram interakcí – zdůrazňuje vztahy mezi interakcemi.
  4. Diagramy časování – zdůrazňují časové aspekty interakcí.

Čáry života (Lifelines)

Čára života zastupuje účastníka interakce. Má jméno, selektor a typ. Musí být jednoznačně identifikovatelná jménem, typem nebo obojím.

Zprávy (Messages)

Zastupují určitý druh komunikace mezi dvěma čárami života.

Sekvenční diagram (Sequence diagram)

Čas běží shora dolů, čáry života jsou vedeny zleva doprava.

Syntaxe

Aktivace

Invarianty a omezení stavu

Kombinované fragmenty

Operátory

Komunikační diagram

Zdůrazňují strukturální aspekty interakce.

Iterace

Větvení

Diagramy časování

Modelování systémů pracujících v reálném čase.

Strukturovaná analýza

Yourdon Modern Structured Analysis (YMSA)

Model prostředí (environment model)

Kontextový diagram je speciálním případem data flow diagramu obsahující jeden proces, který reprezentuje celý systém. Zdůrazňuje:

  1. terminators – lidé a systémy komunikující se systémem
  2. data z prostředí by měla být zpracována
  3. data jsou produkována systémem a odesílána do prostředí
  4. data jsou sdílena systémem a terminátory
  5. hranici systému

Příklad kontextového diagramu

Model chování (behavioral model)

Specifikuje tok dat modelovaným systémem. Ukazuje, jaký druh informací bude vstupem a výstupem systému, kudy budou data putovat a kde budou uložena. Nenese informaci o časování procesů nebo zda budou procesy paralelní či sekvenční.

Data flow diagram

Obsahuje procesy, toky dat, datová úložiště a terminátory. Jedná se o grafickou reprezentaci systému jako sítě procesů, které představují systémové funkce a komunikují skrz data.

Proces – část systému, která převádí vstupy na výstupy. Tok dat – modeluje cestu přesunu dat z jednoho systému do druhého. Datová úložiště – modelují statickou kolekci dat, která je sdílena více procesy probíhajícími v různém čase. Terminátory– představují externí entitu komunikující se systémem.

Top-down and bottom-up DFD balancing

Datové modelování

Definuje statické datové struktury, vztahy a atributy. Vzhledem k DFD je tato metoda více stabilní a nese více vhodných informací.

ERD model – představuje systémové entity (abstaktní i konkrétní).

Entity Relationship Diagram (ERD)

Entita je cokoliv, co chceme o datech ukládat. Musí být identifikovatelná – odlišná od ostatních, potřebná (needed) – má roli v systému. Jsou popsány atributy. Množina entit je množina obsahující entity stejného typu.

Entity se vyskytují v určitých vztazích. Množina vztahů je množina obsahující vztahy stejného typu.

Atribut je fakt, detail, vlastnost entity. Typ atributu je typ domény atributu.

Relationship-type degree

Kardinalita

  1. 1:1 (one to one)
  2. 1:n (one to many)
  3. m:n (many to many)

ERD modelování

  1. Initial ERD – analýza domény, identifikace entit
  2. Detailed ERD – předefinování entit, identifikace atributů
  3. Identifikace chybějících a nadbytečných entit – entity s jedním identifikátorem, entitní množiny s jedním prvkem, asociační entity
  4. Kontrola konzistence a úplnosti

Relační databáze (založené na ERD)

  1. Zjištění účelu databáze.
  2. Hledání a organizace informací.
  3. Specifikace primárních klíčů.
  4. Aplikování normalizačních pravidel.
  5. Přepracování designu.

Entity a klíče

  1. Jednoznačná identifikace – každá entita je identifikovatelná klíčem.
  2. Neredundance – všechny informace obsažené v klíči jsou potřebné.
  3. Kandidátní klíč – Více kombinací atributů, které jednoznačně určují entitu.
  4. Primární klíč – vybraný kandidátní klíč.

Normalizace

1. NF

Relace je v první normální formě, pokud každý její atribut obsahuje jen atomické hodnoty.

2. NF

Relace se nachází v druhé normální formě, jestliže je v první normální formě a každý neklíčový atribut je plně závislý na primárním klíči, a to na celém klíči a nejen na nějaké jeho podmnožině.

3. NF

V této formě se nachází tabulka, splňuje-li předchází dvě formy a žádný z jejich atributů není tranzitivně závislý na klíči. Jiné vyjádření téhož říká, že relace je v 3.NF, pokud je ve 2.NF a všechny neklíčové atributy jsou navzájem nezávislé.

4. NF

Odstraňuje podmíněné funkční závislosti. Tabulka je ve čtvrté normální formě, pokud popisuje pouze příčinnou souvislost (jeden fakt).

Funkční závislost

Funkční závislosti si lze představit jako tvrzení o reálném světě. Například plat zaměstnance závisí na tom, jakou vykonává funkci, tj. plat závisí na funkci, zapisujeme FUNKCE->PLAT.

Triviální funkční závislost – závislost atributu na vlastní nadmnožině. Plná funkční závislost – atribut je závislý na X a není závislý na žádné podmnožině X.

http://is.muni.cz/el/1433/podzim2012/PB007/um/35424437/35424457/pb007-cvicenie-07.pdf

ERD vs. UML Class Diagram

Class diagram

Modeluje strukturu a chování systému – atributy a operace. Obsahuje více různých typů vztahů – asociace, agregace, kompozice, … Je lépe mapovatelný na reálný svět.

ER model

Modeluje pouze strukturální pohled na data a malou množinu vztahů. Lépe mapovatelný na databázové tabulky. Umožňuje modelovat primární a cizí klíče a může být normalizován (zjednodušení manipulace s daty).

Jedna třída může být mapována na více než jednu entitu nebo více tříd může být mapováno na více entit. Ne všechny třídy musí být obsaženy v ERD modelu.

ERD je orientován na data a je persistence-specific. Class diagram je zaměřen i na operace a je persistence independent.

Design

Rozhodování o tom, jak budou systémové fuknce implementovány a jak budou zajištěny nefunkční požadavky.

Design model – obsahuje návrhové podsystémy, návrh realizace případů užití, rozhraní, návrhové třídy a první verzi diagramu nasazení. V OO modelu mají všechny atributy typ, viditelnost a výchozí hodnoty. Operace mají návratový typ a seznam parametrů.

Analysis vs. design model – design model může obsahovat 10 krát až 100 krát více tříd. Oba modely potřebujeme pokud se jedná o velký systém (více než 200 tříd), bude dlouho používán, je to strategický systém. Design model postačuje, pokud se jedná o malý systém, má krátkou životnost, nejedná se o strategický systém.

Používáme návrhové vzory. Jedná se o znovupoužití abstraktních znalostí o problému a jeho řešení.

The Observer pattern (příklad)

  1. Name: Observer.
  2. Description: Separates the display of object state from the object itself.
  3. Problem description: Used when multiple displays of state are needed.
  4. Solution description: See slide with UML description.
  5. Consequences: Optimisations to enhance display performance are impractical.

Software dependability

Fault avoidance

Vývoj probíhá tak, že se vyhýbáme lidským chybám a systémové chyby jsou minimalizovány. Vývoj je organizován tak, že chyby jsou detekovány a opraveny před dodáním systému zákazníkovi.

Fault detection

Verifikační a validační techniky, které slouží k odhalení a odstranění chyb před nasazením systému.

Taktiky: Ping/echo, heartbeat (komponenta periodicky produkuje hearbeat a jiná komponenta ji poslouchá), exceptions.

Fault tolerance

Systém je navržen tak, že chyby v SW nepovedou k selhání systému. Systém může pokračovat v operaci i v případě selhání SW.

  1. Nadbytečnost (Redundancy) – udržování více než jedné verze komponenty.
  2. Rozmanitost (Diversity) –poskytování stejné funkcionality rozdílnými způsoby.

Přidání nadbytečnosti a rozmanitosti zvyšuje komplexitu a může zvyšuje riziko výskytu chyb. Dependable system architecture jsou založeny na nabytečnosti a rozmanitosti (řízení letového provozu, telekomunikační systémy 24/7).

Taktiky: Voting; Active redundancy (hot restart) – všechny komponenty odpovídají na události paralelně, je použita pouze jedna odpověď; Passive redundancy (warm restart) – jedna komponenta odpovídá na události a informuje ostatní komponenty; Spare – náhradní komponenta může nahradit mnoho jiných chybných komponent; Shadow operation – chybná komponenta běží po krátkou dobu v tzv. shadow mode, dokud není nahrazena; Checkpoint/rollback.

N-version programming pattern – kombinuje různé programovací vzory.

Self-monitoring architectures – multi-channel architecture s rozdílnými SW a HW v každém kanále.

Protection systems – speciální systémy, které jsou spojeny s jinými kontrolními systémy a provádějí pohotovostní akce při chybě systému.

Dependable programming – fault avoidance, fault detection, fault tolerance.

Design for Security

Architectural design

  1. Protection – jak je systém organizován, aby kritické komponenty byly chráněny před externím útokem?
  2. Distribution – jak je systém distribuován, aby v případě úspěšného útoku byly následky minimalizovány?

Pokud jsou části distribuovány, je nákladnější je chránit. Pokud jsou části chráněny, použitelnost a výkonnost mohou být kompromitovány.

Protection

Platform-level protection, Application-level protection, Record-level protection = layered protection architecture.

Distribution

Útok nemusí vést ke kompletní ztrátě služeb systému. Každá platforma má odlišný způsob ochrany. Distribution je důležitá, pokud je zde risk DoS útoku.

Taktiky

Design guidlines

  1. Base decisions on an explicit security policy.
  2. Avoid a single point of failure.
  3. Fail securely.
  4. Balance security and usability.
  5. Log user actions.
  6. Use redundancy and diversity to reduce risk.
  7. Validate all inputs.
  8. Compartmentalize your assets.
  9. Design for deployment (rozestavení).
  10. Design for recoverability.

System survivability

Schopnost systému dodávat služby i v případě útoku nebo zničení části systému.

Strategie – odolnost (resistance), rozpoznání (recognition), obnova (recovery).

Design for Performance, Modifiability, Testability and Usability

Performance tactics

  1. Resource demand (poptávka) – redukování zdrojů, redukování množství událostí, kontrola použití zdrojů.
  2. Resource management – souběžnot, udržování kopií, zvýšení dostupných zdrojů.
  3. Resource arbitration – výběr optimální plánovací strategie, priorita přiřazování, dispečink.

Modifiability tactics

  1. Localize modifications – udržování soudržnosti, generalizace modulů, limitování možných nastavení.
  2. Prevent ripple (dominový) effects (nutnost změn modulů, kterých se změna přímo netýká) – ukrytí informací, údržba existujících rozhraní, omezení komunikačních cest, použití zprostředkovatele.
  3. Defer binding time (odložení, vazba) – registrace za běhu, konfigurační soubory, polymorfismus, nahrazenín komponent, dodržování stanovených protokolů.

Testability tactics

  1. Manage input/output – record/playback, oddělění rozhraní a implementace, specializace rozhraní na testování.
  2. Internal monitoring – vestavěné monitorování.

Usability tactics

  1. Design-time tactics – oddělění uživatelského rozhraní od zbytku aplikace.
  2. Runtime tactics – údržba modelu úkolů, údržba modelu uživatelů, údržba modelu systému.

Quality conflicts

Není možné, aby byl každý systém optimalizován pro všechny tyto atributy. Jeden atribut může negativně ovlivnit jiný.

UML Class Diagram in Design

Design classes jsou třídy, jejichž specifikace je v takovém stavu, že mohou být implementovány. Návrhové třídy lze získat z problémové domény nebo z domény řešení.

Návrhové třídy obsahují kompletní specifikaci:

  1. kompletní sadu atributů včetně názvu, typů, nepovinně implicitní hodnoty, typu viditelnosti;
  2. metody včetně názvu, názvu a typu každého argumentu, hodnot nepovinných argumentů, návratového typu, typu viditelnosti.

Dobře utvořené návrhové třídy:

  1. veřejné metody třídy definují dohodu mezi třídou a jejími klienty;
  2. úplnost je podmíněna tím, zda třída poskytuje klientům vše, co od ní očekávají;
  3. dostatečnost naopak slouží k ujištění, že všechny metody třídy jsou zcela zaměřeny na realizaci zamýšleného účelu třídy;
  4. soběstačnost;
  5. jednoduchost – služby by měly být nedělitelné, jednoduché a jedinečné;
  6. vysoká soudržnost – každá třída by měla jednu definovanou abstrakci zachycovat pomocí minimální množiny vlastností;
  7. minimalizace vazeb – třída by měla být závislá na co nejmenším počtu tříd, třídy by měly být propojeny, pouze pokud je mezi nimi opravdu sémantický vztah.

Agregace vs. dědičnost

Dědičnost určuje trvalý vztah mezi objekty, není možné změnit třídu objektu za běhu. Dědičnost se používá, pokud se jedná o vztah je speciálním druhem … Agregace se používá pro vztah roli, kterou hraje …

Šablony

Používá je jen jazyk C++. Umožňují tvorbu parametrizovatelných tříd.

Agregace a kompozice

Agregace

Agregace je relace typu součást/celek. V tomto typu relace používá jeden objekt (celek) služby dalšího objektu (součást). Celek bývá dominantní a řídí chod relace, zatímco součást obvykle pouze poskytuje služby a reaguje na požadavky celku.

  1. Celek občas existuje nezávisle na součástech, jindy je na nich závislý.
  2. Součásti mohou existovat nezávisle na celku.
  3. Chybí-li určité součásti, je celek v jistém smyslu neúplný.
  4. Součást může být sdílena více celky.

Agregace je tranzitivní. Agregace je asymetrická. Objekt nemůže být nikdy částí sama sebe.

Kompozice

Kompozice je silnější formou agregace a má podobnou sémantiku (s většími omezeními). Jedná se o relaci typu součást/celek, která je přechodná a asymetrická.

Klíčovým rozdílem je to, že součásti nemohou existovat mimo celek. V tomto typu relaci navíc patří každá součást jen jedinému celku.

  1. Součásti patří jen a pouze jednomu celku.
  2. Celek nese výhradní odpovědnost za použití všech svých součástí – znamená to odpovědnost za jejich tvorbu a zničení.
  3. Za předpokladu, že odpovědnost součásti přejde na jiný objekt, může celek součást uvolnit.
  4. Je-li celek zničen, musí zničit rovněž všechny svoje součásti, nebo převést odpovědnost za ně nějakému dalšímu objektu.

Revize asociací 1:1

Revize asociací M:1

Revize asociací 1:M

Rozklad asociací M:N


Rozklad asociačních tříd

Rozklad obousměrných asociací


Architecture Design

Architectural patterns

The Model-View-Controller (MVC) pattern

The Layered architecture pattern


The Repository architecture pattern

The Client-server architecture pattern


The Pipe and filter pattern

Typy aplikací

  1. Data processing applications – aplikace řízené daty, které jsou produkovány v dávkách bez zásahu uživatele.
  2. Transaction processing applications – Data-centred aplikace, které řídí požadavky a aktualizují informace v systémové databázi.
  3. Event processing systems – aplikace, kde systémové akce závisí na interpretaci událostí ze systémového prostředí.
  4. Language processing systems – záměry uživatelů jsou specifikovány ve formálním jazyce, který je zpracován a interpretován systémem.

Implementace

Cílem je převedení návrhového modelu do spustitelného systému. Zahrnuje kód, UML Component diagrams a UML Depolyment diagrams.

Zaměření není na programování (i když je také důležitou součástí), ale na jiné implementační problémy.

Reuse

Tvorba SW pomocí existujících komponent.

  1. The abstraction level – SW není znovu používán přímo, ale využívá předchozích znalostí o systému.
  2. The object level – přímé znovu použití objektů z knihovny (ne přímo psaní kódu).
  3. The component level – komponenty jsou kolekcemi objektů a tříd, které jsou znovu použity v systému.
  4. The system level – znovu použití celého systému.

Cena znovu použití – cena adaptování a konfigurace systému reflektuje požadavky vytvářeného systému.

Configuration management

Obecný proces údržby a změny SW.

  1. Správa verzí (version management) – sledování různých verzí systému.
  2. Integrace systému (system integration) – podpora pomáhá definovat jaká verze je použita.
  3. Sledování problému (problem tracking) – možnost reportovat chyby.

Host-target development

Spousta SW je vytvářena na jednom počítači, ale je spuštěna na jiných strojích. Mluvíme o vývojové platformě a platformě pro spuštění.

Nástroje – integrovaný compiler, language debugging system, grafické nástroje pro tvorbu UML, testovací nástroje, project suppor tools.

Integrated development environments (IDEs)

Množina nástrojů, které podporují různé aspekty tvorby SW.

Open source development

  1. GNU General Public Licence (GPL) – pokud použijeme SW pod touto licencí, musí být náš SW také open source.
  2. GNU Lesser General Public Licence (LGPL) – lze psát komponenty, které mají vztah k open source kódu bez publikování kódu těchto komponent.
  3. The Berkley Standard Distribution Licence (BSD) – nikdo není nucen publikovat jakékoliv změny kódu a kód lze zahrnout i do systému, které jsou prodávány.

Implementation good practices

Kontrola viditelnosti informace

Programová komponenta by měla mít přístup k datům, které potřebuje k implementaci.

Kontrola platnosti vstupů

Kontrola rozsahu, velikosti (např. délka uživatelského jména), reprezentace (jméno nezahrnuje číslice), přiměřenost.

Poskytování handleru pro všechny vyjímky

Vyjímka je programová chyba nebo neočekávaná událost. Umožníme zacházet s vyjímkamy bez další kontroly.

Minimize the use of error-prone (nachylný) constructs

Nepodmíněná tvrzení, čísla s pohyblivou desetinnou čárkou, pointery, dynamická alokace paměti, paralelismus, rekurze, přerušení, dědičnost, aliasing, neohraničená pole, zpracování defaultního vsutpu.

Poskytnutí možnosti restartu

Pokud nastane chyba, uživatel nemusí předělávat vše znovu.

Kontrola hranice pole

Zahrnutí timeoutu při volání externích komponent

Pokud za určenou dobu nedostane systém odpověď, měl by pak předpokládat, že nastala chyba.

Pojmenování konstant, které představují hodnoty reálného světa

Použití pojmenování spíše než použití jejich numerických hodnot.

UML Packages

Balíček je mechanismus jazyka UML pro seskupování předmětů.

  1. Seskupují sémanticky příbuzné prvky.
  2. Vytvářejí sémantické hranice uvnitř systému.
  3. Poskytují jednotky pro správu konfigurace.
  4. Při návrhu poskytují jednotky pro souběžnou práci.
  5. Poskytují zapouzdřené jmenné prostory.

Mohou obsahovat případy užití, analytické třídy, realizace případů užití nebo analytické balíčky.

Vnořené balíčky

  1. Vnitřní balíček vidí všechny veřejné členy vnějšího balíčku.
  2. Vnější balíček nevidí žádné členy vnitřního balíčku, pokud na nich není explicitně závislý.

Závislosti

Cyklické závislosti

UML Component Diagram

Diagram komponent zobrazuje způsob (hierarchického) rozdělení systému na samostatné části a komunikační vztahy mezi nimi, čímž definuje architekturu systému.

Je tvořen:

  1. komponentami – fyzické nebo logické, navenek komunikují přes rozhraní, jsou vnitřně soudržné;
  2. rozhraními – rozhraní pro komunkaci mezi komponentami;
  3. vztahy mezi rozhraními.

Příklad

Stereotypy komponent

Rozhraní

Rozhraní umožňují návrh zaměřený na dohodu, nikoliv na specifickou implementaci. Rozhraní odděluje specifikaci od implementace. Realizující klasifikátor má za všechny funkce následující odpovědnosti:

Výhody

  1. Pokud modelujeme třídy, navrhujeme specifickou implementaci.
  2. Pokud modelujeme rozhraní, modelujeme kontrakt, který může být realizován různými implementacemi (třídami).

Nevýhody

  1. Přidávají flexibilitu, která může vést ke složitosti.
  2. Mnoho rozhraní dělá systém příliš flexibilní a těžce pochopitelný.

UML Deployment Diagram

Umožňují modelovat distribuci softwarového systému na fyzickém hardwaru.

Základní prvky

  1. Uzly (nodes) – výpočetní zdroje, na které budou umístěné jednotlivé části systému.
  2. Relace – typy spojení mezi uzly.
  3. Komponenty – typy komponent nasazených na určité uzly.

Uzel

Vyjadřuje typ výpočetního prostředku.

  1. <<device>> – typ fyzického zařízení (PC, Sun Fire, ...).
  2. <<execution environment>> – typ prostředí zpracování SW (Apache, ...).

Instance uzlu vyjadřuje konkrétní výpočetní prostředek.

Artefakty

Artefakt je specifikací něčeho skutečného, například spustitelného souboru.

Patří sem zdrojové soubory, spustitelné soubory, skripty, databázové tabulky, dokumenty, výstupy vývojového procesu.

Příklad

Design uživatelského rozhraní

Human-computer interaction (HCI)

HCI je obor, který zkoumá, jak uživatelé interagují s počítačovými systémy. Zahrnuje jak umění, tak vědu. User interface design je zaměřen na design systému s ohledem na uživatelské zkušenosti a interakci.

User-centered design and development

Hlavní principy:

  1. Aktivní účast uživatelů.
  2. Vhodné přidělení funkcí mezi systémem a uživatelem.
  3. Opakování návrhových řešení.
  4. Multidisciplinární týmy.

Aktivity:

  1. Porozumění a specifikace souvislosti použití.
  2. Specifikace požadavků.
  3. Produkce návrhových řešení (prototyp).
  4. Vyhodnocení designu.

Vývojáři by neměli navrhovat rozhraní, protože jsou více zaměřeni na kvalitu než na použitelnost.

  1. WIMP paradigm – Windows, Icons, Menus, Pointing devices.
  2. Usability – efektivní, pochopitelné a uspokojující rozhraní.
  3. User Experience.
  4. Look and Feel.
  5. Human Interface Guidelines.

Lidské limity

  1. Fitts’ law (1954) – model pohybu, předpovídá čas potřebný k dokončení cíle.
  2. Hick's law (1953) – předpovídá čas potřebný k výběru jedné položky ze seznamu.

Krátkodobá paměť – pravidlo 7+2.

Návrh dobrého rozhraní

Crap (constrast, repetition, alignment, proximity = sdružování).

Fundamental UI design principles (by Apple)

  1. Metafory – využití znalostí o světě (složka pro organizaci dokumentů).
  2. Mental model.
  3. Explicitní a implicitní akce.
  4. Přímá manipulace – drag and drop.
  5. See and point.
  6. User control.
  7. Feedback and communications.
  8. Konzistence.
  9. WYSIWYG.
  10. Shovívavost.
  11. Vnímaná stabilita.
  12. Estetická integrita.

Prototypování

Wireframes – první náčrtky. Mockups – modely pro demonstraci a vyhodnocení. Prototypes – částečně fungující příklady softwaru.

Vyhodnocení návrhu

Techniky – interview, testování použitelnosti (kvantitativní, kvalitativní), oborová studie.

Přímé pozorování uživatele – kombinace s kvalitativním a kvantitativním měřením.

Eye Tracker – používané v marketingu.

UML State Diagram

Stavové automaty modelují dynamické chování reaktivního automatu. Diagramy stavových automatů obsahují jeden stavový automat pro každý reaktivní objekt. Reaktivními objekty jsou třídy (nejčastěji), případy užití, podsystémy, celé systémy. Reaktivní objekt poskytuje kontext stavového diagramu.

Reaktivní objekty reagují na externí události; mohou generovat vnitřní události; mají určitý životní cyklus, který lze modelovat jako posloupnost stavů, přechodů a událostí; mají aktuální chování, které vyplývá z předchozího chování.

Existují dva typy stavových automatů:

  1. Stavový automat chování (behavioural) – modelují chování kotextového klasifikátoru, stavy v chování stavového automatu chování mohou obsahovat několik akcí a aktivit.
  2. Stavový automat protokolů (protocol) – modelují protokol kontextového klasifikátoru, stavy ve stavových automatech protokolů nemají akce ani aktivity.

Stavy

Stav je podmínka nebo situace, ve které se nachází objekt a splňuje nějakou podmínky, vykonává aktivitu nebo čeká na událost. Je to sémanticky významná podmínka objektu.

Stav je určen:

  1. hodnotami atributů objektu,
  2. relacemi s dalšími objekty,
  3. aktuálně vykonávanou aktivitou.

Událost vstup (entry) proběhne rychle a automaticky při vstupu do stavu – je to první věc, ke které při vstupu do určitého stavu dojde. Zmíněná událost vždy spustí přidruženou akci.

Událost výstup (exit) je úplně poslední událostí, která proběhne rychle a automaticky při odchodu z určitého stavu a která vždy spustí přidruženou výstupní akci.

Interní přechod umožňuje zachytit skutečnost, že dochází k něčemu, co stojí za to modelovat, zároveň ale i skutečnost, že to něco nezpůsobuje přechod do nového stavu.

Interní aktivita je proces, který trvá určitou dobu a lze jej přerušit.

Přechody

Přechod je posunem z jednoho stavu do dalšího.

Událost je externí nebo interní výskyt, který zahájí přechod. Podmínka (guard) je booleovský výraz, jehož splnění podmiňuje přechod. Akce je část díla přidruženého k přechodu, k níž dochází při zahájení přechodu. Přechodový pseudostav spojuje nebo větví přechody. Pseudostav volby směřuje tok skrze stavový automat podle aktuálních podmínek.

Přechodový pseudostav (spojování přechodů)

Pseudostav volby (větvení přechodů)

Události

Událost je specifikací něčeho významného, co se stane v reaktivním objektu. Typy událostí:

  1. událost volání (call event) – volání množiny akcí, spuštění metody objektu;
  2. signální událost (signal event) – přijetí signálu – signál je asynchronním jednosměrným komunikačním prostředkem mezi objekty;
  3. událost změny (change event) – k události změny dochází po splnění booleovské podmínky (při přechodu ze stavu false do stavu true);
  4. časová událost (time event) – k časové události dochází po uplynutí stanovené doby nebo po splnění určité časové podmínky.

Událost volání

Signální událost

Událost změny

Časová událost

Dvě klíčová slova: after (after (3 months)), when (when (date = 20/3/2000)).

Složené stavy

Složené stavy mohou obsahovat jeden nebo více vnořených stavových automatů – dílčí podstavy dědí od svých předků všechny přechody. Všechny podautomaty existují ve vlastních regionech. Poslední pseudostav platí pouze pro dotyčný region. K ukončení všech regionů se používá ukončovací pseudostav.

Jednoduché složené stavy

Jednoduchý složený stav obsahuje pouze jeden region (jeden vnořený stavový automat).

Orotognální složené stavy

Obsahují dva nebo více souběžně běžících podautomatů. Vstoupí-li se do složeného stavu, okamžitě se spustí všechny jeho automaty.

Synchronizované ukončení

Opuštění superstavu, když dojde k ukončení obou regionů.

Nesynchronizované ukončení

K ukončení dojde, pokud dojde k ukončení jednoho z regionů.

Validace a verifikace

Programové testování

Testování prokazuje, zda program dělá to, co má dělat a odhaluje chyby před uvedením do provozu. Při testování spouštíme program s použitím “umělých” dat. Kontrolujeme výsledky testů – chyby, anomálie nebo informace o nefunkčních atributech programu. Můžeme tak odhalit přítomnost chyby, ne jejich absenci. Testování je součást obecných validačních a verifikačních procesů a zahrnuje také validační techniky.

Cíl testování:

  1. ukázka, že SW splňuje požadavky vývojáře a zákazníka – vede k validation testing,
  2. objevení situací, kdy chování SW je nekorektní, nežádoucí nebo nesplňuje specifikaci – vede k defect testing.

Validation testing

Ukázka, že SW splňuje požadavky. Úspěšný test ukazuje, že systém funguje tak, jak byl zamýšlen (k čemu byl určen).

Defect testing

Objevení chyb v SW, chybného chování nebo neshod ve specifikaci. Úspěšný test ukazuje nekorektní chování.

Verifikace – produkt byl vytvořen správně – splňuje specifikaci.

Validace – byl vytvořen správný produkt – systém dělá to, co uživatel chce.

SW inspections – Concerned with analysis of the static system representation to discover problems (static verification). These involve people examining the source representation with the aim of discovering anomalies and defects.

Inspekce nevyžaduje spuštění systému, může být využita před implementací. Může být použita na jakoukoliv reprezentaci systému (požadavky, design, ...)

Během testování mohou být skryty jiné chyby. Protože je inspekce statický proces, nezabýváme se interakcí mezi chybami.

SW testing – Concerned with exercising and observing product behaviour (dynamic verification).

Statická analýza

Statická analýza je technika verifikace, která nezahrnuje spuštění programu. Inspekce a reviews jsou formou statické analýzy, která zahrnuje i formal verification, model checking, automated program analysis.

Formal methods

Jsou použity, pokud je vytvořena matematická specifikace.

Produkování matematické specifikace vyžaduje detailní analýzu požadavků, což může odhalit chyby. Souběžné systémy mohou být analyzovány a mohou být objeveny běhové podmínky, které vedou k selhání. Je možné objevit chyby před testováním.

Vyžadují speciální notaci (může být složitá). Je velmi nákladné vytvořit specifikaci. Důkazy mohou obsahovat chyby. Je možné dosáhnout stejné míry důvěry i použitím jiných technik.

Model checking

Zahrnuje vytvoření rozšířeného stavového modelu systému, použití speciálního systému a kontrolu chyb modelu. Model checker prochází všechny možné cesty a kontroluje, zda je požadovaná vlastnost korektní. Metoda je vhodná pro souběžné systémy. Je ale výpočetně velmi nákladná.

Automated static analysis

Statické analyzátory jsou SW nástroje pro zpracování zdrojového textu. Snaží se projít text a objevit chybné podmínky. Jsou efektivní jako pomocné nástroje, nejsou náhradou inspekcí.

Levels of static analysis

  1. Characteristic error checking.
  2. User-defined error checking.
  3. Assertion (tvrzení) checking.

Použití statické analýzy

Je vhodná, pokud používáme jazyk, kde compiler neodhalí mnoho chyb. Je vhodná pro kontrolu bezpečnosti – odhalení přetečení bufferu nebo neočekávaného vstupu.

Testování

Stages:

  1. Development testing.
  2. Release testing.
  3. User testing.

Development testing

Zahrnuje aktivity, které jsou provedeny vývojovým teamem.

  1. Unit testing – jsou testovány jednotlivé části nebo objektové třídy. Zaměřuje se na testování funkčnosti objektů a metod.
  1. Defect testing process.
  2. Testování může být automatizováno – použití frameworků (JUnit) – setup part (inicializace), call part (volání objektů a metod), assertion part (porovnání výsledků).
  3. Partition testing – identifikace skupiny vstupů, které mají shodné vlastnosti a mohou být testovány společně.
  4. Guideline-based testing – použití testing guidelines.
  1. Použití různých posloupností v různých testech.
  2. Použití prvního, prostředního a posledního elementu v posloupnosti.
  3. Použití posloupnosti s nulovou délkou.
  4. Výběr vstupu, který způsobí generování všech chybných zpráv.
  5. Výběr vstupu, který způsobí přetečení.
  6. Opakování stejných vstupů.
  7. Vynucení nesprávných výstupů.
  8. Vynucení příliš velkých nebo příliš malých výsledků.
  1. Component testing – více jednotlivých komponent je sloučeno a testováno společně. Zaměřuje se na testování rozhraní komponent.
  1. Špatné použití rozhraní.
  2. Nepochopení rozhraní.
  3. Timing errors.
  4. Guidliness:
  1. Parametry procedur jsou na konci rozsahu.
  2. Testování na null pointers.
  3. Tvorba testů, které způsobí pád komponenty.
  4. Změna pořadí aktivace komponent (systémy se sdílenou pamětí).
  1. System testing – systém je testován jako celek. Zaměřuje se na testování interakcí komponent. Pokud jsou komponenty vyvíjeny různými týmy, v této části testování jsou spojeny.
  2. Use-case testing – identifikace interakcí jako základ pro testování. Každý use case často zahrnuje různé komponenty.

Test-driven development

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. Prvním krokem je definice funkcionality a následné napsání testu, který tuto funkcionalitu ověřuje. Poté přichází na řadu psaní kódu a nakonec úprava tohoto kódu.

Aktivity

  1. Napsat test.
  2. Spustit testy a ujistit se, že všechny neprojdou.
  3. Napsat vlastní kód
  4. Kód automatickými testy prochází.
  5. Refaktorace.

Pozitiva: Tím, že systém dělá právě a jen to, co testuje, dá se považovat na konci programování za otestovaný. Využití automatických testů. Vytváření kódu na základě testů vede k větší modularitě a čistotě kódu.

Negativa: Vyžaduje velmi zkušené/nadané vývojáře. Kromě uživatelských scénářů bez dokumentace. Náročné při velkých projektech. Náročné pro systémy s převažující uživatelskou interakcí. Náročná údržba testovacích scénářů při změnách v původních požadavcích.

Regression testing

Kontrola, že provedená změna nezpůsobí selhání dříve napsaného kódu.

Release testing

Proces testování konkrétní verze. Jedná se o formu systémového testování.

Requirements based testing

Testování každého požadavku.

User testing

Testování, kde sám uživatel zkouší pracovat se systémem.

  1. Alpha testing – uživatelé spolupracují s vývojáři.
  2. Beta testing – SW je dostupný uživatelům.
  3. Acceptance testing – uživatelé testují a rozhodují, zda je systém vhodný. Zejména u custom systems.

Agilní metody

U agilních metod je uživatel součástí týmu a je odpovědný za některá rozhodnutí. Tento uživatel nemusí být typickým uživatelem a nemusí mít stejné nároky jako pozdější uživatelé systému.

Testování nefunkčních vlastností (Testing of Non-Functional Properties)

  1. Performance testing.
  2. Reliability testing.
  3. Security testing.

Performance testing

Performance testing tests system performance properties.

Reliability testing

Reliability testing relies on testing the system with a data set that reflects the operational profile of the software.

Security validation

Security validation may be carried out using experience-based analysis, tool-based analysis or ‘tiger teams’ that simulate attacks on a system.

Evoluce (Evolution Processes)

Změna SW je nevyhnutelná – nové požadavky, změna obchodního prostředí, oprava chyb, nové vybavení, zlepšení výkonu a spolehlivosti.

Evolution – stav, kdy je systém v provozu a jsou navrženy nové požadavky.

Servicing – není přidána nová funkcionalita, ale jsou například opraveny chyby.

Phase-out – SW může být používán, ale nejsou prováděny další změny.

Evoluce závisí na typu udržovaného SW, vývojových procesech, zkušenostech a schopnostech uživatelů.

Změna implementace

The emergency repair process

Agilní metody a evoluce

Agilní metody jsou založeny na inkrementálním vývoji.

Handover (předání) problems

Nastávají, pokud týmy používají agilní přístup, ale týmy zajišťující evoluci nejsou seznámeni s agilními metodami a preferují plan-based přístup nebo pokud je použit plan-based přístup a týmy zajišťující evoluci preferují agilní metody.

Program evolution dynamics

Zkoumání změn systému. Vytvořeno několik zákonů, ale existuje i několik vhodných pozorování.

Lehmanovy zákony

  1. Zákon trvalé proměny – Systém používaný v reálném prostředí se neustále mění, dokud není levnější systém restrukturalizovat nebo nahradit zcela novou verzí.
  1. Zákon rostoucí složitosti – Při evolučních změnách je program stále méně strukturovaný a vzrůstá jeho vnitřní složitost. Odstranění složitosti vyžaduje dodatečné úsilí.
  1. Zákon vývoje programu – Rychlost globálních změn atributů systému se může jevit v omezeném časovém intervalu jako náhodná. V dlouhodobém pohledu se však jedná o seberegulující proces, který lze statisticky sledovat a předvídat.
  1. Zákon invariantní spotřeby práce – Celkový pokrok při vývoji projektů je statisticky invariantní. Jinak řečeno, rychlost vývoje programu je přibližně konstantní a nekoreluje s vynaloženými prostředky.
  1. Zákon omezené velikosti přírůstku – Systém určuje přípustnou velikost přírůstku v nových verzích. Pokud je limita překročena, objeví se závažné problémy týkající se kvality a použitelnosti systému.

Údržba SW

Jedná se o změnu SW po uvedení do provozu. Normálně nezahrnuje velké změny systémové architektury. Změny jsou provedeny na existujících komponentách, jež jsou pak přidány do systému.

Typy

  1. Oprava chyb.
  2. Adaptace SW na jiné operační prostředí.
  3. Přidání či změna funkcionality.

Cena je vyšší než při vývoji. Roste s údržbou SW. Cenu ovlivňuje:

  1. stabilita týmu,
  2. smluvní odpovědnost,
  3. zkušenosti zaměstatnců,
  4. struktura a věk programu.

Předpovědi jsou založeny na posouzení částí systému, jež by mohly způsobovat problémy.

System re-engineering

Restrukturalizace nebo přepsání částí nebo celého systému bez změn funkcionalit. Důraz kladen na zjednodušení systému. Systém by měl být restrukturalizován a znovu zdokumentován.

Výhody

  1. Snížení rizik.
  2. Snížení ceny.

Proces

Source code translation – převedení kódu do nového jazyka, reverse engineering – analýza a porozumění programu, program structure improvement – restrukturalizace pro lepší pochopení, program modularization – reorganizace struktury, data reengineering – úklid a restrukturalizace dat.

Cena závisí na kvalitě SW, dostupných nástrojích, rozsah převáděných dat, dostupnost vyškoleného personálu.

Re-engineering – nastává, pokud byl systém již nějakou dobu udržován a zvyšuje se cena údržby.

Refactoring – jedná se o nepřetržitý proces vylepšování při návrhu a evoluci. Snaží se vyhnout degradaci struktury a kódu, což by zvyšovalo náklady na údržbu systému.

“Bad smells” in program code

  1. Duplikace kódu.
  2. Dlouhé metody.
  3. Switch (case) statements.
  4. Shlukování dat (data clumping).
  5. Speculative generality.

Legacy System Management

A legacy system is an old method, technology, computer system, or application program. The legacy system may or may not remain in use.

Legacy system categories

  1. Nízká kvalita, nízká obchodní hodnota.
  2. Nízká kvalita, vysoká obchodní hodnota.
  3. Vysoká kvalita, nízká obchodní hodnota.
  4. Vysoká kvalita, vysoká obchodní hodnota.

Posouzení obchodních hodnot systému

  1. Použitelnost systému.
  2. Podpora obchodních procesů.
  3. Závislost systému.
  4. Výstupy sysému.

Posouzení kvalit systému

  1. Jak dobře systém podporuje současné cíle?
  2. Jak je systém efektivní a kolik stojí údržba?
  3. Jaká je kvalita aplikací systému?

Software Development Management

Processes and Methodologies

Modely

Modely jsou často propojovány.

  1. Vodopádový model (The waterfall model) – plan-driven model. Odděluje fáze specifikace a vývoje.
  2. Inkrementální vývoj (Incremental developement) – specifikace, vývoj a validace jsou propojeny. Může být agilní i plan-driven.
  3. Reuse-oriented SW engineering – vývoj SW na základě vytvořených komponent. Může být agilní i plan-driven.

Vodopád

Pozitiva: Vytvořením zevrubné dokumentace se usnadňuje zapojení nových členů do týmu a snižuje závislost na jednotlivých řešitelích. Jednoduše manažersky uchopitelný.

Negativa: Vytváření podrobné dokumentace zabere kapacity, které by byly jinak využitelné. Odhalení chyby či změna v požadavcích v pozdní fázi je velmi nákladné a vyžaduje revizi všech ostatních kroků. Některé technologické limitace, požadavky či rizika nemusí být možné odhalit včas.

Prototypování

Prototyp je iniciální verze systému, pomocí které lze demonstrovat koncept a zkoušet různá nastavení. Může být použit při definici požadavků, návrhu i testování.

Zlepšuje použitelnost, je blíž k potřebám uživatele, zlepšuje kvalitu návrhu, zlepšuje údržbu, zmenšuje úsilí při vývoji.

Pozitiva: Předvedením prototypu zákazníkovi – uživateli je možné získat cennou, zpětnou vazbu a na jejím základě vytvořit finální produkt. Po vytvoření jednorázového prototypu lze snáze sledovat časové odhady. Snížení celkového času vývoje. Rychle postupující vývoj.

Negativa: Zaměření na co nejrychlejší vytvoření prototypu může vést k zanedbání analytické části a výsledkem tak nemusí být nejlepší možné řešení. Zákazníci – uživatelé mohou požadovat od finální verze vše, co je v prototypu, přestože mohou být důvody k provedení změn ve finální verzi. Předvedení prototypu zákazníkovi – uživateli může vytvářet mylný dojem o úrovni dokončení vyvíjeného produktu („vždyť už to je skoro hotové“). Vývojový přístup může vést k ponechání nevhodných částí ve finálním produktu - zanesení „smetí“.

Inkrementální doručování (Incremental delivery)

Rozdělění systému na jednotlivé inkrementy. Požadavky uživatelů mají určitou prioritu, nejvyšší priorita je doručena jako první.

Výhody – dřívější doručení některých komponent, prvotní komponenty lze využít jako prototypy, snížení rizika nedokončení projektu, komponenty s větší prioritou jsou více testovány.

Problémy – většina systému vyžaduje více základních komponent, které jsou používány různými částmi systému, podstata iterativních procesů spočívá v tom, že specifikace je vyvíjena v souladu se SW.

Boehm’s spiral model

Proces je reprezentován jako spirála. Každá smyčka představuje fázi procesu. Neexistují žádné fixní fáze (specifikace, design) – smyčky jsou vybírány podle potřeby.

Použití – pomoc při uvažování nad iteracemi, v praxi používán zřídka.

Pozitiva: Výsledný produkt dle specifikací zákazníka. Analýza rizik může zachytit problémy projektu dříve, než se stanou kritickými.

Negativa: Zdlouhavý vývoj -při špatných odhadech zdrojů se může ukázat jako neúnosný. Systém není prototypován jako celek ale po částech – zákazník nemá celkový pohled na systém až do okamžiku dodání.

The Rational Unified Process

Moderní proces odvozen z UML. Většinou je popsán ze tří perspektiv – dynamická (a dynamic perspective) – ukazuje vývojové fáze během určité doby, statická (a static perspective) – ukazuje aktivity, a practive perspective – suggest good practice.

Fáze

Pozitiva: Výsledná dokumentace usnadňuje orientaci v oblasti při tvorbě rozšíření. Výsledný produkt je založený na interakci se zákazníkem. Metodika je komplexní a škálovatelná.

Negativa: Velká režie při tvorbě dokumentace. Nevhodné na malé projekty. Složitá plánovatelnost.

Agilní metody

Agilní metodika softwaru je zastřešující pojem pro iterativní a inkrementální metodiky vývoje, stavějícím důraz na úzké osobní spolupráci mezi týmy, složenými z pracovníků různých zaměření a komunikaci se zákazníkem. Zatímco tradiční metodiky staví funkcionalitu jako fixní veličinu, přičemž čas a zdroje jako veličiny proměnné, agilní přístup považuje za fixní čas a zdroje a jako proměnnou ponechává funkcionalitu.

Problémy agilních metod

  1. Může být těžké udržet pozornost zákazníka zahrnutého v procesu.
  2. Může být těžké určit prioritu změn kvůli množství uživatelů.
  3. Udržování jednoduchosti přináší práci navíc.

Plan-driven and agile development

  1. Plan-driven development – A plan-driven approach to software engineering is based around separate development stages with the outputs to be produced at each of these stages planned in advance. Not necessarily waterfall model – plan-driven, incremental development is possible. Iteration occurs within activities.
  2. Agile development – Specification, design, implementation and testing are inter-leaved and the outputs from the development process are decided through a process of negotiation during the software development process.

Extreme programming

Jedna z nejznámějších a nejvíce rozšířených agilních metod. Nové verze jsou sestavovány až několikrát denně. Inkrementy jsou doručovány zákazníkům každé dva týdny. Každá verze je testována a přijata, pokud všechny testy projdou úspěšně.

Pozitiva: Krátké iterace usnadňují zákaznickou zpětnou vazbu. Rychle viditelné výsledky.

Negativa: Dokumentace není samostatně prováděnou činností. Sebelépe vytvořený kód není čitelný pro každého, pro údržbu je tento postup problematický. Velmi velká závislost na kvalitním a stálém řešitelském týmu. Ztráta klíčového pracovníka může být kritická. Důraz na osobní komunikaci při může vést k nejasnostem.

Project Management

Zabývá se aktivitami, které zajišťují, že je SW dodán včas, podle plánu a splňuje požadavky.

Úpěch – doručení SW ve stanovenou dobu, cena odpovídá rozpočtu, SW splňuje očekávání.

Aktivity:

  1. plánování,
  2. management rizik,
  3. management lidí,
  4. reporting,
  5. jednání o smlouvě.

Plánování

Rozdělění práce na části a přiřazení těchto částí členům týmu. Projektový plán je vytvořen na začátku projektu a popisuje jak bude práce vykonána.

Fáze:

  1. proposal stage – nabízení smlouvy,
  2. project startup phase – kdo bude na projektu pracovat, jak bude rozdělen, …,
  3. throughout the project – modifikace plánu.

Scheduling

Jak bude práce rozdělena.

Problémy – přesný odhad je složitý, produktivita nezávisí na počtu lidí, přiřazení zaměstnance k rozdělané práci zpomalí projekt (komunikace), neočekávané události.

Agilní plánování

Funkcionality nejsou plánované, ale jsou přidávány v průběhu vývoje.

Cena SW

Faktory ovlivňující cenu:

  1. příležitosti na trhu,
  2. nejistý odhad nákladů,
  3. smluvní podmínky,
  4. variabilita požadavků,
  5. finanční situace vývojaře.

Odhadovací techniky

Založené na:

  1. zkušenostech,
  2. odhadu pomocí algoritmických metod.

The COCOMO 2 model – empirický model založený na zkušenostech.

Risk Management

  1. Identifikace rizik.
  2. Analýza rizik.
  3. Planování rizik.
  4. Monitorování rizik.

People Management

  1. Konzistence.
  2. Respekt.
  3. Zařazení.
  4. Čestnost.

Efektivitu týmu ovlivňují samotní lidé, orgranizace a komunikace.

Zdroje

Slajdy z přednášek (http://is.muni.cz/el/1433/podzim2012/PB007/um/35424436/).

Slajdy ze cvičení (http://is.muni.cz/el/1433/podzim2012/PB007/um/35424437/35424457/).

UML 2 a unifikovaný proces vývoje aplikací; Jim Arlow, Ila Neustadt; ISBN 978-80-251-1503-9.

Aplikovaná metodika vývoje softwaru v malých a středních (SME) firmách (http://is.muni.cz/th/98664/fi_m/Plny_text_prace.pdf)