English
Kamil Dudka

Softwarové inženýrství (IUS)

Na této stránce je můj elektronický sešit do předmětu IUS. Při jeho vytváření jsem čerpal informace z přednášek a ze studijní opory k předmětu IUS od Ing. Bohuslava Křenu, Ph.D. a Ing. Radka Kočího, Ph.D.

Tématické okruhy

  • Vznik softwarového inženýrství, softwarová krize.
  • Vlastnosti softwaru, problémy při jeho vývoji.
  • Životní cyklus softwaru, charakteristika jeho etap.
  • Modely životního cyklu softwaru.
  • Analýza a specifikace požadavků, diagram případů užití.
  • Objektová orientace, diagram tříd.
  • Strukturovaná analýza a návrh, ER diagram.
  • Jazyk UML, statické a dynamické diagramy.
  • Implementace a testování softwaru.
  • Agilní metodologie tvorby softwaru.
  • Řízení softwarových projektů.
  • Kvalita a měření v softwarovém inženýrství.
  • Ochrana intelektuálního vlastnictví.

2. Softwarové inženýrství

Softwarové inženýrství
Systematický přístup k vývoji, nasazení a údržbě softwaru
Softwarová krize
Pojem zaveden spolu s pojmem SW inženýrství v 60. letech, když se začaly objevovat problémy s vývojem rozsáhlejším programů.

Historie

60. léta
Softwarová krize se projevovala (a stále projevuje) neúnosným prodlužováním a prodražováním projektů, nízkou kvalitou výsledných produktů, problematickou údržbou a nízkou produktivitou práce programátorů. Hledání jednoduchého a účinného řešení na existující problémy vedlo k zavedení strukturovaného programování.
70. léta
Dochází k dalšímu rozvoji metodologií.
Je kladen větší důraz na úvodní etapy životního cyklu SW.
Abstraktní datový typ
80. léta
Vývoj nových programovacích jazyků a paradigmat.
První CASE (Computer Aided Software Engineering) nástroje
Větší podpora nasazení a údržby - správa verzí
90. léta
Snaha zvýšit efektivitu vývoje - znovupoužitelnost (reusability)
Sledování kvality SW s použitím metrik
Návrhové vzory
Umělá inteligence
Java

Současnost

UML = Unified Modelling Language
Outsourcing
Zajišťování neklíčových operací externími pracovníky
Odlehčené metodologie (light-weight metodologies)
Klasické metodologie neúnosně prodražují vývoj menších projektů.
Formální verifikace, simulace a analýza
Cílem je zvýšit bezpečnost SW nasazeného v kritických oblastech.

Softwarový produkt

Softwarový produkt
Pokud členové jedné komunity vytvářejí SW (ve smyslu výrobku) pro členy jiné komunity (pro uživatele), nazveme takový SW softwarovým produktem. Softwarový produkt však nejsou jenom počítačové programy, nýbrž softwarový produkt zahrnuje i požadavky, specifikace, popisy návrhu, zdrojové texty programů, testovací data, příručky, manuály, ...
Kvalita
Kvalita je souhrn vlastností a charakteristik výrobku, procesu nebo služby, které ukazují jeho schopnost splnit určené nebo odvozené potřeby.
Kvalita však není definována jako absolutní míra, nýbrž jako stupeň splnění požadavků či potřeb.
Krabicový software (generický)
SW je vyroben a potom prodáván libovolnému zájemci.
Musí být velmi dobře otestován před vypuštěním do prodeje.
Dodatečné opravy jsou velmi drahé.
Zákaznický software
Šitý na míru pro konkretního zákazníka.
Cena zákaznického SW je vyšší - mohou si dovolit větší firmy.
Typicky systémy pro řízení výroby, leteckého provozu, ...

Vlastnosti SW z hlediska použití

Správnost
Míra, do jaké software vyhovuje specifikaci.
Spolehlivost
Efektivnost
Použitelnost
Bezpečnost

Vlastnosti SW z hlediska přenosu

Přenositelnost
jak velké úsilí je nutné pro přenos SW na jinou platformu
Znovupoužitelnost
do jaké míry je možné znovu použít jednotlivé části SW
Interoperabilita
Zohledňuje úsilí potřebné k zajištění spolupráce systému s jinými systémy.

Vlastnosti SW z hlediska změn

Udržovatelnost
schopnost reagovat na měnící se potřeby zákazníka nebo např. změny legislativy
Modifikovatelnost
Dokumentovanost

Problémy při vývoji softwaru

Složitost
Není možné pochopit všechny stavy systému, důsledky jeho úprav. Problém komunikace v týmech.
Syndrom 90% hotovo
Při posuzování hotové části se vychází z odpracovaného (podle plánu), nikoliv ze skutečně hotového.
Specifikace požadavků
Náchylnost softwaru k chybám
Hodně chyb se projeví až při provozu SW systému, ne při vývoji.
Práce v týmu
komunikační problémy při vývoji velkých projektů
Tvorba dokumentace
Velké projekty vyžadují mnohem více dokumentace. Těžko se pak udržuje její aktuálnost.
Stárnutí softwaru
Postupné přidávání nových funkcí a časté opravy chyb vedou k degradaci struktury a ke snižování spolehlivosti SW.
Syndrom druhého systému
Autor povzbuzen úspěchem prvního systému chce nový systém udělat dokonalý. Nový systém je pak příliš složitý, nepřehledný a neefektivní.
Systém není dokonalý, když k němu nelze nic přidat, ale tehdy, když z něho nelze nic odstranit.

