Untitled Deck Flashcards

(147 cards)

1
Q

Co je to časová složitost

A

jak dlouho algoritmus poběží v závislosti na velikosti vstupních dat

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

co je to Prostorová složitost

A

kolik paměti je potřeba k vykonání algoritmu v závistlosti na velikosti vstupních dat

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Co jsou dynamické datové struktury

A

struktury, které se vyznačují tím, že se jejich velikost může během vakonávání programu měnit.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Jak funguje Dynamicky rostoucí pole

A

Eliminuje hlavní nevýhodu klasického pole, což je fixní velikost. Umožňuje tedy přidávat libovoný počet prvků. Dynamické pole ukládá prvky do pole fixní délky. Ve chvíli, kdy je kapacita vyčerpaná, alokuje sa větší pole (většinou 2x větší), všechny prvky se do něj nakopírují a staré pole sa dealokuje. Stejné chování vykazuje i ve chvíli, kdy je pole příliš prázdné, vytvoří se menší pole a opět se do něj překopírují všechny prvky.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Vkládání, vyhledání a mazání u dynamického pole

A
  • Vkládání prvku = Θ(n)
  • Vyhledání jednoho prvku = Θ(1)
  • Smazání jednoho prvku = Je závislé na implementaci. Když mazaný prvek vyměníme s posledným, a toto místo potom uvolníme, bude složitost Θ(1), prvky ale budou přeházené. Pokud při mazání všechny prvky posuneme o 1 místo, bude složitost Θ(n), ale pořadí bude zachované.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Nejlepší metoda pro řazení prvků dynamického pole

A

Quick Sort

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Jak funguje lineární seznam

A
  • Všechny prvky jsou stejného typu a obsahují ukazatel na následující položku v seznamu. V paměti nemusí následovat lineárně za sebou. Při zvětšování seznamu stačí vytvořit nový prvek a pomocí ukazatele ho spojit s ostatními. Lineární seznam může být buď jednosměrný (každý prvek ukazuje na další prvek v seznamu, poslední pak na NULL) nebo obousměrný (každý prvek ukazuje na předešlý i následující prvek)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Vkládání, vyhledání a mazání u lineárního seznamu

A

Vyhledání
O(n)
Procházení seznamu od začátku, než se najde prvek.
Vkládání
O(1) nebo O(n)
O(1), pokud vkládáme na začátek nebo máme ukazatel na místo; jinak O(n) (musíme najít pozici).
Mazání
O(1) nebo O(n)
O(1), pokud máme ukazatel na předchozí prvek; jinak O(n) pro vyhledání prvku.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

metoda pro rychlé řazení - Lineární seznam

A

Merge sort

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Jak funguje hash tabulka

A
  • Vyhledávací datová struktura typu key-value. Hashovací tabulka kombinuje výhody vyhledávání pomocí indexu (složitost O(1)) a procházení lineárního seznamu (nízké nároky na paměť). Pomocí hašovací funkce přiřazujeme klíči index do seznamu, který pak odkazuje na lineární seznam, který obsahuje opět dvojici key-value, jelikož existuje nekonečné množství možných stringů, ale omezené množství hashů, tak se může stát, že dojde ke kolizi a pro různé klíče se spočítá stejný index v seznamu.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Vkádání hledání a mazání u hash tabulky

A
  • Vyhledávací datová struktura typu key-value. Hashovací tabulka kombinuje výhody vyhledávání pomocí indexu (složitost O(1)) a procházení lineárního seznamu (nízké nároky na paměť). Pomocí hašovací funkce přiřazujeme klíči index do seznamu, který pak odkazuje na lineární seznam, který obsahuje opět dvojici key-value, jelikož existuje nekonečné množství možných stringů, ale omezené množství hashů, tak se může stát, že dojde ke kolizi a pro různé klíče se spočítá stejný index v seznamu.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Metody pro rychlé řazení prvků - hash tabulka

A

= Nelze ji nějak řadit, pořadí určuje hash funkce. Pro seřazenou tabulku použít něco jako SortedDictionary (seřazená Hash tabulka)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Jak funguje binární strom

A

Každý prvek stromu má nejvíc jednoho předchůdce a může mít víc než jednoho následníka. Maximální počet následníků je určený stupněm uzlů - lineární (1), binární (2), ternární (3) atd. V informatice je binární strom nejčastěji používaný typ. Pro každý uzel “U” platí, že všechny prvky v levém podstromu jsou menší než “U” a všechny prvky v pravém podstromu jsou větší.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Vkládání, vyhledání a mazání u binárního stromu

A

Průměrně Θ(log n), v nejhorším případě Θ(n)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

metoda pro ryhclé řazení prvků - binární strom

A

Tree sort algoritmus

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Co je a jak funguje Quick sort

A
  • Nejrychlejší řadící algoritmus, momentálně jedním z nejpoužívanějších, paměťově nenáročný, založen na principu rozděl a panuj.
  • Princip = Zvolíme pivot. Na levou stranu pivotu vložíme prvky menší než pivot a na pravou stranu větší než pivot. Prvky řadíme na tyto dvě poloviny, tak, že najdeme prvek na levo, který je větší než pivot a prvek na pravo, který je menší než pivot a prohodíme je. Rekurzivně pak pro tyto dvě části provedeme stejnou akci (zvolíme pivot, do leva dáme menší, do prava větší). Toto opakujeme, dokud nenarazíme na pole velikosti 1. V tento moment je pole seřazeno. Pro volbu pivotu je mnoho strategií, protože je žádoucí zvolit hodnotu, která rozdělí pole zhruba na poloviny. Buď můžeme volit fixně první nebo poslední prvek, popř. náhodný nebo je také populární strategií volba mediánu prvního, posledního a prostředního prvku pole.
  • Výkonnost je tedy dána hlavně volbou pivotu. V nejlepším případě se pole rozdělí na 2 stejné díly při každém rekurzivním průchodu, v nejhorším případě je rozdělení pole nerovnoměrné a průchodů tak bude více (uplně nejhorší by bylo opačně seřazené pole)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Co je a jak funguje Heap sort

A
  • Řadící algoritmus založený na binární haldě
  • Binární halda je binární strom, ve kterém jsou jeho položky seřazeny buď, tak že v rodičovském uzlu je vždy menší číslo než v jeho potomcích (min heap) nebo je v rodičovském uzlu vždy větší nebo rovné číslo těm v jeho potomcích (max heap). Při této reprezentaci také platí, že rodičovský uzel ležící na indexu i má levého potomka na indexu 2i+1 a pravého potomka na 2i + 2.
  • Princip = pro seřazení pole se nejdříve vytvoří halda a následně se seřadí provedením max heap funkce. Při převedení haldy na max heap se tedy vždy rekurzivně projde halda od spodu nahoru a nastaví se, aby rodičovská node byla vždy větší nebo rovna jeho potomkům. Po provedení max heap se pak vždy prohodí první a poslední prvek a z haldy se smaže poslední prvek. Poté se opakovaně zase spouští max heap funkce, dokud není v haldě jen jeden prvek. Prohazování prvků v haldě se propisuje do pole, které třídíme pomocí těch pravidel 2i+1 a 2i + 2.
  • Asymptotická časová složitost je zaručená, proto je heap sort vhodnější pro použití v real-time systémech než v průměrném případě rychlejší quick sort, který může dosahovat složitosti v nejhorším případě až O(n2).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Co je a jak funguje Merge sort

A
  • Opět založen na principu rozděl a panuj
  • Princip = Neseřazený list se nejdříve rekurzivně rozdělejuje na poloviny, dokud se nedostane do bodu, kdy všechny rozdělené seznamy jsou o velikosti 1. V tento moment začne slučovací (merge) část algoritmu a pole jsou rekurzivně slučována. Je vždy porovnávána hodnota prvních prvků dvou polí, do sloučeného pole se pak vždy na začátek vloží menší z těchto dvou hodnot, odstraní se z původního pole a krok se opakuje, dokud se jeden ze slučovaných seznamů nevyprázdní, potom překopírujeme zbytek druhého pole do toho nově sloučeného. Slučuje se, dokud není pole o velikosti původního neseřazeného pole.
  • Oproti quick sortu nemá žádný nejhorší případ, vždy rozděluje pole na 2 poloviny a sloučení dvou polí zabírá lineární čas, merge sort je tak vhodnější pro větší pole a quick sort pro menší. Nevýhodou je, že pro svou práci potřebuje dodatečné pole o velikosti n.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Jaké má asymptotcké složitosti quick sort

A

= v nejlepším případě a průměrně je to Θ(n log n), v nejhorším případě Θ(n2)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Jaké má asymptotcké složitosti Heap sort

A

= ve všech případech Θ(n log n)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Jaké má asymptotcké složitosti Merge sort

A

ve všech případech Θ(n log n)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

vysvětlete algoritmus „hrubé síly“ (naivní)

A
  • Nejjednodušší z algoritmů pro vyhledávání vzorů v řetězci, kontroluje všechny znaky hlavního řetězce oproti vyhledávanému řetezci, takže oproti lepším algoritmům nic nepřeskakuje. Je vhodný pro kratší texty a nepotřebuje žádný čas na přípravu (preprocessing phase) oproti jiným algoritmům.
  • Princip = Jendoduše porovnáváme postupně vyhledáváný řetězec s hlavním řetězcem, dokud najdeme nebo nenajdeme výskyt. Pokud je nalezen výskyt, tak se vrací index, kde začíná.
  • Asymptotická časová složitost = Θ(n*m), kde velikost hledaného řetězce je n a velikost hlavního řetězce je m
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Karp-Rabinův algoritmus

A
  • Stejně jako naivní algoritmus, Karp-Rabinův algoritmus také posouvá hledaný řetězec po jednom. Na rozdíl od naivního, algoritmu ale Karp-Rabinův algoritmus porovnává hashovací hodnotu hledaného řetězce s hashovací hodnotou aktuálního dílčího textu, a pokud se hashové hodnoty shodují, teprve tehdy porovná jednotlivé znaky řetězců.
  • Tento algoritmus tedy musí vypočítat hashovací hodnoty pro samotný řetězec, který hledáme a pro všechny substringy o stejné délce jako je hledaný řetězec, proto musíme zvolit efektivní hashovací funkci. Využívá se často tzv. rolling hash, který využívá vždy předešlý vypočítaný hash a jen od něj odečte hodnotu levého písmena, které bylo posunem vyhozeno z kontrolovaného podřetězce a přičteme hodnotu písmena na pravo, které se nově porovnává. Asymptotická náročnost takovéhoto hashe je pro první hash Θ(m), ale další hashe jsou již konstantní Θ(1).
  • Asymptotická časová složitost = Příprava Θ(m) pro hash, potom průměrně je Θ(n+m) a v nejhorším případě Θ(n*m)
  • Časová složitost se dá zlepšit kvalitou hashovací funkce
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Quick Search algoritmus (Sunday)

A
  • Porovnává se opět hledaný řetězec znak po znaku s hlavním řetězcem. Figuruje zde tzv. testový znak, který je vždy za právě prohledávaným substringem. Znaky se tedy porovnávají, pokud dojde k neshodě, tak se zbytek řetězce už dále neporovnává, ale přeskakuje se za testový znak. Pokud se testový znak nachází ve hledaném řetězci, tak se hledaný řetězec posune pod testový znak, tak aby pod sebou byl testový znak a první výskyt daného znaku v hledaném řetězci (řetězec se posune o co nejmenší vzdálenost, aby k tomu došlo) a začne se znovu porovnávat. Toto chování se opakuje, dokud je nebo není nalezen řetězec.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Co je to objekt v OOP