3. Modely životního cyklu softwaru

Proces vývoje softwaru

Softwarový proces definuje, kdo kdy co má dělat, aby bylo dosaženo požadovaného cíle.
Dekompozice (Divide and conquer)
Dekompozice přináší lépe zvládnutelné podsystémy, které jsou vyvíjeny nezávisle na sobě. Na druhou stranu však vyžaduje zavedení vhodného rozhraní mezi podsystémy. Po integraci všech podsystémů je nutné otestovat systém jako celek.
Životní cyklus softwaru
Model životního cyklu softwaru definuje etapy vývoje softwaru a pro každou etapu dále definuje nutné činnosti a její vstupy a výstupy.
Analýza a specifikace požadavků 8%
Architektonický a podrobný návrh 7%
Implementace 12%
Integrace a testování 6%
Provoz a údržba 67%

Etapy životního cyklu softwaru

Analýza a specifikace požadavků
Přání zákazníka je potřeba analyzovat a zapsat je v jasné a strukturované podobě. Pozornost je věnována pouze požadavkům samotným, nikoliv jejich realizaci.
Součástí této etapy by měla být studie proveditelnosti a analýza rizik.
Architektonický návrh
Architektonický návrh slouží k ujasnění koncepce systému a k jeho dekompozici. Plánuje se akceptační testování a nasazení do provozu (včetně zaškolování uživatelů).
Podrobný návrh
Podrobný návrh se soustřeďuje na podrobnou specifikaci softwarových součástí, na výběr algoritmů, na stanovení struktury dat a ošetřování chybových a neočekávaných stavů.
Dále se specifikují požadavky na lidské zdroje, odhaduje se doba trvání a náklady na projekt. Výsledkem by měl být také návrh testů součástí včetně testovacích dat.
Implementace a testování součástí
Programová realizace softwarových součástí, vypracování dokumentace k součástem a otestování implementovaných součástí.
Integrace a testování systému
Spojení součástí do jediného celku, otestování celého systému a oprava chyb v součástech, které se projevily až při integraci.
Akceptační testování a instalace
Otestování systému uživatelem/zákazníkem. Po akceptaci systému zákazníkem následuje instalace systému a školení uživatelů.
Provoz a údržba
Průběžné řešení problémů souvisejících s používáním softwaru.

Modely životního cyklu softwaru

Vodopádový model
Základní model životního cyklu softwaru - jednotlivé etapy jsou řazeny za sebou. Problém tohoto modelu představuje uživatel, který není schopný na začátku přesně specifikovat požadavky. Tento model neodpovídá vývoji reálných projektů.
Iterativní model
Proces vývoje softwaru je rozdělen do iterací. Jednotlivé iterace lze chápat jako instance vodopádového modelu. Po každé iteraci má uživatel k dispozici spustitelnou verzi SW s neúplnou funkcionalitou.
Inkrementální model
Na základě specifikace systému jsou stanoveny ucelené části systému, které se uživateli odevzdávají postupně.
Spirálový model
Spirálový model do procesu vývoje SW zavádí prototypování a klade značný důraz na analýzu rizik. Jednotlivé etapy se opakují, vždy na vyšším stupni zvládnuté problematiky. Na rozdíl od iterativního modelu dostává uživatel vždy pouze prototyp.
Prototyp
Prototyp se od verze s omezenou funkcionalitou liší tím, že se po použití vždy zahodí.
RUP = Rational Unified Process
RUP je na rozdíl od předchozích modelů použitelný pro řízení reálných softwarových projektů. RUP je výsledkem výzkumu řady velkým firem koordinovaným firmou Rational.
RUP klade důraz na vizualizace softwarového systému pomocí jazyka UML(Unified Modelling Language).
Agilní metodologie
Klasické metodologie neúnosně komplikují vývoj malých projektů. Agilní metodologie kladou hlavní důraz na člověka jako na určující faktor pro kvalitu výsledného produktu.
viz. Kapitola 10 - Agilní metodologie

4. Objektová orientace

Výhodou objektově orientovaných přístupů k návrhu je především stabilita navrhovaných prvků (z pohledu neustále se měnících požadavků) a jednoduchost jejich změn.
S cílem zjednodušení komunikace mezi vývojáři byl v roce 1995 definován jazyk UML(Unified Modelling Language). Tento jazyk neposkytuje sám o sobě žádnou metodologii, nabízí pouze prostředky pro unifikovanou tvorbu modelů různých aspektů navrhovaného systému. UML je však součástí různých metodologií návrhu, např. RUP.

Jazyk UML

Pohled (view)
Pohled je projekce systému na jeden z jeho aspektů, ostatní aspekty jsou pohledem ignorovány. Nad jedním systémem je vhodné vytvářet celou řadu pohledů:
Strukturální pohled (structural view)
Strukturální pohled popisuje vrstvu mezi objekty a třídami a jejich vztahy.
Pohled chování (behavioral view)
Pohled chování popisuje, jak objekty interagují a charakterizuje reakce na vnější podněty.
Datový pohled (data view)
Datový pohled popisuje stavy objektů a jejich vazby.
Pohled rozhraní (interface view)
Pohled rozhraní popisuje zapouzdření komponent systému a jejich potenciální použití okolím systému.

Objektová orientace

Objekt vytvořený v OO programovacím prostředí je abstrakcí reálného objektu. Modelování nějaké části reálného světa je vytváření abstrakcí nad objekty dané části reality.
Objektově orientované přístupy nejsou cílem našeho snažení, ale prostředkem k dosahování cílů.
Objekt
Objekt spojuje data a funkcionalitu do uzavřené jednotky. Na objekt můžeme pohlížet jako na černou skříňku (black box), jejíž vnitřní realizace je nám skryta. Objekt má stav, chování a identitu.
Atribut
Atribut reprezentuje vlastnost objektu a je definován množinou hodnot, kterých může nabývat. Atribut může být složený z více proměnných objektu nebo může být vypočítaný.
Stav objektu
Stav objektu je reprezentován množinou hodnot jeho atributů.
Rozhraní objektu
Rozhraní objektu je definováno množinou operací, které objekt nabízí.
Komunikace objektů (message passing)
Objekty mezi sebou komunikují zasíláním zpráv. Zpráva obsahuje identifikátor příjemce, název metody a argumenty.
Identita objektu
Díky identitě objektu je každý objekt jedinečný, bez ohledu na jeho stav. Na základě toho rozlišujeme mezi testem shodnosti a testem identity objektu.

Objektově orientované techniky

Abstrakce
Smyslem abstrakce je zjednodušit pohled na celý systém bez ztráty jeho významu. Každému objektu pak odpovídá určitá zodpovědnost za řešení identifikované části problému - objekt je abstrakcí části řešeného problému.
Zapouzdření
Pomocí zapouzdření jsou skrývány implementační detaily objektu.
Dědičnost
Dědičnost umožňuje vytvářet nové objekty na základě již existujících objektů. Vyjadřuje hierarchický vztah mezi objekty.
Polymorfismus
Stejné zprávy mohou být zpracovány různým způsobem v závislosti na typu objektu.
Rozlišujeme statický/dynamický polymorfismus a na základě toho říkáme že vzniká časná/pozdní vazba. Při časné vazbě je metoda vybrána v čase kompilace. Při pozdní vazbě je metoda vybrána za běhu programu.

Třídně založené jazyky

Třída
Třída je generická definice pro množinu objektů, které mají stejné chování a stejnou množinu atributů. Jde tedy o abstrakci nad objekty. Každý objekt je potom instancí své třídy.
Dědičnost
Dědičnost je relace uspořádání na množině tříd. Jednoduchá / vícenásobná dědičnost, víme...
Identita objektu
Identita objektu nesouvisí s třídou. Dva objekty téže třídy mohou být shodné, ne však identické.

Prototypově založené jazyky

Prototypově založené jazyky pracují pouze s objekty. Typickými představiteli jsou jazyky Self a Javascript.
Existuje vždy minimálně jeden počáteční objekt. Nové objekty se vytváření klonováním již existujících. Dědičnost objektů je vyjádřena prostřednictvím delegování zpráv na nadřazené objekty.

Typování

Staticky typované jazyky
Typová kontrola probíhá v době kompilace.
Dynamicky typované jazyky
Typová kontrola probíhá za běhu programu.

Asociace

Asociace je základní typ vztahu mezi třídami. Asociace má svůj název, v názvu upřednostňujeme podstatné jméno. Dále je možné definovat roli objektů ve vztahu a násobnost vztahu.
Mohutnost vztahu
Mohutnost vztahu udává, kolik instancí jedné třídy může být svázáno s instancí třídy druhé.
Stupeň asociace
Stupeň asociace vyjadřuje, kolik tříd se podílí na jedné asociaci. Nejčastěji se používají vztahy binární. Vyšší stupně asociace se během návrhu transformují na vztahy binární.
Povýšení asociace na třídu
Používá se v případech, kdy je potřeba přiřadit atributy samotnému vztahu, nebo při eliminaci asociací vyššího stupně.

Kompozice a agregace

Kompozice a agregace sou speciální typy asociace, které říkají, že jeden objekt je složen z jiných objektů. Rozdíl mezi kompozicí a agregací spočívá v síle vztahu.
Agregace (seskupení)
Agregace vyjadřuje slabší vztah mezi objektem a jeho částmi. Objektu reprezentujícímu celek se říká agregační (seskupený) objekt, jeho částem pak konstituční objekty (konstituenty). Vlastnosti agregace jsou:
  • Seskupený objekt může existovat bez svých konstitučních objektů.
  • Konstituent může být součástí více seskupení.
  • Implicitní násobnost vazby se nedá předpokládat.
Kompozice (složení)
Kompozice vyjadřuje silnější vztah mezi objektem a jeho částmi. Objektu reprezentujícímu celek se říká kompozitní (složený) objekt, jeho částem pak komponentní (složkové) objekty. Vlastnosti kompozice jsou:
  • Složený objekt nemůže existovat bez svých komponent.
  • Komponentní objekt může být součástí pouze jedné kompozice.
  • Implicitní násobnost každé složky je 1.

Závislost

Závislost vyjadřuje jiné různé vztahy mezi objekty či třídami. Typ závislosti se v diagramech označuje pomocí stereotypů. Pokud není stereotyp uveden, implicitně se předpokládá <<use>>. Další možné stereotypy jsou:
<<instantiate>> používá se pro znázornění vztahu mezi třídou a objekty
<<trace>> obecná vazba mezi objekty na různé úrovni abstrakce (např. analytická vs. návrhová třída)
<<friend>> řízené narušení zapouzdření (viz. klíčové slovo friend v C++).