Je to základní stavební blok OOP. Může se jednat o jakoukoliv datovou strukturu, která obsahuje nějaké vlastní proměnné a má nějaké operace, které s konkrétní datovou strukturou logicky souvisejí. Bývá to nějaký přepis objektu z reálného světa do programovacího jazyka. Objekt často bývá popisován jako instance třídy, která tvoří vzor pro proměnné a metody, které objekt bude mít.
26
Co je to třída v OOP
Třída je tedy vzor podle, kterého se vytváří objekt. Při vtvoření instance třídy se uloží konkrétní hodnoty do paměti. Obecně se třída skládá z nějakých členských proměnných, metod, konstruktoru a popř. destruktoru. - Vytváření instance třídy se provádí klíčovým slovem new, který zavolá konstruktor dané třídy a vrátí referenci na nově vytvořený objekt. Pokud třída obsahuje konstruktor s parametry, tak musíme použít ten, není možné využít výchozí konstruktor bez parametrů (Pokud si tedy sami bezparametrový konstruktor nenadefinujeme)
27
Co je to zapoudzření objektu a jaké máme modifikátory přístupu
Zapouzdření objektů = je to mechanizmus pro skytí vnitřního stavu objektu, aby s ním šlo z vnějšku komunikovat pouze skrz poskytnuté rozhraní. Není tak možné přistupovat k „vnitřnostem“ objektu, což by mohlo vést k jeho nekonzistenci. K zapouzdření objektů se používají modifikátory přístupu: - Public = přístupné z vnějšku třídy i odvozeným třídám - Private = nepřístupné z vnějšku třídy, je k nim možno přistupovat jen v rámci třídy, ve které jsou definovány - Protected = nepřístupné z vnějšku třídy, ale přístupné odvozeným třídám, tedy těm, které od této třídy dědí - Internal = přístupné z kamakoliv ve stejné assembly, ale nepřístupné z jiné assembly
28
Co jsou to gettery a settery
Používají se často pro přístup k private proměnným v rámci třídy. Jedná se o public metody začínající slovem Get a Set. Slouží k přístupu k proměnným z vnějšku třídy. Pomocí těchto metod se snažíme skrýt konkrétní implementaci. Getter vrací hodnotu private proměnné a Setter hodnotu nastavuje. Výhodou těchto metod je, že můžeme povolit nebo zakázat jednu z nich, tedy proměnná může být jen pro čtení nebo zápis, dále můžeme v těle těchto metod definvat nějakou další logiku, např. validování nebo logování. - V jazyce C# je zabudovaná podpora pro gettery a settery ve formě Property. Přistupuje se k nim úplně stejně jako ke klasickým proměnných v rámci třídy. Základním pravidlem bývá, že metody get by měly být stejně rychlé jako přímý přístup k proměnné, takže by se v rámci getteru neměly provádět časově náročné operace.
29
Co je to konstruktor
= Speciální metoda třídy, která se volá při vytváření instance této třídy, zabraňuje tomu, aby byl objekt v nekonzistentním (nepoužitelném) stavu. Nemá žádný návratový typ, musí být vždy public a jmenovat se stejně jako třída. Když není konstruktor definován, tak se pro třídu používá vždy bezparametrický konstruktor. Konstruktor se dá přetěžovat, tzn. že třída bude mít více definovaných konstruktorů s různými vstupními parametry a odlišnou funkcionalitou. Některé jazyky pak mejí i jiné typy konstruktorů, např. C++ má kopírovací konstruktor, který se zavolá, když je tvořena kopie daného objektu.
30
Co je to destruktor
Speciální metoda třídy, která se volá při likvidaci instance třídy z paměti počítače. Při likvidaci instance třídy by mělo dojít k uvolnění všech zdrojů, se kterými objekt pracoval, to může programátor definovat právě v destruktoru. Destruktor nemá žádnou navrátovou hodnotu a žádné parametry, pokud není přímo definován v třídě, tak překladač vytvoří implicitní destruktor.
31
Jak funguje správa paměti v OOP
Při vytvoření instance třídy se na heapu v paměti alokuje místo pro daný objekt, nad tímto programátor nemá ve vyšších jazycích kontrolu, alokování a dealokování paměti bývá obstaráváno operačním systémem, u nižších jazyků jako C/C++ lze do jisté míry ovlivnit, kdy dojde k dealokaci nebo kam se objekt uloží. V momentě, kdy instanci třídy zrušíme nebo ji vynulujeme, tak je možné paměť uvolnit. K uvolňování paměti slouží mechanizmus zvaný Garbage Collector, který periodicky nebo na požádání ověřuje, zda alokovaná místa v Heap paměti jsou ještě odkazována nějakými proměnnými nebo objektem a pokud ne, tak ukončí instanci tohoto objektu a uvolní paměť, popř. jiné systémové zdroje.
32
Co je to dedičnost
Cílem dědičnosti je znovupoužití kódu ve více třídách, má tak ulehčit práci programátorům. Taky to snižuje redundanci kódu a je jednodušeji rozšiřitelný, není třeba vypisovat ten samý kód furt dokola pro každou třídu. Součástí odvozené třídy se pak stane vše, co má rodičovská třída. Podle programovacího jazyka pak lze dědit od jedné nebo více tříd najednou. - Třídě, od které dědíme se říká rodičovská třída, třída, která dědí se říká potomek. Rodičovská třída tak bývá nějakým zobecněním. - V rámci dědičnosti se volají vždy jako první konstruktory rodičovských tříd. Pokud se v rámci dědičnosti potřebujeme odkázat na rodičovskou metodu/proměnnou/konstruktor, tak se používá klíčové slovo base. - Pokud má rodičovská třída a potomek metodu se stejnými parametry i jménem, tak metoda potomka překrývá metodu rodiče. O tom, která metoda se zavolá rozhoduje typ reference, pokud potomka upcastujeme na rodiče, tak se zavolá metoda rodiče.
33
Jaké jsou modifikátory přístupu u dědičnosti
- Public = Přístupné z vnějšku třídy i metodám odvozené třídy - Protected = Nepřístupné z vnějšku třídy, ale přístupné metodám odvozené třídy, tímto modifikátorem označujeme to, co očekáváme, že využije potomek v rámci dědění, ale jinak by mělo být mimo třídu nepřístupné. - Private = Nepřístupné z vnějšku třídy a nepřístupné metodám odvozené třídy, odvozená třída je sice podědí, ale mohou k nim přistupovat pouze metody rodičovské třídy. - Třídy lze také označit jako neděditelné pomocí speciálního klíčového slova, v C# je to např. klíčové slovo sealed.
34
Co je to kompozice u dědičnosti
U objektů, kde z principu nejde o generalizaci, například souřadnice v dvojrozměrném prostoru nejsou generalizací kruhu nebo čtverce, se používá používá místo dědičnosti kompozice objektů. To znamená, že třída od jiné třídy nedědí, ale obsahuje proměnnou typu té dané třídy (Kruh má proměnnou typu Souradnice). Kompozice je bezpečná a jednoudchá.
35
Co je to upcasting a downcasting u dědičnosti
Upcasting = Přetypování reference z třídy potomka na třídu rodiče. Upcastovaná reference na třídu rodiče pak může přistupovat jen k proměnným a metodám rodiče. - Downcasting = Přetypování reference z třídy rodiče na třídu potomka. Nelze provádět implicitně, musí se nejdřívě ověřit, zda je objekt správného typu. V C# lze downcastovat operátory as, který pokud není přetypování platné vrátí null referenci. Nebo operátor is, který při platném přetypování vrátí true, při neplatném false.
36
Co je to polymorfismus
= Je to vlastnost umožňující, aby objekty měly stejně pojmenované metody, ale jejich implementace byla rozdílná. Různé objekty tedy poskytují stejné rozhraní, pracuje se s nimi na venek stejným způsobem, ale chování každého z nich se liší podle implementace daného rozhraní. Nástrojem pro realizaci polymorfismu jsou pak virtuální metody. Patří sem i přetěžování metod a operátorů.
37
Co je to přetěžování metod
Umožňuje definovat metody se stejným názvem, ale musí se lišit typem nebo počtem parametrů. Překladač pak sám rozhodne, která metoda se použije podle typu a počtu předaných parametrů.
38
Co je to přetěžování operátorů
Podobný název jako přetěžování metod, ale jedná se o jiný koncept. Nepoužívá se tak často jako přetěžování metod. Používá se nejčastěji u matematických knihoven. Umožňuje přetížit aritmetické operátory, tak aby pracovaly s programátorem vytvořenými třídami (např. implementace sčítání komplexních čísel)
39
Co je to virtuální metoda
Jedná se o metodu s pozdní vazbou a o tom, která metoda se zavolá se rozhoduje až za běhu programu podle typu objektu, ne podle typu reference. Pro dekleraci virtuální metody v rodičovské třídě je nutné použít klíčové slovo virtual a pro překrytí virutální metody potomkem je nutné využít klíčového slova override. Potomek tak může překrývat virtuální metody rodičovské třídy. V případě, že potomek nepřekryje metodu rodičovské třídy svou vlastní implementací, tak je volána implementace metody rodičovské třídy.
40
Co je to abstraktní metoda
Je to automaticky virtuální metoda, která nemá v rodičovské třídě implementaci. Určena jen pro dědění, její konkrétní implementaci si doplní vždy až třída, která tuto metodu podědí.
41
Co je to abstraktní třída
Třída označena klíčovým slovem abstract (pokud obsahuje alespoň jednu abstraktní metodu, tak tímto klíčovým slovem musí být označena). Jedná se o třídu, která je určená pouze pro dědění a není možné vytvářet její instanci. Potomek pak s pomocí klíčového slova override musí implementovat abstraktní metody rodičovské třídy. Třída může také obsahovat klasické metody s implementací, fieldy, property atd.
42
Co je to rozhraní u abstraktních tříd
Rozhraní jsou prakticky abstraktní třídy, které mají pouze abstraktní metody a nemají žádné fieldy, může ale obsahovat i property a statické metody. Bývá využito klíčového slova interface, v jiných jazycích se interface implementuje skrz abstraktní třídy (C++). Metody rozhraní v C# jsou automaticky public. Potomek, který implementuje rozhraní musí implementovat všechny metody rozhraní. Obecnou konvencí pro pojmenovávání rozhraní bývá dát před název rozhraní písmeno I. Jedna třída může implementovat více rozhraní. Představuje to, co třída UMÍ dělat.
43
Jaké jsou základní principy OOP
Zapouzdření, Dědičnost, polymorfismus
44
Co je to zapoudzření, (skrývaní dat)
- Mechanizmus pro skrytí vnitřního stavu objektu, aby s ní šlo z vnějšku komunikovat pouze skrz poskytnuté rozhraní. Není tak možné přistupovat k „vnitřnostem“ objektu, což by mohlo vést k jeho nekonzistenci. K zapouzdření objektů se používají modifikátory přístupu (Public, Private, Protected, Internal)
45
Jaká je komunikace mezi objekty
Nejjednodušší komunikací mezi objekty je volání metody jednoho objektu jiným objektem, pro toto je nutné ale objekty skládat do kompozice a jsou na sobě tak závislé. Další možností je využítí tzv. delegátů, což je typ představující referenci na metodu. Umožňuje tak aby metoda mohla být předána jako parametr funkce. Delegát může odkazovat na pojmenované metody, tedy metody, které jsou již definované nebo může obsahovat anonymní metodu, která nemá název, je definována v těle delegáta a dá se na ni odkázat pouze skrz delegáta. V jazyku C# pak lze využít tzv. lambda výrazů, které fungují jako zjednodušený zápis delegátů. Další možností komunikace mezi objekty je Dependency Injection, což je technika pro vkládání závislostí mezi jednotlivými objekty programu tak, aby jeden objekt mohl komunikovat s dalším aníž by v době sestavování měl na daný objekt referenci.
46
Co je to sigleton
Návrhový vzor, který umožňuje vytvořit jednu jedinnou instanci dané třídy po celou dobu běhu programu, při vytváření isntance třídy se tedy vrací již vytvořená instance, pokud již byla vytvořena.
47
Základní principy tvorby aplikací v jazyce C/C++
- Programátor definuje aplikační logiku pomocí klíčových slov a výrazů programovacího jazyka - Zdrojový kód může být členěn do více modulů (souborů) - Programový kód sdružujeme do funkcí - Obecně používané funkce jsou součástí standardní knihovny jazyka C - Ve zdrojovém kódu používáme standardní knihovnu , hlavní funkcí programu je vždy funkce main, která obsahuje seznam argumentů a jejich počet a pro ukončení se využívá vrácení číselné hodnoty return 0; - C++ je objektová nadstavba jazyka C (Objekty lépe modelují reálný svět a vazby v něm) - C++ zpřehledňuje zápis zdrojového kódu (umožňuje využití moderních přístupů při vývoji SW jako principy OOP)
48
Vyhody a nevýhody jazyku C/C++
- Syntaxe využívá závorky a středníky - Jedná se o nízkoúrovňový jazyk v porovnání s jazyky jako Java, C#, Python - Je silně typovaný, tzn. že kontrola typů před spuštěním programu je poměrně přísná oproti třeba JavaScriptu - Výhody = Možnost programovat na nízké úrovni, jedná se o multiplatformní jazyk, dokáže maximálně využít funkcionality HW na kterém běží, je ideální pro programování např. jednočipových mikropočítačů, možnost alokace a dealokace paměti, a tedy totální kontrola nad správou paměti, dokáže být velmi rychlý - Nevýhody = Poměrně složitý na naučení (ukazatele), neobsahuje garbage collector, kód nemusí být bezpečný, kvůli pointerům a globálním proměnným atd. je možné shodit celý program se špatným zacházením s pamětí
49
Překlad zdrojového kódu v C/C++
- K překladu zdrojového kódu se nejčastěji používají standardizované překladače gcc nebo g++ - Preprocessing (předzpracování) = Jedná se o dodatečnou úpravu kódu ještě před samotným překladem. Preprocessor si často překladač volá sám. Preprocessor odstraní ze zdrojového kódu komentáře, nahradí makra (#define) za kód a vloží do modulů kód z hlavičkových souborů. Všechny direktivy preprocessoru začínají znakem #, takže pokud zapíšeme řádek #include , tak preprocessor na místo tohoto řádku vloží obsah souboru stdio.h - Kompilace = Převod námi napsaného kódu do jazyka Assembly kódu - Assembly (poskládání) = Assembly kód se převede do strojového kódu. Tento převedený kód se pak nachází v souboru s příponou .o (tzv. object file) - Linker = Spojí vytvořený object file s externími knihovnami
50
Dělba zdrojového kódu na moduly C/C++
Moduly umožňují organizovat aplikaci do relativně samostatných menších celků, toto vede k lepší přehlednosti rozsáhlejší programů. Do modulů umisťujeme kód, který spolu souvisí a lze určit co bude viditelné pro uživatele modulu a co bude v rámci modulu skryto. Dobře navržené moduly pak zvyšují znovupoužitelnost kódu, lze je samostatně ladit a usnadňují dělbu práce v týmu. - Modul v rámci jazyka C/C++ je tvořen minimálně děma soubory. Prvním je hlavičkový soubor (.h), obsahuje deklarace všech veřejných datových typů, konstant, případně globálních proměnných a prototypy veřejných funkcí. V hlavičkovém souboru by se nikdy neměl vyskytovat implementační kód a definice proměnných. Vše v hlavičkovém souboru by mělo být dobře okomentováno, jelikož slouží jako rozhraní pro programátora. - Druhým souborem modulu je zdrojový soubor (.c), který obsahuje inicializace proměnných a konkrétní implementace všech funkcí modulu. Aby byla zajištěna konzistence mezi hlavičkovým a zdrojovým souborem, tak by měl zdrojový soubor vždy využívat jeho vlastní hlavičkový soubor (rozhraní), tím se umožní překladači kontrola, zda prototypy odpovídají implementacím funkcí.
51
Jaké máme smyčky v C/C++ a jak fungují
- If = Výběr mezi alternativními větvemi toku programu. Pokud je výraz pravdivý, je proveden kód definovaný v těle if podmínky. Výraz je pravdivý, pokud je jeho logická hodnota true nebo má nenulovou hodnotu. If může být rozšířen ještě o else nebo if else. Dá se také zapsat zkráceným zápisem - Switch = Vícenásobné dělení toku programu, jednotlivé větve jsou označeny klíčovým slovem case. Z dané větve se může vyskočit buď klíčovým slovem break nebo vrácením hodnoty pomocí return. Pokud by podmínka nebyla splněna ani pro jednu z větví, tak lze definovat výchozí větev pomocí default. - Goto = Skok na návěští definovaném v kódu. - While = Provádí kód v jeho těle, dokud je podmínka pravdivá. Kód v těle nemusí být proveden ani jednou. - Do-While = Stejná smyčka jako while, ale tělo je provedeno alespoň jednou, protože podmínka je vždy kontrolována až na konci smyčky. - For = Cyklycké provádění kódu, výraz může být inicializován, vyhodnocen oproti nějaké podmínce a také upraven při každém projití smyčky.
52
Funkce a procedury v C/C++ rodzíly a vysvětlení
- Rozdíl mezi funkcí a procedurou je ten, že funkce vždy vrací nějakou hodnotu, procedura ne. - Funkce je podprogram uložený v paměti, výhodou je, že vytváříme znovupoužitelný kód a dělíme práci na menší jednodušší celky. - Standardní funkce jsou obsaženy ve standardních knihovnách (např. prinf() a scanf() jsou deklarovány v ) - Funkce musí být deklarována, což je stanovení signatury funkce, nemá tělo a zpravidla se deklaruje v hlavičkových souborech, když dělíme program do modulů. Funkce musí mít také svou implementaci logiky, ta bývá ve zdrojovém souboru. - Funkce vždy musí mít návratový typ, název, popř. seznam parametrů. Pokud není návratový typ void, tak musí vracet hodnotu pomocí return. - Při spuštění programu se funkce uloží do paměti, při jejím volání pak program přeskočí na adresu implementace funkce v paměti a po jejím provedení se vrátí za místo, kde byla funkce volána. Pokud tedy voláme funkci vícekrát, tak to vždy skáče na to samé místo v paměti. - Podobně jako v C# lze použí lambda funkce, tedy anonymní funkce.
53
I/O operace v C/C++
- I/O operace jsou podporovány ve standardní knihovně , ta obsahuje metody pro čtení ze standardního vstupu či souboru a zapisování na stadaradní výstup nebo do souboru. - stdin = Standardní vstup, obvykle bývá vstup konzole, ale může být přesměrován např. jako vstup ze souboru. - stdout = Standardní výstup, obvykle bývá také konzole, ale může být přesměrováno např. opět jako výstup do souboru. - getchar() = vrátí první znak z stdin - gets() = načte všechny znaky z stdin, dokud nenarazí na ‘\n‘ nebo na EOF - putchar() = zápíše jeden znak na stdout - printf() = zapíše zformátovaný řetězec na stdout, může obsahovat libovolný pročet argumentů, které se vypíšou - scanf() = načte hodnoty z stdin do proměnných, lze specifikovat formát proměnných - sprinf() = jako printf, ale výstup není zapsaán na stdout, ale do specifikované proměnné - sscanf() = jako scanf, ale vstup není z stdin, ale ze specifikované proměnné - fprintf() = výstup zapsán do specifikované proměnné typu FILE - fscanf() = vstup brán ze specifikované proměnné typu FILE - fopen() = otevře soubor a vrátí datovou strukturu, která reprezentuje tento soubor, je nutné specifikovat mód použití (r – pouze čtení, w – přepis souboru, a – zápis na konec souboru, r+ - možnost číst i zapisovat) - fclose() = zavření souboru - fsetpos() = nastavení pomyslného kurzoru ve streamu bytů souboru na danou pozici - fgetpos() = získání pozice pomyslného kurzoru ve streamu bytů souboru - fread() = čtení dat z daného místa v souboru - fwrite() = zápisdat do daného místa v souboru
54
OOP v C/C++ principy
Zapouzdření - Mechanizmus pro skytí vnitřního stavu objektu, aby s ním šlo z vnějšku komunikovat pouze skrz poskytnuté rozhraní. Není tak možné přistupovat k „vnitřnostem“ objektu, což by mohlo vést k jeho nekonzistenci. K zapouzdření objektů se používají modifikátory přístupu: - Public = přístupné z vnějšku třídy i odvozeným třídám - Private = nepřístupné z vnějšku třídy, je k nim možno přistupovat jen v rámci třídy, ve které jsou definovány - Protected = nepřístupné z vnějšku třídy, ale přístupné odvozeným třídám, tedy těm, které od této třídy dědí Abstrakce - Zobecnění konstrukce tříd a objektů Dědičnost - Cílem dědičnosti je znovupoužití kódu ve více třídách, má tak ulehčit práci programátorům. Taky to snižuje redundanci kódu a je jednodušeji rozšiřitelný, není třeba vypisovat ten samý kód furt dokola pro každou třídu. Součástí odvozené třídy se pak stane vše, co má rodičovská třída. Podle programovacího jazyka pak lze dědit od jedné nebo více tříd najednou. - Třída, od které dědíme se říká rodičovská třída, třída, která dědí se říká potomek. Rodičovská třída tak bývá nějakým zobecněním. - V rámci dědičnosti se volají vždy jako první konstruktory rodičovských tříd. Pokud se v rámci dědičnosti potřebujeme odkázat na rodičovskou metodu/proměnnou/konstruktor, tak se v C++ nedá použít klíčové slovo base, jako v jiných jazycích, protože C++ dovoluje dědit od více tříd najednou, rodičovská metoda se pak volá parent_class::print(); Polymorfismus - Je to vlastnost umožňující, aby objekty měly stejně pojmenované metody, ale jejich implementace byla rozdílná. Různé objekty tedy poskytují stejné rozhraní, pracuje se s nimi na venek stejným způsobem, ale chování každého z nich se liší podle implementace daného rozhraní. Nástrojem pro realizaci polymorfismu jsou pak virtuální metody.
55
Šablony a generické třidy v C/C++
- C++ podporuje tvorbu generických tříd i metod pomocí tzv. template - Pro implementaci generiky stačí nad třídu použít klíčové slovo template a nad metodu template - Při využití generických template je pak typ předáván až při volaní dané metody nebo při tvoření instance třídy. - Může pak sloužit např. pro uložení a manipulaci s některými objekty - přičemž je kód napsaný jednou univerzálně s použitím typu "T" a bude fungovat pro různé typy objektů jako int, string nebo vlastní datový typ.
56
Standartni Knihovna STL v C/C++
Standardní knihovna STL (Standard Template Library) - V C++ jsou k dispozici šablony pro často používané operace, tyto šablony jsou součástí knihovny STL Knihovna obsahuje šablony tříd pro často používané úkoly: - Kontejnery pro ukládání informací - Iterátory pro přístup k uloženým informacím - Algoritmy pro manipulaci s obsahem kontejnerů (vyhledávání, seřazování, …)
57
Typy kontejnerů v C / C++
Typy kontejnerů: - Sekvenční (data uložená sekvenčně, tedy za sebou jako pole (array) nebo seznam (list)) - Vector = dynamicky rostoucí pole - List = Spojený list - Deque = Jako vektor, ale je možné přidávat položky i na začátek - Asociativní (data seříděna jako slovník, důsledkem je pak pomalejší vkládání položek, ale rychlé vyhledávání) - Set = Setříděný list jedinečných hodnot - Map = Páry key-value, kde klíč musí být jedinečný - Multiset = Setříděný list, ale je možné uložit položky se stejnou hodnotou - Multimap = Páry key-value, ale klíč nemusí být jedinečný
58
Více vláknový server jak na to ?
- V programovacím jazyku Java by se více vláknový server dal implementovat jako 2 různé třídy. - První hlavní třída by spouštěla samotný server na nějakém portu a následně v nekonečné smyčce by se příjmaly všechny příchozí žádosti o připojení od uživatelů. - Pro to, aby server byl schopen obsluhovat více uživatelů zároveň, tak je při přijmutí připojení uživatele vytvořeno nové vlákno, tedy jedno nové vlákno pro každého uživatele. Pro to se musí vytvořit nová třída, která bude obstarávat tato vlákna. V každém uživatelském vlákně se pak obstárávají požadavky uživatele a jsou mu zasílány odpovědi. V Javě se pro komunikaci skrz vlákno dají využít metody getInputStream() a getOutputStream(), pomocí kterých můžeme číst/zasílat informace uživateli. - Je možné využít např. také ThreadPoolExecutor, který je ideální na implementaci vícevláknového serveru. Všechny vlákna by se normálně musely evidovat v nějakém poli nebo kolekci, abychom byli schopni zjišťovat jejich status, pokud by měl server pak ustát útok DoS, tak by musel omezovat celkový počet spojení, aby nevyčerpal všechnu volnou paměť. Spojení nad daný limit se ale nesmí zahazovat, musí čekat, než se uzavře některé předchozí spojení a následně je uživatel puštěn na server. Když uživatel zruší spojení, tak je neefektivní rušit instanci jeho vlákna a pro nové spojení instanci znovu tvořit, daleko lepší je staré vlákno „zrecyklovat“. - O toto vše se dokáže postarat ThreadPoolExecutor, který poskytuje kolekci (pool) vláken, ve kterém jsou uloženy všechny běžící vlákna, s tím jsou spjaté 2 parametry: preferovaný počet vláken v poolu a maximální počet vláken v poolu. Fronta požadavků na vytvoření nového spojení může být jakéhokoliv BlockingQueue. Obsahuje také hlavní vlákno, které hlídá příchozí požadavky, toto hlavní vlákno umí nahradit všechny vlákna, která už skončila novými, nebo pokud je vláken více než je preferovaný počet vláken a jsou nečinná nebo překročily keepAlive dobu, tak může nahradit i tyto vlákna novými. Nová vlákna jsou vytvářena podle stavu fronty, pokud je ve frontě méně, než je preferovaný počet. Pokud je jich více, tak se snaží nahradit ty vlákna, které jsou nečinná po dobu větší, než je keepAlive
59
Co je DoS a DDoS
- DoS (Denial of Service) = Při útoku je využito jen jednoho počítače nebo skupiny počítačů připojených k jedné LAN. Snaží se pak zahltit server obrovským množstvím requestů nebo množstvým zasílaných dat, tak aby vyčerpaly jeho zdroje (CPU, RAM) - DDoS (Distributed Denial of Service) = Při útoku je využito více systémů, které mohou být různě po světě a vykonáváji DoS útok na jedinný systém - Proti DoS útokům se dá bránit buď preemtivními opatřeními, jako například monitorováním sítě a následným identifikováním útoků než se stanou, můžeme otestovat DoS útok sám na sobě přizpůsobit tak server buď množstvím prostředků nebo implementovanými ochranami. Také je nutné mít plán, který provedeme pro obnovení systému po úspěšném DoS útoku.
60
co je a ajak funguje SYN Flood útok
- Typ útoku DDoS, zneužívá handshake procesu v TCP/IP připojeních - Jeho cílem je udělat server nedostupným tím, že opakovaně posílá požadavek na připojení (SYN pakety), čímž znemožní přístup všech dostupných portů serveru. Toto způsobí, že server odpoví ostatním uživatelům velmi pomalu nebo vůbec. Princip - Za normálních okolností TCP/IP připojení provede 3 kroky pro navázání spojení: - Uživatel pošle SYN (synchronizační) paket serveru aby inicializoval připojení - Server odpoví na tento paket SYN/ACK paketem, aby potvrdil komunikaci a uloží si informace o nadcházejícím spojení do bufferu a drží tzv. polootevřené spojení, kdy čeká na finální ACK paket od uživatele. - Uživatel pošle ACK paket, aby potvrdil příjem paketu ze serveru, po dokončení těchto tří kroků je připojení otevřené a je možné posílat a příjmat data - Pro vytvoření DoS útoku útočníkovi stačí odesílat velké množství SYN paketů jako by chtěl normálně komunikovat, neprovádí však už třetí fázi handshaku. Takže na serveru, který je cílem útoku dojde postupně k zaplnění bufferů pro polootevřená spojení a server již není schopen přijímat další spojení a je tak efektivně nedostupný. Alternativou je ještě, že dojde k úplnému vyčerpání paměti, pokud není nastaven maximální počet spojení.
61
Jaké jsou typy útoků SYN
Typy útoků: - Přímý útok = Útočník používá svůj počítač a IP adresu a je tak zranitelný vůči odhalení, pro vytvoření útoku stačí zabránit svému PC, aby odpovídal na SYN/ACK pakety ze serveru. - Spoofed útok = Útočník svou adresu skryje, aby byl těžko dohledatelný. Útočníci se tak vydávají za IP adresy počítačů, které jim nepatří, v ten moment nastává ale problém, že pokud takový počítač dostane od serveru SYN/ACK paket, aniž by zaslal SYN paket, tak odpoví paketem RST, který celé spojení ukončí a tím je útok značně méně efektivní, proto se využívají IP adresy počítačů, které jsou nedostupné a server je tak nucen držet polootevřené spojení až do vypršení timeoutu, což bývá obvykle až 75 vteřin.
62
Jak se chránit před SYN
- Zvětšit velikost bufferů pro polootevřené spojení, ztíží se tak práci útočníkovi, ale není příliš efektivní - Snížením timeout času, ale opět není efektivní, jelikož jde kompenzovat zvýšením intenzity útoku, navíc při moc nízkém timeout času hrozí, že by server zahodil i validní spojení - Recyklováním nejstarších polootevřených spojení, tato strategie, ale také selhává při zvýšené intenzitě útoku nebo pokud je velikost bufferu příliš malá. - Zapnutí speciálního firewallu, který se předřadí serveru a každé spojení tak jde přes něj. Při obdržení SYN paketu otevře úplné spojení se serverem a dojde tak k tomu, že server nedrží polootevřené spojení, pokud je handshake validně dokončen, tak firewall funguje jako relay, tedy jen přesměrovává pakety mezi serverem a uživatelem. - Využitím SYN-Cookies, které jsou tvořeny na straně serveru. Když server odpovídá na SYN paket, tak zašle i číslo (SYN-Cookie), které pak slouží pro číslování paketů v rámci spojení. Toto číslo je jednoduše vypočítatelné hash funkcí na straně serveru a jde lehce sestrojit ze zdrojové IP adresy, portu atd. Server pak odešle SYN/ACK paket a polootevřené spojení uplně zahodí. Pokud pak obdrží ACK paket, který obsahuje danou SYN-Cookie, která se rovná té zaslané, tak otevře spojení, jak kdyby existovalo polootevřené spojení. Velkým faktorem je efektivita hashovací funkce, často se tato metoda využívá až když jsou zaplněny buffery pro polootevřená spojení, jelikož hashovací funkce zaberou nějaký ten výpočetní čas a mohou taky zatížit server.
63
Popiš SOAP
SOAP (Simple Object Access Protocol) - Jedná se o protokol pro výměnu zpráv přes síť založených na XML, zejména pomocí protokolu HTTP, ale může používat i další např. SMTP, FTP. Je orientován procedurálně. - Tvoří základní vrstvu komunikace mezi webovými službami a poskytuje prostředí pro tvorbu složitější komunikace. Existuje více různých druhů šablon pro komunikaci na protokolu SOAP, nejznámější je RPC šablona (Remote Procedure Call), což je technologie, která umožňuje vykonávat kód na jiném místě, než je umístěn volající program. Jedná se tedy o komunikaci typu klient-server, kde server ihned odpovídá na dotazy klienta. - Zdlouhavá syntaxe XML je jednoduše čitelná pro člověka, ale složitá pro počítač na parsování a validování. Výkon počítačů tuto nevýhodu ale kompenzuje. Nevýhodou je také velké množství znaků v SOAP requestu/response a také složitost implementace. Výhodou pak je to, že se naváže na žádný specifický protokol ani architekturu. - Struktura je jednoduchý XML dokument, který má kořenový element Envelope. V této obálce jsou pak uzavřeny dva elementy Header (hlavička) a Body (tělo). Hlavička je přitom nepovinná a používá se pro přenos pomocných informací pro zpracování zprávy – například identifikaci uživatele, autentizační informace (jméno, heslo) apod. V těle se pak přenášejí informace identifikující volanou službu a předávané parametry - SOAP používá jmenné prostory pro identifikování jednotlivých částí XML zprávy. Obálka, hlavička a tělo zprávy patří do jmenného prostoru http://schemas.xmlsoap.org/soap/envelope/.
64
Jaké jsou výhody a nevýhody mezi SOAP REST
- Klíčovým rozdílem mezi REST a SOAP jsou věci, ke kterým chtějí přistupovat. REST je ideální pro získávání dat, častokrát je používaný pro veřejné nebo partnerské API na internetu. SOAP na druhou stranu odhaluje aplikační logiku přes různou sadu rozhraní a je tak ideální na vykonávání operací. V realitě je však možné dosáhnout většiny use-casů přes SOAP i přes REST.
65
Jaké máme metody vývoje mobilních aplikací
Nativní, Webové, hybridní
66
Nativní aplikace
- Patří sem např. vývoj na OS Android nebo iOS - Využívají nativního API a SDK - Jsou cílené na konkrétní platformu - Mají přímý přístup k hardwaru zařízení - Vývoj je odlišný na každé platformě, jelikož každá platforma má vlastní specifika - Dosahují vždy nejlepšího výkonu na dané platformě - je možné využít vývojářských a ladících nástrojů poskytovaných vydavatelem platformy - Výhody = výkon aplikace, možno využít všech funkcí telefonu - Nevýhody = dražší a složitější na vývoj - Vhodné pro vývoj aplikací, které mají běžet rychle i na starších mobilních zařízeních, také pokud jsou v aplikaci animace nebo jiné designově náročné prvky. Vhodné také když je důležitý perfektní uživatelské zážitek nebo pokud jde o hru, rozšířenou realitu, úpravu fotek, videí atp. - Pro vývoj na Andoridu se používá Android Studio + Android SDK (obsahuje emulátor, image jednotlivých verzí OS), programovací jazyk Java, Kotlin (možné použít i C/C++ pomocí Java NDK) - Pro vývoj na iOS se používá Xcode (obsahuje všechny vývojářské nástroje, emulátor, image jednotlivých verzí OS), programovací jazyk nejdříve Objective-C, nyní Swift (možné použít i C)
67
Webové aplikace
- Patří sem mobilní weby a progresivní webové aplikace (PWA) - Jsou v podstatě webovou stránkou, využívají totiž webové technologie - Nemají přístup k hardwaru zařízení, výjimkou jsou zařízení dostupná skrz HTML5 API (GEO, GPS, kamera, fotky) - Nedistribují se přes obchody, ani se neinstalují, ale lze je uložit na plochu - Výhody = Každý web může být mobilní aplikací, pokud má přizpůsobení pro mobilní design, rychlý a levný vývoj - Nevýhody = Aplikace jsou málo výkonné, nevhodné pro některé typy aplikací, všechny výpočty jsou na straně serveru a tak nesmí dojít k výpadku internetového připojení
68
Výhody a nevýhody webových aplikací
- Výhody = Levné, multiplatformní (pokrytí více platforem najednou bez velkých rozdílů), jednoduché na naučení, využívá klasické webové rozhraní. - Nevýhody = Málo výkonné, problém s fragmentací zařízení, tedy je velké množství verzí a je těžké pokrýt všechny (hlavně u Androidu), může dojít k problémům na specifických zařízeních, horší debugování.
68
Hybridní aplikace
- Patří sem vývoj např. pomocí Ionic, Flutter, Xamarin - Existuje více druhů, ale nejčastěji používají webové technologie - Aplikace je interpretována pomocí systémového internetového prohlížeče - Používá nativní kód pro základ aplikace, který obsahuje tzv. WebView (běhové prostředí samotné aplikace) - Používá wrapper technologii (např. Apache Cordova), který zprostředkovává komunikaci mezi webovou technologií WWW a zařízením - Aplikace jsou multiplatformní - Výhody = Rychlý a levný vývoj, multiplatformnost, jednoduché na implementaci a naučení, skvělé pro jednoduché aplikace - Nevýhody = Horší výkon (hlavně na starých telefonech), nevhodné pro aplikace potřebující vysoký výkon a rychlost - Vhodné pokud chceme rychle otestovat nápad na aplikaci a produkční verzi připravit později. Pokud jde o nějakou jednoduchou aplikaci (např. zobrazování a zapisování dat). Také vhodné pro vývoj aplikací, které poběží jen na omezeném množství telefonů (interní aplikace) nebo aplikace, které budou nějak časově omezené na použítí (festival, konference) - Pro vývoj webových i hybridních aplikací je možné využít vývojového prostředí Visual Studio Code, Visual Studio, popř. pro Flutter i Android Studio, Eclipse či IntelliJ IDEA. Programovací jazyk bývá obecně HTML5, CSS, JavaScript. Xamarin pak používá C# a .NET, Flutter používá Dart.
69
čemu jsou vhodné webové aplikace
- Vhodné pokud chceme rychle otestovat nápad na aplikaci a produkční verzi připravit později. Pokud jde o nějakou jednoduchou aplikaci (např. zobrazování a zapisování dat). Také vhodné pro vývoj aplikací, které poběží jen na omezeném množství telefonů (interní aplikace) nebo aplikace, které budou nějak časově omezené na použítí (festival, konference) - Pro vývoj webových i hybridních aplikací je možné využít vývojového prostředí Visual Studio Code, Visual Studio, popř. pro Flutter i Android Studio, Eclipse či IntelliJ IDEA. Programovací jazyk bývá obecně HTML5, CSS, JavaScript. Xamarin pak používá C# a .NET, Flutter používá Dart.
70
Základní třídy nativních aplikací pro android
1. Activity - Reprezentuje jednu obrazovku s uživatelským rozhraním - Aktivity jsou navzájem nezávislé - V jedné aktivitě lze spouštět další aktivity, také je možné spouštět i aktivity jiné aplikace (např. stáhnu soubor pdf, tak můžu spustit aktivitu prohlížeče, aby zobrazil pdf soubor) - Z aktivity lze pustit další aktivitu pomocí třídy Intent, a posléze zavoláním metody startActivity(), kde parametrem je instance třídy Intent. - Typické metody, které obsahuje třída Activity: - onCreate() = Inicializace aktivity, volá se zde metoda setContentView, která definuje UI elementy - findViewById() = uložení UI elementu do proměnné (např. tlačítko, textové pole) - onPause() = metoda, která se zavolá, když je aktivita pozastavena (např. když jde do pozadí) - onDestroy() = metoda, která se zavolá, když se aktivita ukončuje 2. Service - Je to nějaká komponenta běžící na pozadí vhodná pro operace s dlouhým během. Neobsahuje žádné UI. - Použitelné např. pro stahování dat přes síť, nebo třeba hraní hudby na pozadí 3. Content Provider - Poskytuje data v rámci aplikace, ale také i ostatním aplikacím na vyžádání - Data mohou být uložena kdekoliv (v telefonu, databáze, na webu) - Umožňuje tvořit dotazy na data (číst, mazat, aktualizovat, vložit) 4. Broadcast Reciever - Komponenta pro odezvu na systémové notifikace nebo notifikace od jiných aplikací, např. umožňuje reagovat na nízký stav baterie, zamčení telefonu, zhasnutí displeje, vyfocení obrázku atd.
71
Co je to android manifest
- Jedná se o soubor pojmenovaný AndroidManifest.xml nacházející se v root adresáři projektu - Obsahuje důležité informace o aplikaci, které systém zpracovává ještě před samotným spuštěním aplikačního kódu - Specifikuje Java balíček aplikace, jméno aplikace (unikátní ID), verzi. - Jsou zde specifikované jednotlivé komponenty aplikace (activities, services, broadcast recievers, content providers) - Specifikuje třídy, které implementují tyto komponenty a popisuje jejich vlastnosti (např. které typy Intentů zpracují) - Specifikuje, který proces bude hostovat jednotlivé komponenty aplikace - Definují se zde jednotlivé oprávnění pro přístup ke chráněným API (např. čtení/zápis do externího úložiště, použití čtečky prstů, biometriky, atp.) - Specifikuje se zde minimálně verze Android API, na keré lze aplikaci spustit - Specifikuje seznam knihoven, na kterých má aplikace závislost (je na ně nalinkovaná)
72
Jak se oddělují statické zdroje od kódu v nativních android aplikacích
Oddělení statických zdrojů (resources) od zdrojového kódu - Do resources se seskupují textace, obrázky, UI elementy a další statické zdroje aplikace - Oddělaní statických dat umožňuje použít alternativních zdrojů pro specifické konfigurace zařízení (různé velikosti displejů, různé jazyky) - Výhodou je seskupení všech statickýh souborů a jedno místo, také využití alternativních zdrojů - Resources se nacházejí ve složce /res v projektu aplikace - Podadresáře: - drawable = Obrázky - layout = UI elementy - values = Soubory s definicemi barev (colors.xml), stylů (styles.xml) a ukládání stringů (strings.xml) - animator = XML definice animací - mipmap = Launcher ikony v různých rozlišeních - anim = XML definice tween animací - menu = XML s definicí jednotlivých Option Menu, Context Menu, Sub Menu) - Alternativní zdroje se vždy definují jako „výchozí název v res-specifická situace“ (values-cs) - Za běhu aplikace se pak vybírají zdroje podle příslušné konfigurace, např. když mám systémový jazyk češtinu, tak se prohledá adresář /res a pokusí se najít adresář values-cs. Když jej najde, tak se vezmou textace odtud, jinak se vezmou z adresáře values.
73
Životní cyklus aktivity v nativním androidu
- Created = První stav aktivity je její vytvoření. Pro vytvoření aktivity se volá metoda onCreate(). V této metodě je vhodné si načíst jednotlivé UI elementy se kterými bude potřeba pracovat, do proměnných, nastavit události obsluhy tlačítkům atd. Při prvotním vytvoření se automaticky aplikace přenese do popředí. Stavy Created a Started jsou přechodné a systém se rychle přesune na stav Resumed. - Resumed = stav kdy aktivita běži v popředí, uživatel s ní může integrovat, někdy se jí říká také running - Paused = aktivita je částečně zakrytá, např jinou aktivitou (třeba nějaký dialog). Nepřijímá vstupy od uživatele a neprovádí žádný kód - Stopped = Aktivita je kompletně v pozadí, stav a členské proměnné jsou zachovány, ale neprovádí se žádný kód. - Destroyed = aktivita se úplně vymaže, stav i členské proměnné se uvolní. Aktivita lze “zničit” např. při stisku tlačítka zpět, kdy se aktivita ukončí voláním metody finish(). Při stisku tlačítka zpět ji systém zničí, protože předpokládá že již nebude potřeba. Dále může aktivity odstraňovat při nedostatku paměti
74
Způsob spouštění aktivit v android native
- Prvotní aktivita, která se má spustit po zapnutí aplikace se definuje v Android Manifestu. (action MAIN, category LAUNCHER) - Další aktivity lze poté spouštět z jednotlivých aktivit pomocí vytvoření instance třídy Intent, které se předá kontext a aktivita, která se má spustit. Pak už jen stačí zavolat metodu startActivity(), do které předáme instanci právě vytvořeného Intentu a aktivita se spustí.
75
Intent a intend filtres v android native
- Klíčové komponenty aplikace jsou aktivovány pomocí Intentů. - Intent je sada informací (v rámci Intent objektu), popisující vyžadovanou akci (může obsahovat typ intentu, či data, která v rámci něj budou komponentě předána) - Android OS najde patřičnou komponentu, spustí její novou instanci a pošle do ní objekt Intentu - Komponenty deklarují pomocí Intent Filters své schopnosti (typy Intentů na které budou odpovídat) Intent Filters - Android OS musí vědět které intenty která komponenta může obsloužit, proto jsou intent filtry součástí AndroidManifestu - Explicitní intent = Intent, který přímo zná komponentu, kterou má spustit (komponenta je mu předána v konstruktoru při tvoření instance), Intent filtr pak nehraje roli a aktivita je přímo spuštěna. - Implicitní intent = Intent, který nezná přímo komponentu, kterou má spustit, to zjistí porovnáním předaných informací, které porovná se seznamem intent filtrů aktivit v Android Manifestu. Může vrátit jeden nebo více výsledků (když je jich více, tak musí uživatel jeden z nich zvolit)
76
Co je to mikropočítač
Obsahuje mikroprocesor, operační paměť, obvody zajišťující komunikaci s okolím (vstupně-výstupní zařízení), jsou velmi spolehlivé a kompaktní, často se používají pro jednoúčelové aplikace jako je řízení, regulace.
77
jaká je strukutra mikropočítačů
- Procesor = jednotky až stovky MHz, šířka slova 4 až 64 bitů - Operační paměť = paměť typu RAM o velikosti jednotek až desítek kB - Paměť programu = paměť typu ROM, EPROM, EEPROM nebo Flash, obsahuje program a data, velikost desítky až stovky kB - Oscilátor = RC (Resistor-Capacitor) nebo krystal - Vstupně/výstupní zařízení = porty (sériové/paralelní), A/D nebo D/A převodníky, PWM výstup, porty pro sběrnice (Ethernet) - Může obsahovat další periferie, např. řadič přerušení, časovače, čítače, displej, klávesnici, programovatelné hradlové pole
78
Sériové a patralelní porty v mikropočítačích
- Sériová komunikace = Data se přenášejí po 1 bitu, v jednom okamžiku je vždy přenášen jen 1 bit, stačí 1 vodič pro každý směr. Nejjednodušší a nejlevnější možnost, užitečné pro ladění programu. Nejjednodušší formou sériového rozhraní je UART/SCI. - Paralelní komunikace = Data se přenášejí po několika bitech současně, typicky po 8, pro každý bit je nutné mít jeden vodič, v tomto případě by jich bylo tedy 8. Náročnější spojení dat u příjemce. - Asynchronní sériová komunikace = obě zařízení musí mít interní hodiny běžící na stejné frekvenci, pro synchronizaci hodin se využívá start bit při začátku přenosu dat. Obě zařízení se musí tedy zesynchronizovat a pak ve stejných intervalech posílat a číst jednotlivé bity, to je hlavním problémem. - Synchronní sériová komunikace = vedle proudu dat se vysílá také hodinový signál po separátním vodiči, tímto je zajištěna synchronizace obou zařízení, čtení je o dost snažší, ale je potřeba o kabel navíc. - RS-232 = standard pro sériovou komunikaci, využívá se pro propojení dvou sériových zařízení např. PC-PC. Standard definuje protokol pro přenos dat, napětí na signálových linkách, typ konektoru. Je znakově orientovaný, posílají se bloky 8 bitů, 1 start bit, 8 data bitů a 1 stop bit
79
Komunikace pos běrnici v mikropočítačích
- Sběrnice = Skupina vodičů, která přenáší el. signály mezi jednotlivými částmi počítače. Dělí se obecně na datovou (pro přenos dat), adresovou (pro adresování paměti, její šířka určuje maximální počet adres) a řídící (přenos řídících signálů, čtení/zápis)
80
co je to čítač v mikropočítačích
Počítá impulzy signálů. Může být buď typu Counter Up (CTU) nebo Counter Down (CTD), podle toho, jestli při každém impulzu hodnotu zvýší nebo sníží o 1.
81
Co je to časovač v mikropočítačích
Čítač, který automaticky zvyšuje svou hodnotu dle hodinového signálu, můžeme jej využít např. pro odměření časového intervalu (kolik uplynulo času), k vyvolání změn na výstupu v přesně definovaných okamžicích atp. - Do časovače vstupuje hodinový signál o určité frekvenci, frekvence udává, jak rychle bude časovač čítat. Pomocí děličky je možno tuto frekvenci snížit. Např. pokud je frekvence 1 MHz a dělička 2, tak čítač načítá za 1 vteřinu do 500 000. - Pokud je čítač 16 bitový, tak max. velikost je 216 = 65535, po dosažení této hodnoty přeteče a začne čítat od 0. - Hodnota čítače při kterém přeteče je možné nastavit v tzv. modulo registru
82
Co je to přerušovací systém v mikropočítačích
Umožňuje, aby CPU mikropočítače odpovídal na žádosti ze strany vstupních a výstupních zařízení. Při příchodu více přerušení najednou se provede to s větší prioritou. Postup při obsluze přerušení: - Nějaké periferní zařízení zažádá o přerušení. - CPU požadavek akceptuje, pokud je přerušení povoleno na konci právě vykonávané instrukce, současně se znemožní přerušení samotné obsluhy přerušení nastavením registru I = 1. - Přemístění všech obsahů registrů do zásobníku (kromě SP a H, aby se vědělo kam se vrátit po vykonání přerušení) - CPU provede obslužný program přerušení od adresy, která je určena příslušným vektorem přerušení - Po provedení programu obsluhy přerušení se obnoví obsah ze zásobníku zpět do registrů a původní program pokračuje dál Způsoby dělení: - Podle původu - Hardwarové (stisk tlačítka, přetečení časovače, dokončení převodu převodníku) - Softwarové (vyjímky, např. dělení nulou,...) - Podle umístění zdroje - Vnitřní = zdroj přerušení přímo v CPU - Vnější = zdroj přerušení mimo CPU - Podle priority - Maskovatelné = může být zakázáno pomocí speciálních instrukcí - Nemaskovatelné = nelze je zakázat programově, mají větší prioritu jako maskovatelné - Reset = nejvyšší priorita, vyčistí se registry a program se začne vykonávat od začátku
83
Čím se vyznačují mikropočítače s procesorem HCS08
- Taktovací frekvence 8 MHz při 5V, 4 MHz při 3V, 16 bitový ukazatel zásobníku a 16 bitový indexový registr - Přesuny z/do paměti bez akumulátorů, 16 adresovacích režimů, společný pamětový prostor pro data (64 KB)
84
Čím se vyznačují počítače s ARM CORTEX-M
- Levný procesor určený pro mikrokontrolery/chytré snímače, náhrada za 8bit procesory, velmi nízká spotřeba, von neumanova architektura (sdílená paměť pro program a data), Instrukční sada Thumb (kratší instrukce – 16 bitů, 56 instrukcí) - Jednodušší jak aplikační procesory (Cortex-A), má dva režimy CPU (Thread a Handler) - Pipeline se 2 stupni
85
Co je to assembler
- Nízkoúrovňový jazyk symbolických adres - Tvar řádku = Instrukční kod a za ním operand (ADD #5; LDA $80; MOV #2 $80) - Instrukční kód = operace, která se má vykonat (např. ADD, LDA, MOV) - Operandy = případné parametry, které potřebuje instrukce ke své činnosti - Typy operandů = instrukční kód bud nemusí mít žádný operand nebo je operand označen # (číslo napsané za tímto znakem je bráno jako číslo, bez tohoto znaku by se jednalo o adresu v paměti), nebo může být označen $ což říká, že číslo za ním je v šestnáctkové soustavě - Symbolická jména = je možné vytvořit tzv. proměnné s vlastním názvem pro adresy v paměti, takže muzu napsat místo LDA $80 -> LDA cislo (definuje se: cislo RMB 1)
86
Softwarové a hardwarové prostředky pro interní diagnostiku správného běhu mikropočítače
- Nyní již mají mikroprocesory hardwarovou podporu pro ladění, obsahují tzv. On-chip debug unit, která umožňuje debugovat program a také se již dá debugovat v rámci prakticky jakhokoliv IDE při vývoji Hardwarové vybavení: - CoreSight = ladící rozhraní ARM pro ladění programů v jednočipových počítačích. ARM definuje Debug AccessPort přes který debugger získává přístup k CPU. - OpenSDA = ladící adaptér umožňující spojení mezí PC a mikropočítačem. OpenSDA umožňuje nahrát program a ladit jej. Hardwarově je řešené pomocí vlastního mikrokontroléru Kinetis K20 s integrovaným USB rozhraním. Softwarové vybavení: - Bootloader = malý program v mikropočítači ladícího adaptéru. Umožňuje nahrávat do mikropočítače program, který zajišťuje funkcionalitu OpenSDA, tzv. OpenSDA Application - OpenSDA Application = program v mikropočítači ladícího adaptéru, poskytuje funkce jako nahrání našeho programu, jeho ladění a sériovou komunikaci přes virtuální sériový port.
87
co je : Operační systém pro práci v reálném čase (RTOS)
- RTOS je určen pro úlohy v reálném čase, což znamená úlohy, které musí splnit požadavek v daném časovém limitu. - Jeho chování musí být deterministické (předvídatelné) - Obsahuje plánovač (scheduler), který rozhoduje, která úloha se bude na procesoru v daný okamžik vykonávat - Rozděluje se na dvě částí: Popředí (program reagující na přerušení) a Pozadí (program běží jen v době nečinnosti popředního programu) - RTOS musí zajistit přidělování zdrojů počítače procesům, komunikaci mezi procesy, správu paměti, ochranu před vstupem do kritických sekcí a naslouchat přerušením. - V RTOS jsou různé datové struktury pro uchovávání dat v paměti (lineární seznam, kruhový seznam, fronta, zásobník)
87
Podle čeho RTOS Spouští procesy
- Podle času = může spouštět úlohy v danou hodinu nebo pravidelně s určitou periodou - Podle priority = procesy můžou mít priority podle kterých se budou střídat na procesoru, pro to ale je operační systém také vybaven systémem pro přerušení, aby bylo možné přerušit právě zpracovávaný proces s vyšší prioritou - Podle události = hardwarová přerušení, která jsou dána událostí mimo počítač. - Hard RTOS = požadavek na vykonání v definovaném čase musí být absolutní, při nedodržení muze dojít k velmi vážným událostem (ztráta na životech, velké škody na majetku) - Soft RTOS = Dovoluje drobné časové odchylky (např. windows)
88
Softwarové součásti RTOS
- Jádro = Vytváří rozhraní mezi aplikační úlohou a hardwarem mikropočítače - Komunikace mezi procesy = Předávání zpráv mezi procesy a jejich zabezpečení před poškozením nebo ztrátou - Synchronizace procesů = Koordinace vzájemné spolupráce procesů - Přidělování paměti = Alokace bloků paměti RAM pro procesy - Řízení vstupní/výstupních jednotek - Časovače
89
jaké jsou strategie plánování RTOS
- Cyklická = procesor se procesům přiděluje na definovaný čas (časové kvantum), pokud se proces nedokončí v daném čase, tak se na procesor dá jiný proces a předešlý se dá na konec fronty FIFO - Prioritní = procesy jdou na procesor podle jejich priority, ta je jim přidělována podle toho, o jaký proces jde. Když mají stejnou prioritu, tak se střídají na procesoru. Priorita se uděluje také podle pravidla Short Job First, čím kratší proces, tím větší priorita. Je zde problém „stárnutí procesů“ s nízkou prioritou, které by se nedostali na procesor, protože by jej furt vyžíraly procesy s vyšší prioritou, řešeno dynamickou změnou priorit (priorita postupně časem roste) - Kombinovaná = Kombinuje cyklické a prioritní plánování, na nižších úrovních prioritní plánování a na vyšších cyklické - Preemptivní = Může být rozpracovaných více úloh najednou, při příchodu další úlohy s vyšší prioritou se právě zpracovávaná úloha přeruší a pokračuje až když není žádná s vyšší prioritou. Umožnuje rychlou reakci na události v realném čase. - Nepreemptivní = Úlohy jsou prováděny postupně, každá až do konce. OS nemuze odebrat proces z procesoru.
90
Co je to proces a jaké má stavy RTOS
- Je to instance programu realizovaná procesorem. Je to určitý úsek kódu, který můžeme začít vykonávat a jehož vykonávání může být pozastaveno a později znovu pokračovat, to vše jednoznačným způsobem. Řízení procesů realizuje operační systém, proces může nabývat ruzných stavů. Stavy procesu: - Ready = Proces je připraven být obsloužen procesorem, ale čeká ve frontě, protože procesor obsluhuje jiný proces - Running = Proces je vykonáván procesorem - Blocked (čekající) = Proces nemůže pokračovat v činnosti, protože čeká na přidělení nějakého prostředku, např. semaforu nebo čeká na signál nějaké události nebo na uplynutí nějakého času - Suspended = Procesu není přidělován procesor, do tohoto stavu se dostávají jen voláním metody TaskSuspend() a dostanou se z ní metodou TaskResume()
91
Co je to datový vektor procesu v RTOS
(Deskriptor procesu) = je to vektor procesu, který obsahuje jeho identifikaci, prioritu, aktuální stav a adresu v paměti (a také rozsah paměti).
92
Jaké jsou prostředky pro předávání informací mezi procesy
- Fronta (Queue) = Základní prostředek pro komunikaci mezi procesy, může být použita pro komunikaci mezi procesy, pracuje na principu FIFO, když se proces pokouší číst z prázdné fronty nebo zapisovat do plné, tak je převeden do stavu Blocked (čekající) - Zasílání zpráv do schránek = odesílatelé do ní dávají zprávy a příjemci z ní zprávy berou, je to taková společná vyrovnávací paměť, velikost zprávy lze rozdělit na pakety. - Sdílená paměť = Nejrychlejší možnost, jedná se o společný blok virtuální paměti sdílený váce procesy - Sokety (Síťová komunikace) = lze používat i lokálně ke komunikaci v jádře (více procesů může používat jeden soket), data se posílají přes síťové rozhraní, komunikace je obousměrná
93
Jaké jsou prostředky pro synchronizaci
- Mutex = Proces při vstupu do kritické sekce použije zámek (nastaví hodnotu na 1), jakmile opustí kritickou sekci, tak zámek odemkne (nastaví hodnotu na 0) a do kritické sekce může vejít další proces. Pokud proces chce se sdílenými daty tedy něco dělat, tak nejdřívě musí získat mutex a po skončení práce jej zase vrátit, pokud proces s vyšší prioritou čeká na mutex, který má proces s nižší prioritou, tak je procesu, který momentálně má mutex zvýšena priorita na úroven čekajícího procesu s vyšší prioritou. (dědění priorit) - Semafor = zobecněný zámek, je to proměnná typu int, lze k němu přistupovat pomocí 2 atomických operací down() a up(), při vstupu hodnotu semaforu snížíme o 1 a při výstupu ji zvýšíme. Pokud je na 0, tak už do kritické sekce procesy nemohou vstupovat, musí počkat, než nějaký z ní vyleze, omezuje tedy počet procesů, které mohou najednou být v kritické sekci. Může být také tzv. binární semafor a v tom okamžiku se chová stejně jako Mutex. - „Tik“ operačního systému = Je to časová jednotka, na které jsou v OS založeny časovače, plánovače nebo přerušení. Tik může spustit např. přerušení tím, že přetekl časovač. Perioda tiku se pak může pohybovat např. v rozmezí 1-100 ms, ale může být klidně i delší nebo kratší. To kolik tiků se provede za časový úsek záleží na operačním systému.
94
Jaké jsou metody sběrů požadavků
Pozorování činnosti uživatelů (práce s uživateli), studium existujících systémů a dokumentace, dotazníky, rozhovor se zákazníky a uživateli za účelem získání jejich požadavků na systém (Rozhovor je prioritní způsob, nejvíce užitečný i praktický)
95
Co je to analýza požadavků
Identifikace nejasných, nekompletních nebo protichůdých požadavků a následné řešení těchto nesrovnalostí. Jde o zjištění, co uživatelé potřebují a zda je možné to vytvořit
96
Co je to zaznamenávání požadavků
dokumentování požadavků v různých formách, buď jako běžný textový dokument, případy užití nebo specifikace procesů
97
Jak dělíme požadavky
- Uživatelské = zachycují se pomocí běžného textu, obsahují hlavně pohled uživatele - Systémové = podrobný popis funkcionality, popis systémových služeb a omezení, slouží hlavně vývojářům a architektům - Funkční = popisují funkcionalitu systému, to, co systém musí být schopen udělat. Problém je, že často nebývají zadány přesně, pohled uživatele a vývojáře může být jiný a uživatelé neví co chtějí. - Nefunkční = popisují vlastnosti aplikace jako celku a její omezení. Mají velký vliv na celý systém, mohou podnítit vznik fukčních požadavků. Dělí se na Produktové požadavky (efektivita, zabezpečení, spolehlivost), Organizační požadavky (prostředí, vývojové požadavky) a Externí požadavky (legislativa, etika)
98
Co je to model případů užití
- Popisuje chování systému, a tedy realizaci požadavků - Představuje odpověď na otázku „Jak bude systém fungovat?“ - Případ užití je realizace minimálně jednoho z požadavků - Případ užití (UC) je sada několika akcí, které vedou k dosažení určitého cíle. - Pro konstrukci modelu případu užití je nutné definovat hranici systému, aktéry a případy užití - Každý případ užití má svého hlavního aktéra, z jehož pohledu je případ vykonáván, ale může mít i více aktérů. V UC se pak nachází hlavní scénář, který definuje, jak jednotlivý případ užití bude fungovat. Může také obsahovat alternativní scénáře, které slouží k zachycení chyb, vyjímek, přerušení nebo větvení (alternativní scénář se nevrací do hlavního, systém tak může skončit v různých stavech)
99
Jak se větví scénáře užití
- If = představuje klasickou podmínku, kroky se provádí při platnosti podmínky - For = cyklus, který má určitý počet opakování (např. pro každý výrobek se vypíše název, výrobce atd.) - While = cyklus, který se provádí tak dlouho dokud platí podmínka (např. když je aktivní nějaký senzor)
100
Co je to aktér
Je to cokoliv, co interaguje přímo se systémem a stojí mimo hranice systému. Představuje tedy také uživatelskou roli ve vztahu k systému a lze ho využít pro popis oprávnění v rámci systému
101
Jaké jsou vazby mezi aktéry
Jedinou vazbou mezi aktéry je dědičnost, tedy jeden aktér dědí od druhého všechny jeho případy užití (např. admin může dědit od běžného uživatele + mít vlastní případy užití, které uživatel nemůže provádět)
102
Jaké jsou vazby mezi případy užití
- Dědičnost = případ užití dědí vše z případu užití od kterého dědí - Vztah Include = Využívá se, pokud je jeden případ užití součástí jiného, např. volání některé z metod objektu. Rozšiřuje funkci určitého UC a je tak jeho nedílnou součástí - Vztah Extend = Využívá se pro přidání nějaké činnosti za splnění nějaké podmínky. Případ užití tedy může být vykonán, ale nemusí.
103
Jaký je vztah mezi požadavky a případy užití
- Mezi požadavky a případy užití je vždy M:N vztah, každý případ užití musí pokrývat alespoň jeden požadavek. - Nemůže existovat požadavek, který není řešen alespoň jedním případem užití - Vztah se zachycuje buď maticí vztahů (pokud je požadavků mnoho) nebo realizačním diagramem (pokud je požadavků méně)
104
Objekty a třídy v uml co to je
- Objekt je entita, která má atributy (data) a poskytuje nějaké operace (chování objektu) - Objekt je zapouzdřený, a tedy i znovupoužitelný - Objekt je instancí třídy, třída je tedy předpisem (vzorem) pro objekty, v každém systému lze vytvářet jiné typy objektů, hodnoty atributů se u objektů stejné třídy mohou lišit. Klasifikace do tříd je podstatná pro pohled na svět (návrh systému) - Objekty jsou stejné, pokud mají shodné atributy a operace - Objekt se skládá z Identity (identifikace), Stavu (aktuální hodnoty atributů) a Chování (operace, které může objekt provádět) - Komunikace mezi objekty probíhá v objektově orientovaných systémech poomocí zpráv. Zprávy prochází skrz spojení mezi objekty (link) a vyvolává operaci.
105
Co jsou atributy v UML
- Jsou zapsané stylem „viditelnost a název : typ a násobnost = výchozí hodnota“ - Název atributu (podstané jméno) je povinný, jinak je vše volitelné (násobnosti se moc nepoužívají) - Během analýzy není viditelnost podstatná, během návrhu se pak používají private (zapouzdření) Viditelnost: - public (+) = atribut/operace může být přístupný z venku třídy - private (-) = pouze operace dané třídy mohou atribut využívat - protected (#) = pouze operace dané třídy a operace odvozených tříd mohou atribut využívat - package (~) = přístupné všemu co je v daném balíčku
106
Co jsou operace v UML
- Jsou zapsané stylem „viditelnost a název(směr název parametru : typ parametru) : návratová hodnota“ - Název operace je sloveso, nepoužívají se zkratky, mohou mít více než jendu návratových hodnot (vrací více objektů) - Směry: IN (vstupní), OUT (výstupní), INOUT (vstupní, ale může být operací modifikován), RETURN (návratový)
107
Co je diagram tříd v UML
- Je to diagram implementace - Musí být úplný, když ho programátor přepíše do kódu, tak musí fungovat - Diagram je platformově závislý, tedy je specifický pro určité programovací jazyky (v identifikátorech není diakritika, datové typy atributů jsou specifické pro daný jazyk atp.)
108
Jaké jsou metody nalezení tříd v UML
- Instanční diagram = vychází se z objektového modelu, který se zobecní do tříd - Analýza podstatných jmen a sloves = vychází se z existujících dokumentů. Podstatné jména jsou kandidáti na třídy nebo atributy, slovesa jsou odpovědnosti nebo metody třídy. Pracuje se všemi dokumenty (požadavky, scénáře případů) - Metoda CRC (Class Responsibility Collaborator) = metoda založena na brainstormingu, výhodné pro metodiky založené na RAD (Rapid Application Development). Diskusí se sbírají všechny návrhy, které se později analyzují a převedou na třídy.
108
Jaké jsou asociace mezi třídami v UML a jaké máme násobnosti
Asociace mezi třídami - Určuje vztah mezi třídami (viditelnost) - Směrová asociace = určuje viditelnost z A do B, tedy A vidí B, ale B nevidí A. - Agregace = vztah celek-část. Celek představuje kolekci objektů, kolekce i části mohou existovat samostatně. Celek může být součástí jiných kolekcí (např. student má seznam předmětů) - Kompozice = vztah celek-část, ale s pevnou vazbou. Část nemůže existovat (nedává smysl) bez celku. (např. faktura a její řádky) Násobnosti: - 0..* = žádný nebo několik - 1..* = jeden nebo několik - 1 = přesně jeden - 1-7 = jeden až sedm
109
Realizace případů užití
- O realizaci případu užití mluvíme, když je cílem popsat, jak se bude slovně popsaný scénář programovat. - Pro tvorbu realizací se pak vychází z modelu tříd, kde se hledají operace ve třídách, které společně realizují cíl UC - Často se při realizaci případu užití narazí na nové požadavky a může také dojít k upravení případu užití - Pro zachycení interakce se využívají interakční diagramy (tvoří se tzv. „snímek“ systému v daném čase) - Sekvenční diagram = popisuje časově orientovanou posloupnost zpráv, nejvíce popisný, vztahy vyplývají ze zpráv - Komunikační diagram = popisuje přímo vztahy mezi objekty, interakce jsou odvozeny z číslování kroků - Časový diagram = je zde důraz ne reálný čas (pro modelování real time systémů)
110
Co je to sekvenční diagram v UML
- Zachycuje, jak chování popsané scénářem případu užití realizováno pomocí objektů - Objekty jsou zde reprezentovány jako tzv. lifeline - Interakce mezi objekty je reprezentována ve formě zasílání zpráv - Cílem je ukázat, jak se jednotlivé objekty chovají, když jsou propojeny - Výhody = přehledné zachycení pořadí zasílaných metod objektů v čase (větší vyjadřovací schopnost) - Nevýhody = Velké nároky na prostor v horizontálním, někdy i vertikálním směru. Nevhodné pro větší množství objektů
111
Jaké jsou typy zpráv v UML
- Zprávy jsou reprezentovány šimpkami, jsou zasílány od jedné lifeline objektu k další - Synchronní = po zavolání operace zdroj čeká na dokončení dané operace - Asynchronní = po zavolání operace zdroj nečeká na dokončení operace (nutná podpora pro více vláken nebo fronty zpráv) - Návratová = návrat při asynchronní zprávě (cíl vrací řízení zpět zdroji) - Creation/Destruction = zdroj vytváří nebo ruší cílový objekt - Hledací = zpráva je odeslána mimo rozsah interakce (např. z jiného UC) - Ztracená = cíl zprávy není známý - Self-message = může představovat rekurzivní volání operace, nebo volání jedné metody jinou metodou přičemž obě metody patří ke stejnému objektu. Může také představovat operaci, která nepatří žádnému dalšímu objektu, ale je důležité ji zmínit v grafu.
112
Co jsou to fragmenty v UML a jaké mají Operátory
- Slouží k dělení sekvenčního diagramu na části, každá část má pak definované chování. - Slouží k zachycení klíčových slov (If, For, While) ze scénářů užití, případně také alternativní scénáře (zachycuje tedy větvení scénářů užití) - Fragment má vždy jeden nebo více operátorů, který určuje kdy se daná část provede, operátor obsahuje nějakou podmínku Operátory fragmentů: - Opt (option) = podmínka if..then - Alt (alternatives) = vykoná se každá splněná podmínka (switch..case) - Loop = smyčka, má definovanou min. a max. hodnotu, které definují počet opakování pokud platí podmínka - Break = vykoná se před zbytkem interakce, může přerušit smyšku loop - Ref (reference) = odkaz na další interakci
113
Co je to hostadlerův zákon u pracnosti projektu
při vývoji softwaru vše stojí více a trvá déle, než je původní odhad, a to i když vezmeme tuto skutečnost v potaz v původním odhadu. Odhady jsou optimistické (lidé předpokládají, že vše půjde dobře), ale obvykle vše trvá minimálně o 1/3 déle. V odhadech se jen částečně berou v potaz zkušenosti, odhad zahrnuje hlavně analýzu a vývoj. Čas se ale spotřebovává i úkoly typu oprava bugů, tvorba dokumentace, testování…
114
Jaké máme metody odhadu rozsahu a pracnosti SW
Expertní, COCOMO,Functional points,Use cae points
115
Jak se dělí expertí odhady v odhadech
- Metoda Delphi = založeno na získání více odhadů od více expertů. Výsledky jsou pak anonymně zpracovány a zaslány zpět expertům. Tento postup se iteračně opakuje, až do doby, kdy se výsledky odhadů začnou přiklánět k jednomu odhadu. - Metoda tří bodů = v nejjednodušší variantě je to průměr nejhoršího a nejlepšího odhadu. V případě tří bodů se jako finální odhad spočítá součtem 1/4 nejhoršího odhadu, 1/4 nejlepšího odhadu a 2/4 realistického odhadu. - Metoda analogií = založeno na podobných projektech a identifikaci rozdílů mezi novým a již řešenými projekty.
116
Co je metoda COCOMO
Metoda COCOMO - Cost Constructive Model - Jeden z nejznámějších přístupů k odhadům - Je založen na počtu řádků kódu - Typy: - Základní model = hrubý, rychlý odhad - Střední model = bere v potaz vliv i jiných faktorů (např. kompetence týmu) - Pokročilý model = bere v potaz i vlivy vývojové etapy, ve které projekt právě je - Úrovně složitosti projektů: - Organický projekt = jednodušší, dobře řešitelné projekty malého rozsahu, deterministické aplikace - Přechodový projekt = složitější, středně velké projekty, také deterministické - Uzavřený projekt = rozsáhlé projekty, krátké termíny, změny požadavků, velmi složité aplikace (např. realtime) Výpočet: 33200 řádků kódu, základní model, organický mód - KLOC = Kilo Lines Of Code (počet řádků kódu v tisících) - Pracnost v člověkoměsících: MM = a * KLOCb MM = 2,4 * 33,21,05 = 95 člověkoměsíců - Doba vývoje v měsících: D = c * MMd D = 2,5 * 950,38 = 14,1 měsíce - Doporučený počet vývojářů: N = MM / D N = 95 / 14,1 = 6,74 = 7 lidí
117
Co je functional points odhad
- Lze použít na konci detailního návrhu, kdy jsou již specifikovány transakce v budovaném systému a je jasná datová struktura - Metoda primárně určena k měření složitosti systému, vychází se z toho, že čím je systém složitější, tím je také pracnější - Metoda je poměrně objektivní, odhad je prováděn na úrovni celého projektu
118
co je Use case point a jak se počítá
- Vhodné pro první fáze vývoje (ostatní metody nelze kvalitně využít v prvních fázích vývoje) - Základní myšlenkou je, že funkcionalita softwaru je hlavním parametrem pro odhad pracnosti - Use Case Points se často kombinují nebo převádí na Function Points nebo na řádky kódu Výpočet: 1. Zjištění počtu aktérů a případů užití - Jednotlivé typy aktérů mají jinou váhu (1-3) - Jednoduchý (1) = využití API (aktérem je jiný systém) - Průměrný (2) = systém komunikující přes TCP/IP - Komplexní (3) = uživatelé využívající GUI nebo webové stránky 2. Rozdělení případů užití do kategorií - Dělí se např. dle počtu kroků ve scénáři nebo lze kroky také nahradit transakcemi - Jednoduchý (5) = 1 až 3 kroky - Průměrný (10) = 4 až 7 kroků - Komplexní (15) = více než 7 kroků - Celkový počet neupravených Use Case Points je roven součtu 1. a 2. bodu 3. Technické faktory a faktory prostředí - Faktory se skládají vždy z dílčích faktorů, kterým určíme hodnotu 0 (nemá vliv) až 5 (silný vliv), vynásobíme je jejich váhami a sečteme, tím tak získáme TFactor a EFactor (dílčí faktory a jejich váhy jsou dány pevně v nějaké tabulce) - Technický faktor TCF = 0,6 + (0,01 * TFactor) - Faktor prostředí ECF = 1,4 + (-0,03 * EFactor) 4. Upravený počet Use Case Points - Celkový počet UCP (součet 1. a 2. kroku) se vynásobí TCF a EF - Celkový počet UCP = UUCP * TCF * ECF 5. Výpočet člověkohodin - Uvádí se obvykle cca 15 až 30 člověkohodin na 1 UCP
119
Základní řetězec omyl -> chyba -> selhání
- Omyly produkují defekty (chyby, bugy) v programu. Pokud je defekt v kódu proveden, tak systém může selhat. - Omyl (lidský faktor) -> Defekt (chyba, bug) -> Selhání - Příčiny softwarových defektů = Lidé jsou omylní, složitost kódu/návrhu/architektury, časová tíseň, měnící se technologie, nezkušení členové projektu, špatná komunikace mezi členy týmu, může dojít také k selhání zaviněném okolními podmínkami
120
Jaké jsou cíle testování
- Hledat defekty - Dosažení vyšší spolehlivosti a kvality softwaru - Poskytovat informace na základě testů pro rozhodování - Podpořit prevenci defektů
121
Jaký eje základní testovací proces
1. Plánování a řízení testování - cílem je definovat záměry a cíle testování a aktivity, které povedou k naplnění těchto cílů, výstupem je pak plán testování - Plánování testů = definování cílů testování, specifikace testovacích činností - Řízení testů = Porovnávní aktuální postupu vůči plánu testování, reportování stavu testů, zahrnutí odchylek od plánu 2. Analýza a návrh testování - Cílem je transformace požadavků na aplikaci do testovacích případů - Hlavními úkoly je tvorba testovacích případů a testovacích sad a jim následné přidělení priorit, dochází také k přípravě testovacích dat, návrh nastavení testovacího prostředí, příprava testovacích nástrojů a tvorba trasovatelnosti 3. Implementace a vykonání testů - Cílem je příprava testovacích procedur a skriptů, nastavení prostředí a provedení samotných testů - Hlavními úkoly tedy je implementace testovacích případů do automatizovaných testovacích skriptů a procedur, vykonání testovacích skriptů a procedur a následné zaznamenání výstupů z provedených testů a porovnání těchto výsledků s očekávanými výsledky. Pak už jen reportování nesrovnalostí a jejich analýza. 4. Vyhodnocení výstupních kritérií a reportování - Cílem je poskytnutí nezávislého pohledu - Hlavními úkoly je kontrola protokolů o testech vůči výstupním kritériím, zhodnocení je-li potřeba více testů a sepsání souhrnného reportu pro zainteresované osoby 5. Uzavření testování - Cílem je konsolidace (utužení) zkušeností, testwaru a faktů - Hlavními úkoly je kontrola kompletnosti testování, předání pracovních produktů relevantním osobám (např. testware), retrospektivní meetingy a archivace pracovních produktů - Výstupem pak jsou zdokumentované poznatky z procesu testování pro příští projekty
122
Jakých je 7 principů testování
1. Testování ukazuje přítomnost defektů, ale nedokazuje, že zde žádné defekty nejsou. Snižuje se počet defektů, pokud ale nejsou žádné defekty nalezeny, není tím prokázána správnost (všechny testy prošly neznamená, že tam není žádná chyba) 2. Úplné testování je nemožné, tzn. nelze otestovat všechny možné kombinace nebo předpokládané vstupy. Je lepší se zaměřit ty nejdůležitější části skrz analýzu rizik, prioritizaci a výběrem vhodných technik testování 3. Včasné testování šetří čas a peníze, testovací aktivity by měly začít co nejdříve, čím déle tam budou, tím dražší pak může být jejich oprava v budoucnu 4. Shlukování defektů, nalezená chyba znamená často vyšší pravděpodobnost nalezení dalších chyb ve stejné oblasti (komponenta, třída, část kódu) 5. Pesticidní paradox, lze se mu vyhnout psaním nových testů a pravidelnou kontrolou a úpravou stávajících testů, protože když testujeme software pořád stejně, tak stejně jako hmyz po nějaké době začne být „odolný“ a nenajdeme stejnými testy žádné nové defekty 6. Testování je závislé na kontextu, testovat budeme různě např. software jaderné elektrárny a e-shop 7. Falešná představa o neexistenci omylů, testování zajišťuje nalezení a odstranění defektů, ale to není jedinný faktor, jak zajistit úspěšný systém. Dobré testování nezachrání napoužitelný systém, nesplněné požadavky nebo nenaplněné očekávání uživatelů
123
Jaké známe testovací úrovně
- Dělí se na Akceptační, Systémovou, Integrační a Komponentní - Testovací úrovně jsou rozděleny do 6 atributů: Kdo ho typicky provádí, Černá skříňka / Bílá skříňka, Produkty, ke kterým se testování vztahuje, Testovaný objekt (tzn. to co testujeme), Typické defekty a selhání, Typické nástroje a postupy)
124
Komponentní testování
- Testuje vývojář - S přístupem ke kódu (whitebox) - Cílem je otestovat izolované komponenty a ověřit jejich správné chování - Testují se komponenty (moduly, programy, objekty, třídy) - Pro testování s používají STUBS (náhrada za volanou komponentu) a ovladače (náhrada za volající komponentu), simulátory nebo nástroje ve vývojových prostředích - Typickým defektem je špatně implementovaná logika
125
Integrační testování
- Testuje vývojář nebo tester - S přístupem ke kódu (whitebox) - Cílem je otestování interakcí mezi komponentami - Testují se subsystémy, databáze, infrastruktura, rozhraní - Typickým defektem je nekompatibilita v rozhraních (mezi komponentami nebo systémy)
126
Systémové testování
- Testuje tester - Bez přístupu ke kódu (blackbox) - Cílem je otestování chování celého systému - Typický defekt je špatná funkcionalita nebo nedostačující kvalita (výkon)
127
Akceptační testování
- Testují koncoví uživatelé nebo testeři - Bez přístupu ke kódu (blackbox) - Cílem je otestování za účelem upevnění důvěry v systém - Testují se business procesy, provozní a údržbové procesy a uživatelské postupy - Typickým defektem je nedostatečná použitelnost nebo udržovatelnost, nesplněná akceptační kritéria
128
Na co se dělí akceptační testování
- Dělí se ještě na Uživatelské testování (testuje se připravenost na použití koncovými uživateli), Provozní testování (testují systémoví administrátoři), Smluvní testování (testování vůči akceptačním kritériím pro produkci softwaru) a Regulační testování (testování vůči předpisům – vládní, právní, bezpečnostní předpisy)
129
Jaké máme rozdělení typů testů
Funcionální testování - Testuje „co“ systém dělá, ověřuje se vůči dokumentaci návrhu systému (funkční požadavky) Nefunkcionální testování - Testuje „jak“ systém funguje, provádí se měření charakteristik systému (kvantifikace) - Mohou určit výkon, kompatibilitu, spolehlivost, zabezpečení systému a další Testování založené na struktuře (whitebox) - Testování na základě struktury a architektury systému, vidíme dovnitř systému (do kódu) - Lze změřit důkladnost testování (pokrytí), což udává procento prvků daného typu, které byly testováním pokryty Testování založené na modelu (blackbox) - Testování chování systému podle modelu neboli nějaké specifikace, nevidíme dovnitř systému (do kódu) - Na sofware se díváme, jako by se jednalo o černou skříňku. Zajímá nás pouze, jak reaguje. Na základě konkrétních vstupů sledujeme výstupy. Regresivní testování - Slouží k otestování, jestli dříve vyvinutý a otestovaný funkční software po změně stále funguje (změna může ovlivnit něco uplně jinde, co dříve fungovalo), spouští se často několikrát a je tak vhodné automatizovat. Pokud se chyby objeví, říkáme, že došlo k regresi Konfirmační tetování - Pro otestování, že byla původní chyba opravena, testujeme stejný scénář a za stejných podmínek jako jsme původně chybu našli
130
Co je testování bílé skříňky
- Testování na základě struktury (kódu) - Testovací případy a testovací data jsou odvozeny z kódu softwaru, architektury softwaru, detailního návrhu nebo jakéhokoliv jiného zdroje informací o struktuře daného softwaru. (tester má přístup ke všem informacím včetně zdrojového kódu) - Soustředí se na strukturu a způsob zpracování uvnitř testovaného software - Provádí se na úrovni komponent, na úrovni integrace a na systémové úrovni - Specifikace se často používají jako dodatečný zdroj informací pro určení očekávaných výstupů testovacích případů.
131
Co je testování pokrytí a jaké jsou druhy
- Vyžaduje použití nástrojů, pro jednoduché případy lze spočítat ručně - Definuje minimální počet testů k pokrytí příkazů, rozhodování/větvení nebo cest Druhy pokrytí: - Pokrytí příkazů = minimální počet testů k pokrytí všech příkazů v kódu. Požaduje vykonání všech příkazů v kódu alespoň jednou, míra pokrytí měří, zba byl každý příkaz otestován alespon jednou. - Pokrytí rozhodování/větví = minimální počet testů k pokrytí všech větví/rozhodování v kódu (if-else, atd.), každý výsledek rozhodnutí musí být proveden minimálně jednou - Pokrytí cest = minimální počet testů k pokrytí všech cest v kódu
132
Co je testování black box a jaké máme druhy
- Testování chování systému podle modelu neboli nějaké specifikace - Testovací případy a testovací data jsou odvozeny z dokumentace požadavků, specifikací, případů užití nebo uživatelských scénářů pro daný software. - Informace dostupné testerovi spočívají ve znalosti vstupů do aplikace a znalosti očekávaných výstupů - Tester nezná vnitřní logiku aplikace a jeho pohled je z velké části uživatelský - Smyslem je ověřit, jestli očekávané chování odpovídá skutečnému chování - Testovací případy mohou být použity k odhalení nesouladů mezi požadavky a jejich implementací, příp. i jejich odchylek Druhy: - Rozdělení tříd ekvivalence = vstupy jsou rozděleny do skupin, u kterých se očekává stejné chování (např. validní data, nevalidní data, vstupy, výstupy, časově související hodnoty). Dělí se často na validní a nevalidní třídu ekvivalence, které udávají množiny hodnot, které jsou validní nebo nevalidní. - Analýza hraničních hodnot = vytvoření test-casů pro každou identifikovanou hranici vstupních a výstupních hodnot (na okraji třídy ekvivalence). Testy pokrývají validní i nevalidní hraniční hodnoty, musí být otestovány všechny hraniční hodnoty - Rozhodovací tabulka = vhodná pro složitější situace s velkým počtem vstupů, kdy jejich kombinace vede k různým výsledkům. Tyto kombinace a jejich výsledky se zapíší do rozhodovací tabulky pro lepší přehled. - Testování na stavy a přechody = technika, při níž změny vstupních podmínek způsobují změnu stavu v testované aplikaci, chování je modelováno pomocí stavového automatu a testcasy jsou tvořeny pro každý stav automatu, každý přechod a každou možnou posloupnost přechodů - Testování případů užití = technika, která pomáhá identifikovat testcasy, které pokrývají celý systém. Testy jsou odvozeny z případů užití. Výborné pro návrh akceptačních testů
133
Co je testování založené na zkušenostech a jaké máme druhy
Testování založené na zkušenostech - Využívá se zkušenosti vývojářů, testerů a uživatelů (zkušenosti se softwarem, s vývojem, prostředním, s testováním, s kvalitami webových prohlížečů) - Často kombinovány s technikami testování černé a bílé skříňky Druhy: - Odhadování omylů = tester odhaduje nejčastější omyly v aplikaci, na základě toho pak zkouší jenom určité hodnoty a postupy (záporné hodnoty, špatný datum, resize) - Útok na chyby = Systematický přístup k odhalování chyb, testy jsou navrženy k útoku na chyby podle seznamu. Seznamy chyb jsou založeny na zkušenostech, dostupných datech o chybách a selháních a na běžných znalostech toho, proč software selhává - Průzkumné testování = souběžné učení, návrh a provedení testů. Při testování se tester učí, aby mohl vytvořit lepší testy. Je to opak skriptovaných testů
134
Co jsou to dynamické testovací techniky
- Vyžadují mít spuštěný testovaný software nebo aspoň jeho prototyp - Používají se v pozdějších fázích vývoje, jsou zaměřeny na provoz software - Cílem je nacházet selhání
135
Co jsou to statické testovací techniky
- Nevyžadují mít spuštěný testovaný software, předpokládá se v čase neměnné chování, cílem je nacházet chyby - Provádí se typicky před dynamickým testováním - Používají se především v prvních fázích životního cyklu, kdy není vytvořen prototyp aplikace - Kontrola, zda software odpovídá specifikacím, nachází chyby, které by bylo obtížné odhalit dynamickým testováním - Zkoumá se kód, specifikace návrhu a požadavků, testovací případy a procedury, testovací skripty, manuály a uživatelské příručky - Statické techniky se používají pro včasné nalezení chyb v prvních fázích vývoje, ale také pro lepší porozumění kódu, dokumentaci a lepší udržovatelnost kódu - Aktivity při statickém testování = plánování a definování vstupních a výstupních kritérií, kick-off, individuální příprava, provedení/vyhodnocení/zaznamenání výsledků, přepracování, navazující kroky s kontrolou vstupních kritérií
136
Jaké máme druhy statických testování
Revize - Manažer = rozhoduje o vykonání revizí - Moderátor = vede revizi dokumentů - Autor = osoba s hlavní odpovědností za revidované dokumenty - Revidující = jednotlivec se specifickou technickou nebo obchodní znalostí, identifikuje a popisuje nálezy - Zapisovatel = dokumentuje veškeré body Neformální revize - Není to formální proces, výsledky mohou, ale nemusí být zaznamenány, je to levný způsob, jak získat nějaký přínos - Revize je prováděna kolegou nebo technickým vedoucím Walkthrough - Autor seznamuje tým s celým dokumentem za účelem pochopení a získání zpětné vazby Technická revize - Schůzka vedená zaškoleným moderátorem (ne autorem) - Dokumentovaný proces odhalování chyb - Zaměřuje se na technický obsah dokumentu, cílem je vyhodnotit technický návrh, alternativy, nacházení chyb, prověřování souladu se specifikacemi atd. Inspekce - Vedeno moderátorem, jedná se o formální proces založený na pravidlech a kontrolních seznamech - Zahrnuje sběr metrik, má specifikovaná vstupní a výstupní kritéria pro akceptaci inspekce - Výstupem je report zahrnující seznam nalezených chyb (cílem je hledání chyb) Statická analýza kódu - Jedná se o hledání chyb ve zdrojovém kódu - Provádí se manuálně (code review) nebo automaticky pomocí nástrojů - Nachází chyby, které je těžké nebo nemožné najít pomocí dynamického testování - Důvodem je včasná detekce chyb, všasné varování o podezřelém kódu, detekce závislostí a nekonzistencí, kód je pak lépe udržovatelný (pravidla kódování) - Typické defekty = odkaz na proměnnou bez definované hodnoty, nepoužité proměnné, nedosažitelný kód, chybná logika atd.
137
Co je to skevenční model
- Popisuje proces vývoje softwaru jako lineární tok činností. Nazýva se i vodopádový model – vývoj probíhá od sepsání požadavků až po nasazení do provozu, přičemž testování probíhá před koncem, před nasazením do provozu. - Tým organizují projektový manažeři, rozdělují práci a kontrolují tým - Jelikož se změny nejsou typické pro sekvenční vývoj, tak se regresní testování moc nedělá, ale může - Požadavků musí být co nejvíce a to před zahájením vývoje, tedy plánuje se do budoucna, požadavky by se již neměly měnit - V tomto modelu je mimořádné drahé nalezenou chybu opravit, obzvlášť pokud to byla chyba v některých z prvních fází vývoje, takže např.: Chyba v požadavcích mohla způsobit mnoho chyb v návrhu programu, přičem všechny byly odhalené až ve fázi testování.C
138
Co je to V model
- Patří mezi sekvenční modely, považuje se za rozšíření vodopádového modelu - Testování zde probíhá po jednotlivých vývojových fázích, proto lepší než sekvenční vodopádový model - Každá vývojová úroveň má odpovídající testovací úroveň - Je možný i zpětný chod, tedy není zde jen lineární tok činností jako u vodopádového modelu, ale lze jít i opačně, tedy pokud třeba zjistíme nějaký problém při akceptačním testování třeba v systémových požadavcích, tak lze jít zpět a upravit je - Používa 4 úrovně testování = Testování komponent, Integrační testování, Systémové testování, Akceptační testování - Při hotových uživatelských požadavcích již můžu začít tvořit akceptační testy, při hotových systémových požadavcích lze tvořit systémové testy atd. Samotné testování ale pak probíhá až po vývoji, např. jednotkové testování se provádí až po vytvoření komponent atd. Na nejnižší úrovni dochází k samotnému vývoji a revizi kódu.
139
Co je to iterativně inkrementální model
- Říká se mu také agilní vývojový model - Iterativně-inkrementální vývoj je proces získání požadavků, analýzy a vývoje, otestování a vyhodnocení systému v sérii krátkých vývojových iterací - sprintů (např. každé 2 týdny, měsíc) - Každá iterace pak obsahuje všechny testovací aktivity, k testování dochází pořád, každý den se dělají konfirmační testy, regresní testy (jsou velmi nutné dělat), když netestuje, tak si tvoří testovací scénáře a připravuje se na testování - Tým bývá často samoorganizující, musí mít také větší disciplinovanost, členové se moc nehlídají, každý si vezme nějakou práci, ví co má dělat, navzájem se domluví (ale klidně může existovat nějaký projekťák na hlídání lidí) - Požadavkům se říká User Stories, tedy krátký popis pár větama od zákazníka co chce - Výhody = rychlé dodání (např. už po 1. nebo 2. iteraci), rychlá odezva od zákazníka, pružnost, průběžná integrace a testování, nízka cena za opravu bugů, možné udělat změny kdykoliv během vývoje - Nevýhody = nutnost zapojení zákazníka, problémy se stanovováním ceny, větší důraz na disciplinovanost projektového týmu - U agilních projektů se snažíme dokumentovat co nejméně, jen tak aby to bylo přínosné, u sekvenčních modelů se dokumentuje hodně - U agilních projektů jsou změny přirozenou součástí vývoje i testování, očekávají se. U sekvenčních modelů musí dojít ke změnovému řízení, zdlouhavý proces a snažíme se mu předejít např. právě rozsáhlou dokumentací - Plánování, dodání software a revize od zákazníka u agilních projektů probíhá s každou iterací. U sekvenčních modelů se plánuje na začátku dost prediktivně, snažíme se připravit na problémy a dodání softwaru a revize od zákazníka probíhá ža na konci celého procesu
140
Co je to SCRUM
- Založený na sprintech, v iteracích vyvíjíme software, existuje zde tzv. backlog, což je seznam všech věcí, které chceme vyvinout nebo udělat (testovací/manažerské aktivity) - Existují zde denní meetingy, často i se zákazníkem, kde lidi říkají, co dělali, co budou dělat nebo nějaké problémy, kvůli kterým něco nemohli udělat, často se jedná o nějaké procesní věci. - Jsou zde 3 role = Scrum Master (není to vedoucí, jen dohlíží na proces a pravidla, nedohlíží na tým, ochranuje tým před vnějšími vlivy, aby byl co nejproduktivnější), Vlastník produktu (Je to prostředník mezi klientem a vývojovým týmem, ví o produktu nejvíce, tvoří obsah backlogu a určuje priority úkolů), Tým (testeři, analytici, vývojáři – vyvíjí a testují produkt)
141
Co je to extrémní programování
- Tým by měl být pohromadě nejlépe v jedné místnosti, pracoviště by mělo být co nejvíc informativní, na informace by nikdo neměl čekat dlouho - Je hodně zaměřený i na produktivitu týmu, tím způsobem, že dovoluje odpočinek, kecání, zdravé jídlo na pracovišti, často jsou zde i vyhrazená místa pro odpočinek s kulčníkem, fitkem, hrama atd. - Iterace trvají vždycky 1 týden, ale pak bývá ještě jedna velká 3měsíční iterace - Build, nasazení, automatizované testy by dohromady měly trvat maximálně 10 minut - Může se využít Test First Programování, tedy první se napíší testy a na základě nich se pak vyvíjí
142
Co je to kanban
- Není čistě agilní metodika, jedná se o optimalizaci procesu - Říká, že zdroje by měly být využívány co nejvíce a co nejvíce efektivně, pokud lze více aktivit udělat najednou, tak je udělat - Existuje zde kanban tabule, která obsahuje sloupce s úkoly, můžou být v backlogu, In progress, čekající na peer review, In testing, Completed a Blocked. V jednotlivé sloupce jsou často omezeny maximálním počtem lidí, kteří to jsou schopni dělat - U všech úkolů se zaznamenává čas, jak dlouho jaký úkol trvá od zadání do zhotovení
143
Kategorizace nástrojů využívaných pro testování software
- Nástroje pro řízení testování = poskytuje rozhraní pro vykonávání testů, sledování defektů, trasování objektů testování - Nástroje pro řízení požadavků = uchovává poažadavky a jejich atributy, trasuje požadavky k testům, identifikuje nekonzistentní nebo chybějící požadavky - Nástroje pro řízení incidentů = sledují defekty, selhání a požadavky na změnu a umožnují následnou prioritizaci a přiřazení úkolů konkrétním lidem - Nástroje pro správu konfigurací = nejde uplně o testovací nástroj, uchovává informace o verzích a buildech softwaru - Nástroje pro statické testování = poskytuje revidování, statickou analýzu a modelovací nástroje, které odhalují nekonzistance např. v databázových modelech a mohou generovat testovací případy založené na modelech - Nástroje pro specifikaci testů = navržení testů (generování testovacích vstupů) a příprava testovacích dat - Nástroje pro vykonávání a záznam testů = mohou být automatické nebo poloautomatické, využívá se např. skriptů nebo testovacích frameworků, každý testovací případ má jako výstup testovací protokol, popř. nahrávku, je možné použít i tzv. komparátory, které nám dají rozdíly mezi databázemi, soubory nebo výsledky testů. Patří sem také nástroje pro měření pokrytí a bezpečnost. - Nástroje pro výkon a monitorování = dynamická analýza, zátěžové/stress testování pro otestování výkonu systému (simulované podmínky, virtuální uživatelé), monitorovací nástroje pak monitorují systémové zdroje (RAM, CPU) a varují před potencionálními problémy - Nástroje pro specifické oblasti testování = hodnocení kvality dat, testování použitelnosti (zaznamenávání aktivity uživatele)
144
Výhody a nevýhody využití nástrojů, včetně popisu rizik spojených s využitím nástrojů při testování.
Výhody využití nástrojů: - Redukuje opakující se práci (regresivní testy) - Šetří čas, automatické testy jsou velmi rychlé oproti člověku, jsou efektivní - Jsou konzistentní, opakovatelné a přesné (testy jsou vykonávané ve stejném pořadí a se stejnou frekvencí) - Hodnocení testů je objektivní (statické měření pokrytí) - Jednoduchý přístup k informacím o testování (statistiky a grafy postupu testování, výsledky testů) - Možnost testování, které není možné dělat manuálně (zátěžové testy) Nevýhody / rizika využití nástrojů - Risk príliš velkého očakávaní od nástroje (testovací nástroj neudělá z obtížného testovacího scénáře jednoduchý) - Podcenění dodatečného úsilí, času a peněz (nástroj za nás nedokáže udělat vše, je ho také potřeba správně používat, prvotní představení nástroje, nastavení, zaučení, vytvoření testů atd. je drahé oproti manuálnímu testování) - Problémy s interoperabilitou mezi nástroji (různé nástroje mezi sebou nemusí být uplně kompatibilní) - Rizika spojená s dodavatelem nástroje (nástroj může obsahovat chyby, nebude poskytována dostatečná podpora) - Některé testy prostě nepůjdou zautomatizovat