Realizace

Realizace je vztah mezi třídou a rozhraním, který říká, že třída implementuje všechny operace z daného rozhraní.
Rozhraní
Rozhraní je speciální typ třídy, která specifikuje pouze množinu operací, ne však jejich implementaci. Na místě rozhraní lze pak použít kteroukoliv třídu, která rozhraní implementuje. Rozhraní se označují pomocí <<interface>>.
Pomocí rozhraní lze omezit počet vazeb mezi třídami.

5. Analýza a specifikace požadavků

Cíle etapy specifikace požadavků

Získání požadavků od uživatele
Zjistit, o jaký produkt má zákazník zájem, vymezit jeho funkcionalitu, ... Důraz je kladen na požadavky uživatele, nikoliv na způsob jejich realizace.
Transformace požadavků uživatele do strukturované podoby
Požadavky od uživatele je potřeba převést do částečně formálního, strukturovaného popisu. Cílem je jednoznačné zadání odsouhlasené zákazníkem, které slouží jako výchozí bod. Změny požadavků se od této chvíle musí dokumentovat.
Studie vhodnosti, analýza rizik
Na základě dostupných informací je třeba odhadnout, zda jsme schopni požadovaný produkt vytvořit za předpokládanou cenu v předpokládané době.
Plánování akceptačního testování
Plán akceptačního testování by měl být součástí smlouvy se zákazníkem. Tento plán říká, jak se bude SW produkt testovat při přebírání zákazníkem, jaké výsledky testů budou považovaný za úspěšné, atd.

Typy požadavků

Funkcionální požadavky
Funkcionální požadavky určují, co má systém dělat.
Požadavky na provoz systému
Požadavky na provoz systému definují podmínky, za jakých má SW pracovat.
Požadavky na výsledný systém
počítačové vybavení, OS, programovací jazyk, spolehlivost, přenositelnost, bezpečnost, ...
Požadavky na vývojový proces
požadavky zákazníka na dodržování norem během vývoje a předávání systému
Požadavky na rozhraní
rozhraní systému se svým okolím (včetně GUI)
Externí požadavky
etické požadavky, ochrana osobních údajů, ...

Specifikace požadavků

Metody získávání informací
  • interview, dotazník
  • pozorování prací u zákazníka
  • analýza existujícího SW
Problémy při specifikaci požadavků
Vyřazení
V době specifikace je nějaká entita implicitní, avšak s odstupem času se může tato implicitní informace vytratit.
Deformace (zkreslení)
Získaná informace může vyvolávat zavádějící výklad.
Zobecnění
Věta je příliš obecná a v důsledku toho nepravdivá.
Slovníček pojmů
Slovníček pojmů je jeden z prostředků, který napomáhá předcházet nedorozuměním.

RUP - Specifikace požadavků

  • diagram případů užití
  • detaily případů užití
  • specifikace (strukturovaný text)
  • slovníky pojmů
Případ užití (use case)
Případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch. Zvláštním případem účastníka může být také čas (např. periodické výpisy z banky).
Detail případu užití
Samotné diagramy případů užití ukazují pouze, které operace je možné v systému vykonávat. Detail případu užití poskytuje konkrétní informace ke každé takové operaci - zejména vstupní a výstupní podmínky a tok událostí.
Alternativní tok je aktivován kdykoliv během hlavního toku, pokud jsou splněny jeho počáteční podmínky.
Zobecnění účastníka
Zobecnění účastníka znázorňuje vztah generalizace/specializace mezi účastníky. Cílem je zpřehlednění diagramu.
Zobecnění případu užití
Zobecnění účastníka znázorňuje vztah generalizace/specializace mezi případy užití. Cílem je zpřehlednění diagramu.
Relace <<include>>
Relace <<include>> vyjadřuje situaci, kdy jeden případ užití v sobě zahrnuje jeden či více jiných případů užití.
Relace <<extend>>
Relace <<extend>> vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Na rozdíl od relace <<include>> je však případ v relaci <<extend>>nepovinný.

RUP - Analýza

Analytické třídy
Analytická třída (na rozdíl od návrhové) slouží pouze pro identifikaci entit v řešené problematice a ujasnění vztahů mezi nimi. Jedna analytická třída se může během návrhu transformovat na několik tříd návrhových.
Objektové diagramy
Objektové diagramy jsou dynamické diagramy, které zachycují konkrétní instance tříd a jejich vazby v určitém čase. V objektovém diagramu nalézají využití stereotypy <<instantiate>>.
Analytické balíčky
Analytické balíčky umožňují souběžnou práci vývojářů na různých částech systému v době návrhu (dekompozice). Jednotlivé balíčky oddělují prostory jmen a definují viditelnost zapouzdřených elementů (public, private, protected).
Diagram interakce
Diagramy interakce se rozlišují na statické/dynamické podle toho, jestli znázorňují vztahy tříd nebo jejich instancí. Nejčastějším typem tohoto diagramu je diagram spolupráce(collaboration diagram).
Sekvenční diagramy (sequence diagrams)
Sekvenční diagramy znázorňují časově orientovanou posloupnost předávání zpráv mezi objekty. Každý objekt má svou časovou osu, která se kreslí shora dolů, víme...
Diagram aktivit
Diagram aktivit je speciálním případem diagramu stavů. Obsahuje počátek, konec, stavy aktivity a přechody mezi stavy. Používá se především k modelování manažerských procesů.

6. Strukturovaný přístup k analýze

Strukturovaná analýza
Strukturovaná analýza spočívá v návrhu struktury dat a funkcí pracujících s daty. Naproti tomu objektově orientovaná analýza chápe systém jako kolekci vzájemně komunikujících objektů.

Modely strukturované analýzy

Funkční modelování (procesní)
Funkční modelování znázorňuje toky dat mezi systémem a okolím a data ukládaná do systému. Základním modelem je DFD.
Datové modelování
Datové modelování má význam zejména pro modelování databází. Základním modelem je ER diagram.
Modelování dynamického chování
Pro modelování dynamického chování systému se používá diagram stavů, který zachycuje stavový prostor systému a přechody mezi jeho stavy.

Data Flow Diagram (DFD)

DFD se podobá UC diagramu z OO analýzy, navíc však zachycuje toky dat mezi funkcemi systému a datovými sklady. DFD je tedy blíže návrhu (oproti UC diagramu).
Alternativou k detailům UC jsou zde tzv. minispecifikace, které popisují funkce ve formě strukturovaného textu.
DFD je hierarchický model - každá funkce v něm zachycená může být opět modelována pomocí DFD.

Entity Relationship Diagram (ER diagram)

ER diagram slouží k modelování dat, která potřebujeme v systému uchovat, a vztahů mezi nimi. Data jsou popisována na vyšší úrovni abstrakce.
Entita
Entita je objekt reálného světa, který je nějak rozlišitelný od ostatních (např. konkrétní klient banky).
Entitní množina
Entitní množina je množina entit téhož typu. Tyto entity lze charakterizovat pomocí stejných vlastností (např. klient).
Vztah
Vztah vyjadřuje asociaci mezi entitami (např. Jan Novák vlastní účet č.99).
Vztahová množina
Vztahová množina je množina vztahů téhož typu (např. klient vlastní účet).

Atribut entity

Atribut je vlastnost entity, která nás v kontextu řešeného problému zajímá. Atributy lze klasifikovat podle různých kritérií:
Jednoduché a složené
Jednoduchý atribut je prezentován jednoduchým datovým typem.
Jednohodnotové a vícehodnotové
Vícehodnotový atribut může nabývat více různých hodnot současně.
Prázdné atributy
Mouhou nabývat speciální hodnoty NULL. Umožňují zachytit situace, kdy
  1. reálná hodnota atributu existuje, ale neznáme ji.
  2. nevíme, zda reálná hodnota atributu existuje.
Odvozené atributy
Odvozený atribut není definován entitní množinou přímo, ale lze odvodit na základě jiných atributů nebo vztažených entit.

Vztah mezi entitami

Stupeň vztahu
Stupeň vztahu vyjadřuje, kolik entitních množin je zapojeno do jedné vztahové množiny. Nejčastěji se používají vztahy unární (reflexivní) a binární. Ternární vztahy se většinou převádějí na vztahy binární.
Kardinalita vztahu
Kardinalita je maximální počet vztahů daného typu (vztahové množiny), ve kterých může participovat jedna entita.
Členství vztahu
Členství (membership, participation) je minimální počet vztahů daného typu (vztahové množiny), ve kterých musí participovat jedna entita. Typické hodnoty jsou:
  • 1 - povinné členství
  • 0 - volitelné členství
Atributy vztahu
Atributy vztahu vytváříme, nelze-li přiřadit vztahy ani jedné vázané entitě. Vztahovou množinu pak zpravidla povýšíme na entitní množinu, které atributy přiřadíme.
Více vztahů mezi entitami
Mezi stejnými entitami může existovat více různých vztahů, které mohou vyjadřovat různou sémantiku.

Tvorba ER diagramu

Názvy
Pro entitní množiny používáme podstatná jména v jednotném čísle, pro vztahové množiny většinou slovesa nebo předložky. Pokud je jméno vztahové množiny jasné, není nutné ho uvádět.
Primární klíč
Každá entita musí být jednoznačně identifikovatelná - k tomu slouží primární klíč, jehož hodnota musí být v rámci entitní množiny unikátní.
Atribut vs. entitní množina
Je-li hodnota atributu důležitá, i když neexistuje žádná entita s touto hodnotou jako vlastností, pak bychom ji měli modelovat jako entitu.
Vztahy M:N
Vztahy typu M:N se těžko převádějí na schéma relační databáze, proto se transformují na vztahy typu 1:N pomocí vazební entitní množiny.
Slabé entitní množiny (weak)
Slabá entitní množina je existenčně závislá na jiné (silné) entitní množině. Označuje se jako <<weak>>. Identifikátor slabé entitní množiny má následující složky:
  1. dominantní identifikátor silné entitní množiny
  2. diskriminátor slabé entitní množiny
Entitu modelujeme jako slabou, když tato entita kompletně zmizí po odstranění odpovídající identifikující entity. Jsme-li na pochybách, volíme silnou entitní množinu.

7. Návrh

Výstupy etapy návrhu
  • upřesnění diagramů interakce (z etapy analýzy)
  • návrhové třídy - upřesňují analytické třídy
  • návrhové podsystémy - vychází z analytických balíčků
  • stavové diagramy
  • rozhraní

Návrhové třídy

Návrhové třídy se vytváří z analytických tříd doplněním implementačně důležitých vlastností. Mohou být závislé na použitém programovacím jazyku, frameworku, atd. Návrhové třídy lze přímo implementovat.

Rozhraní

viz. Objektová orientace - rozhraní

Upřesňování analytických modelů

Diagramy interakce jsou doplňovány o nové třídy, které v analytickém modelu nebyly. Jsou doplněny o implementačně specifické prvky.

Stavové diagramy

Stavový diagram modeluje životní cyklus jednoho reaktivního objektu.
Reaktivní objekt
Reaktivní objekt je takový objekt, který reaguje na vnější události. Jeho životní cyklus je modelován jako řada stavů, přechodů a událostí.

8. Implementace a testování

Implementace softwaru

Implementace softwaru je transformace návrhu jednotlivých modulů a jejich vzájemných vazeb do programové realizace.
Výběr programovacího jazyka
Pro výběr programovacího jazyka se řídíme následujícími kritérii:
  • zkušenosti programátorů, vhodnost jazyka
  • rozšířenost jazyka, přenositelnost
  • dostupnost knihoven, vývojového prostředí, ...
  • požadavky zákazníka
Strategie implementace
Programy se nevytvářejí tak, aby se lehce psaly, ale tak aby se lehce četly a modifikovaly.
Zdola nahoru
Nejdříve se implementují moduly nejnižší vrstvy aplikace. Odladěné moduly se pak dají přímo využívat při vytváření modulů vyšší úrovně. Nevýhoda spočívá v tom, že chyby v aplikační logice se projeví až při etapě integračního testování.
Shora dolů
Nejdříve se vytvoří moduly na nejvyšší úrovni a pak se postupně implementují moduly nižších vrstev aplikace. Systém lze dříve testovat jako celek a nejzávažnější chyby jsou včas odstraněny. Nevýhoda spočívá v nutnosti simulovat podsystémy, které ještě nejsou implementované.

Verifikace a validace programu

Někdy není nezbytná 100% správnost programu. (viz. zaměstnanec s 11 dětmi)
Verifikace
Verifikace je ověření, zda software vyhovuje specifikaci.
Validace
Validace je ověření, že vyvíjený software splňuje potřeby uživatele.
Statické ověřování
Statické ověřování nevyžaduje běh programu, lze ho tedy provádět v kterékoliv etapě vývoje softwaru.
Dynamické ověřování
Dynamické ověřování (testování) odvozuje vlastnosti softwaru na základě výsledků běhu programu nebo prototypu s vybranými vstupy.

Testování

  1. Nejdříve jsou navrženy testovací vstupy. Testovací vstupy představují množinu dvojic vstupní data / očekávaná výstupní data.
  2. Vstupní data jsou zadány na vstup programu a zaznamenány výsledky (výstupní data).
  3. Výstupní data se porovnají s očekávanými výstupními daty.
  4. Test, který neodhalí nesprávné chování systému, je neúspěšný.
Výběr testovacích vstupů
Snažíme se vybrat takové testovací vstupy, u kterých je velká pravděpodobnost, že způsobí chybu.

Testovací kritérium

Testovací kritérium K je spolehlivé, když všechny množiny testovacích vstupů splňující kritérium K odhalí stejné chyby.
Testovací kritérium K je platné, když pro každou chybu v programu existuje množina testovacích vstupů, která splňuje kritérium K a chybu odhalí.
Náhodné testování
Testovací vstupy jsou vybírány náhodně, například pomocí generátoru náhodných čísel. Nevýhoda spočívá v nedostatečném testování okrajových hodnot. Proto se většinou doplňuje jiným vhodným kritériem.
Funkcionální testování
(Metoda černé skříňky) Funkcionální testování vychází pouze ze specifikace a neuvažuje vnitřní strukturu programu.
Množina vstupních hodnot je rozložena do tříd ekvivalence. Z každé třídy ekvivalence se vybere průměrná hodnota nebo medián, hranice třídy a několik náhodných hodnot.
Strukturální testování
(Metoda bílé skříňky) Strukturální testování vychází z konkrétní implementace.
Mutační testování
Mutační testování slouží pro otestování množiny testovacích vstupů. Když je množina testovacích vstupů vybrána, udělá se v programu úmyslně několik chyb. Podle toho, kolik úmyslně vložených chyb je zachyceno, se dá odhadnout, jak úspěšné bude testování.

Strategie testování

Testování zdola nahoru
Testování shora dolu
Regresní testování
Regresní testování spočívá v opakovaném vyhodnocení testů po každé změně programu. Programátor se pak může přesvědčit, je-li zjištěná chyba skutečně opravena a hlavně, jestli nezanesl do programu chyby nové. Regresní testování musí být zautomatizované, protože se pouští opakovaně.
Akceptační testování
Akceptační testování provádí uživatel na reálných datech. Na základě tohoto testování se zákazník rozhodne, jestli program splňuje zadání. Pokud zákazník software akceptuje, další změny již představují údržbu systému.
Alfa-beta testování
U krabicového SW není možné provádět akceptační testování u každého zákazníka.
Proto se v první fázi provádí alfa testování - vývojový tým si k sobě pozve vybraného uživatele, vývojáři pak sledují jeho práci se systémem. Při alfa testování se objevují chyby vzniklé odlišným způsobem práce uživatele a vývojáře se systémem.
Beta testování provádí uživatelé u sebe. Výsledkem je zpráva uživatele, na jejímž základě je software upraven a uvolněn do prodeje. Při beta testování se objevují chyby, způsobené během programu v neznámém prostředí.

9. Řízení softwarových projektů

Projekt
Projekt je časově ohraničené úsilí, které se vyvíjí s cílem vytvořit jedinečný výsledek - např. výrobek nebo službu. Každý projekt je časově ohraničený - má jednoznačný začátek a konec. Konec projektu je dosažen, jsou-li splněny stanovené cíle.
Parametry softwarového projektu
  • rozsah, kvalita
  • cena
  • čas

Sestavení vývojového týmu

Beran
Beran příliš důrazně prosazuje variantu, kterou považuje za nejlepší. Problém nastává pokud se v týmu potkají 2 berani. Řešením situace je vymezení odpovědnosti každému z nich.
Slabý článek
Slabý článek je člen týmu, který je v porovnání s ostatními členy méně šikovný. Vhodným řešením je zařadit slabý článek na méně zodpovědnou pozici.
Dělnická mentalita
Lidé s dělnickou mentalitou mají dostatečné schopnosti, ale snaží se přežít pracovní dobu s vynaložením co nejmenší námahy. Vedoucí by měl takovým lidem přidělovat dobře měřitelnou práci.
Snaživec
Snaživec odvádí na své pozici dobrou práci, ale má zájem o prestižnější místo, na které nemusí mít předpoklady. Řešením je najít snaživci uspokojivou pozici, ale takovou, která neohrozí úspěšnost projektu.

Management projektů

Management je proces koordinace činností skupiny lidí, který realizuje jednotlivec nebo skupina lidí za účelem dosažení stanovených cílů.
Demingův manažerský cyklus (nekonečná smyčka)
  1. Naplánuj
    (vytvoření plánu)
  2. Udělej
    (provedení plánu)
  3. Zkontroluj
    (zhodnocení výsledků)
  4. Jednej
    (zlepšení procesu řízení na základě dosažených výsledků)

Etapy projektu z pohledu managementu

Inicializace
Během inicializace se získávají relevantní informace pro plánování projektu. Součástí této etapy je studie vhodnosti a analýza rizik.
Plánování
Cílem plánování je pochopení cílů projektu a vytvoření základny pro sledování a řízení práce. Plánování je třeba provádět v rozumné míře.
Řízení
Při řízení se sleduje aktuální stav projektu a porovnává se s plánem. Na základě toho se provádějí změny v plánu a odhaduje se další vývoj projektu.
Provádění
Provádění představuje samotnou realizaci plánu. Ze všech etap spotřebuje nejvíce času a peněz.
Ukončení
Ukončení představuje předání výrobků nebo služeb zákazníkovi. Zaznamenávají se nové poznatky z vývoje projektu. Vyčleňují se prostředky na údržbu softwaru.

Řízení kvality softwarových projektů

Kvalita softwarového projektu se může různým účastníkům vývoje různě. Pro uživatele odpovídá kvalita jednoduchosti obsluhy systému, efektivitě práce se systémem a např. jeho spolehlivostí. Pro vývojáře kvalita odpovídá čitelným a modifikovatelným programům a srozumitelné a přesné dokumentaci. Pro manažera kvalita představuje dodání výrobku včas, v rámci rozpočtu a dohodnutých požadavků.

Normy pro systém zajištění kvality

U softwarových produktů nelze jednoduše měřit kvalitu při nějaké výstupní kontrole. Předpokládá se, že když má organizace kvalitní proces tvorby softwaru, bude software kvalitní.
ISO 9000
Soustava norem ISO 9000 je primárně určena pro hromadnou výrobu, ale využívá se i pro tvorbu softwaru. Získání certifikátu znamená pro firmu vyšší konkurenceschopnost a lepší jméno. Zavedení ISO 9000 je však poměrně drahé a časově náročné a může se tak projevit na ceně výrobků.

Měření v softwarovém inženýrství

Měření v softwarovém inženýrství umožňuje softwarové projekty řídit. Samotné měření však může snížit efektivitu práce na softwarovém projektu.
Měření může být přímé a nepřímé (odvozené z přímých měřeních). Pro úspěch projektu je důležitá dohoda na kritériích projektu a tato kritéria musí být měřitelná (viz. přátelské uživatelské rozhraní).

Metriky pro software

LOC = Lines Of Code
kLOC = kilo LOC
MTBF = Mean Time Between Failures
Střední doba mezi výpadky systému - používá se pro měření spolehlivosti. Je dána součtem MTTR a MTTF.
MTTR = Mean Time To Recovery
Střední doba opravy
MTTF = Mean Time To Failure
Střední doba do následujícího výpadku
Dostupnost
Dostupnost je pravděpodobnost, že v daném čase program pracuje správně. Počítá se nepřímo jako MTTF/MTBF.
Chybovost
Chybovost je průměrný počet chyb v jednom kLOC.

10. Agilní metodologie

Metodologie
Disciplinovaný proces nad vývojem softwaru, který ho činí predikovatelný a efektivnější.
Agilní metodologie
Kompromis mezi klasickými metodologiemi a chaotickým přístupem k vývoji. Všechny aktivity vývoje jsou součástí návrhu, klíčovou částí dokumentace je samotný zdrojový kód.
Agilní metodologie jsou adaptivní - reagují na změny, procesy se v čase vyvíjejí. Nevytváří se detailní plány pro delší časová období.
Agilní metodologie jsou orientované na lidi - každý proces se přizpůsobuje vývojovému týmu. Není definována pevná posloupnost kroků.
Agilní metodologie lépe reagují na měnící se požadavky zákazníka, ale vyžadují jeho aktivní spolupráci.
Predikovatelnost požadavků
Existují projekty, o jejichž požadavcích máme na začátku jasnou představu. U některých se ale časem požadavky mění - zejména business projekty. Také existují projekty, kde máme na začátku jen mlhavou představu.
Některé procesně orientované modely s tím počítají - iterativní, inkrementální, spirálový. Důležitá je však délka jedné iterace.
Metody orientované na lidi
Lidé mají problémy fungovat konzistentně v průběhu času. Jsou různí a proměnliví (v místě a čase). Lidé jsou komunikující bytosti...
CRC Cards
(Class-Responsibilities-Collaborators)
Identifikace tříd, jejich zodpovědností a spolupracujících tříd.

Extrémní programování (XP)

Zpětná vazba
Správnost systému je ověřována na základě zpětné vazby. Navrhovaný systém je co nejrychleji vyvinut, předložen zákazníkovi a na základě zpětné vazby upravován.
Jednoduchost
Úspora času na jednoduchých částech pro věci opravdu složité
Komunikace
Testování, párové programování, odhady úkolů, ...
Odvaha
Nebát se provést zásadní změny - i za cenu dočasného snížení úspěšnosti testů.
Testování
Ke každé funkci píšeme testy - nejlépe ještě před její implementací.
Párové programování
Víme...
Refaktorizace
Při refaktorizaci se stávající návrh zjednodušuje a zefektivňuje, nemění se však funkcionalita.
Metriky
Pokud přestane metrika plnit svůj účel, je nahrazena jinou.
Iterace
Délka iterace je 1-4 týdny. Nezbytným výsledkem každé iterace je sada testů.

Crystal

Crystal je také metoda orientovaná na lidi, na rozdíl od XP je však méně striktní. Obecně je však méně produktivní než XP. Na konci každé iterace jsou vloženy prostředky klasických metodologií.

Scrum

Iterace má délku 30 dní a nazývá se sprint. Každý den se konají 15 minutová setkání (scrum), kde se analyzuje, co se udělalo a co je potřeba ještě udělat. Scrum je možné kombinovat s XP.

Light RUP

Light RUP používá měsíční iterace. První tři dny v každé iteraci se využívá UML pro vyjasnění návrhu.

11. Ochrana intelektuálního vlastnictví

Vlastnictví
Vlastnictví je neomezené a výlučné právo k "věci", pomáhá řešit spory o vzácné zdroje. Vlastnictví hmotných zdrojů je přirozené a pro společnost prospěšné.
Vlastnictví nehmotných zdrojů je sporné, protože nehmotné zdroje (=myšlenky) postrádají atribut vzácnosti.
Patent
První patenty byly udělovány v 15. století formou monopolu na určitý výrobek nebo službu. Každý stát má svůj patentový úřad s vlastním polem působnosti. Funkci patentového úřadu pro ČR plní Úřad průmyslového vlastnictví.
Aby bylo technické řešení uznáno vynálezem, musí být nové, nezveřejněné, musí být výsledkem výzkumné činnosti a průmyslově využitelné.
Patent udělený v ČR platí 20 let. Souhlas k využití patentu se uděluje licenční smlouvou. Patent je možné prodat.
Autorské právo
Autorské právo vzniká automaticky počínaje vytvořením díla. Podle Všeobecné úmluvy o autorském právu (uzavřené v Ženevě v roce 1952) jsou autorská práva chráněna ještě 70 let po smrti autora.
Počítačové programy jsou autorským právem chráněny jako dílo literární.
Ochranná známka
Ochranná známka je slovní, obrazové nebo prostorové označení výrobku nebo služby. Plní několik funkcí:
Rozlišovací Odlišuje výrobce nebo poskytovatele služeb.
Ochranou Zákazník ví, co dostane.
Propagační Vytváří poptávku po takto označeném zboží.
Obchodní tajemství
Informace podniku, které nejsou v příslušných obchodních kruzích běžně dostupné.
Licence
Licence slouží k udělení práv k použití intelektuálního vlastnictví.
Public domain Veřejné dílo, použitelné bez omezení.
Open source Volně dostupné zdrojové kódy.
Proprietární Výrobce prodává spustitelnou aplikaci.
Open source licence
Pod licencí Open source je šířen software s volně dostupnými zdrojovými kódy. Nejedná se o software zadarmo :-) Program je možné spouštět, studovat, upravovat, dále šířit a zveřejňovat svá vylepšení.
General Public Licence (GPL) Vyžaduje, aby SW zůstal pod GPL.
Lesser GPL (LGPL) Slabší než GPL, využívá se např. pro knihovny.
Free Documentation Licence Používá se pro dokumentaci.
BSD Licence Nevyžaduje, aby byl upravený program šířen pod BSD licencí.