Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

mgr-szz:in-gra:21-gra [2019/06/14 10:53]
lachmanfrantisek reorganizace, upřesnění některých věcí ze slidů, pročištění
mgr-szz:in-gra:21-gra [2020/04/12 16:56]
Řádek 1: Řádek 1:
-====== Zadání ====== 
- 
-  * Proces vývoje SW. 
-  * Metodika Unified Process. 
-  * Agilní vývoj SW. 
-  * Fáze testování a typy testů. 
-  * Softwarové metriky, refaktoring kódu. Kvalita softwaru. 
-  * Odhadování nákladů a času vývoje SW. 
-  * Údržba a znovupoužitelnost. 
- 
- 
-  
-====== Proces vývoje SW ====== 
- 
-<box 90% red|Proces vývoje SW> 
-Proces při němž: 
-  * **uživatelovi potřeby** 
-    * ⬇ transformovány na 
-  * **požadavky na software** 
-    * ⬇ transformovány na 
-  * **návrh** 
-    * ⬇ implementován jako 
-  * **kód** 
-    * ⬇ testován, dokumentován a certifikován pro 
-  * **operační použití** 
-</​box>​ 
- 
- 
-Základní aktivity při vývoji SW: 
-  * **Specifikace** 
-    * Je třeba definovat funkcionalitu SW a operační omezení. 
-  * **Vývoj** 
-    * Je třeba vytvořit SW, který splňuje požadavky kladené ve specifikaci. 
-      - Návrh 
-      - Implementace 
-  * **Validace** 
-    * SW musí být validován („kolaudován“),​ aby bylo potvrzeno, že řeší právě to, co požaduje uživatel. 
-  * **Evoluce** 
-    * SW musí být dále rozvíjen, aby vyhověl měnícím se požadavkům zákazníka. 
-      - Nasazeni 
-      - Vlastni evoluce 
-      - Servisovani 
-      - Phase-out (dožívání) 
- 
- 
-**Modely životního cyklu** 
-  * Vodopád 
-  * Prototypování 
-  * Výzkumník 
-  * Spirálový model 
- 
-===== OO modely ===== 
- 
-  * **Vodopád** 
-    * celý projekt rozdělen do fází (trvající řádově měsíce): 
-      - analýza 
-      - návrh 
-      - implementace 
-      - integrace 
-      - verifikace 
-      - nasazení 
-      - údržba 
-    * chyba vede k návratu k předešlým fázím 
-      * ➖ odhalení chyby je čím dále dražší 
-    * ➖ těžké odhadnout ukončení fáze 
-    * testování neprobíhá současně s vývojem 
-      * ➖ chyby jsou odhalovány pozdě kvůli ​ 
-  * **Iterativní** 
-    * celý projekt vyvíjen v několika iteracích 
-      * každá iterace obsahuje fáze jako u vodopádu (ale může se lišit intenzita) 
-      * ➕ rychlejší zpětná vazba od zákazníka 
-      * ➕ částečné řešení dříve 
-  * **Inkrementální** 
-    * jednotlivé části projektu vyvíjeny nezávisle a následně integrovány. 
-    * samotné část mohou být vyvíjeny další metodikou (vodopád, iterativně,​ XP,...) 
-    * ➕ vždy je výsledkem iterace použitelný produkt ​ 
- 
- 
-<box 90% blue|Metodika Unified Process> 
- 
-  * Generická procesně orientovaná metodika postavená nad UML. 
-    * Definuje KDO dělá KDY, CO a JAK toho má dosáhnout. 
-    * **iterativní a inkrementální** 
-      * Každou iteraci lze chápat jako mini-projekt (fáze: Plánování,​ Analýza a návrh, Implementace,​ Integrace a testování) 
-    * **use-case driven** 
-      * Hlavní pohled udává Use Case diagram, snažíme se vždy dokončit jeden případ užití a pak pokračujeme dále. 
-    * **architecture-centric** 
-      * Jasně udává, že volba a vybudování dobré architektury systému je hlavním cílem projektového týmu. 
-    * **Řízení rizik** 
-      * Vyžaduje, aby se projektový tým zaměřil na řešení nejvážnějších rizik v rané fázi životního cyklu projektu (největší rizika jsou vždy řešena jako první). 
- 
-  * Fáze v UP: 
-    * **Inception** 
-      * Definuje oblast projektu a business využití. 
-    * **Elaboration** 
-      * plán projektu, specifická funkcionalita,​ základní architektura 
-    * **Construction** 
-      * tvorba produktu 
-    * **Transition** 
-      * předání produktu zákazníkovi 
- 
-  * Každá fáze má několik iterací s jasným plánem a výstupem. 
-    * Obsahují "​workflows",​ různě zastoupené během celého vývoje. 
-      * requirements 
-        * Use Case model: use-case, sequence diagram 
-      * analysis 
-        * Analysis model: class/​object diagram 
-      * design 
-        * Design model: class/​object diagram, sequence, state, activity diagram 
-        * Deployment model: deployment, sequence diagram 
-      * implementation 
-        * Implementation model: component, sequence diagram 
-      * test 
-        * Test model: odkaz na všechny odpovídající modely a diagramy 
-      * Use-case spojuje workflows dohromady. 
- 
-{{:​mgr-szz:​in-gra:​up_phases.png?​600|}} 
- 
-</​box>​ 
- 
-<box 90% blue|Metodika Rational Unified Process (RUP)> 
-  * komerční implementace metodiky UP od IBM 
-  * RUP i UP stojí na stejném základu 
-  * RUP mírně detailnější než UP 
-  * drobné odlišnosti v syntaxi 
-</​box>​ 
- 
-====== Agilní vývoj SW ====== 
- 
-  * Metodika zaměřená na lidi. 
-  * Umožňují rychlý vývoj a zároveň dokáží reagovat na změnu požadavků v průběhu vývojového cyklu. 
-  * velmi krátké iterace 
-  * UML pouze jako komplement 
-  * malé fungující týmy 
-  * zákazník zapojen do vývoje 
- 
- 
-**Agilní metodiky**\\ 
-  * Extreme programming (XP) 
-  * Feature-Driven Development (FDD) 
-  * SCRUM Process Development 
-  * Test-Driven Development (TDD) 
- 
-<box 90% orange|Manifesto of Agile Software Development>​ 
-http://​agileManifesto.org 
-  * Individuality and interactions over processes and tools. 
-  * Working software over comprehensive documentation. 
-  * Customer collaboration over contract negotiation. 
-  * Responding to change over following a plan. 
-</​box>​ 
- 
-Rozdíl oproti Model-Driven Engineering (MDE): 
-  * MDE: 
-    * pevná funkcionalita 
-    * variabilní čas a zdroje 
-  * Agile: 
-    * pevný čas a zdroje 
-    * variabilní funkcionalita 
- 
-====== Fáze testování a typy testů ====== 
- 
-<box 90% red> 
-Proces spuštění (části) programu s cílem nalézt chyby. 
-</​box>​ 
- 
-  * Nemůže ukázat nepřítomnost defektů, může pouze ukázat, že v softwaru jsou chyby. 
-  * Testování také ukazuje funkce a výkon. 
-  * Ukazatelem kvality software. 
-  * //​Testování je destruktivní činnost, není vhodné, aby vývojář a tester byla ta samá osoba.// 
- 
-  * Verifikace - test proti vnitřní činnosti (unit testy) 
-    * “Dělat věci správně” 
-  * Validace - test proti specifikaci 
-    * “Dělat správné věci” 
- 
- 
-<box 90% orange|Myers,​1979>​ 
-Test je úspěšný,​ pokud zjistí přítomnost jedné či více chyb v programu. 
-</​box>​ 
- 
- 
- 
-  * **úplné testy** 
-    * prochází všechny logické cesty 
-    * není realizovatelné 
-  * **selektivní testování** 
-    * testujeme důležité logické cesty a cykly 
-    * validuje rozhraní a vytváří důvěru ve vnitřní činnost 
-  * **dynamické testování** 
-    * vzorkování -- provedení programu s předem určenými vstupy a porovnání s očekávanými výsledky 
-  * **BlackBox vs. WhiteBox** 
-    * vidím/​nevidím do struktury programu 
- 
- 
-===== Typy testů ===== 
- 
-  * **Unit testy** 
-    * hledají defekty uvnitř softwarových komponent a verifikují fungování softwarových komponent (např. modulů, programů, objektů, tříd, atd.), které jsou testovatelné samostatně. 
-  * **Integrační testy** 
-    * testuje rozhraní mezi komponentami,​ interakce s různými částmi systému jako jsou operační systém, souborový systém, hardware anebo rozhraní mezi systémy. 
-  * **Systémové testy** 
-    * Systémové testování se zabývá chováním celého systému/​produktu,​ jak byl definován rozsahem vyvíjeného projektu nebo programu. 
-    * Měly by pokrýt jak funkční tak nefunkční požadavky. 
-  * **Akceptační testy** 
-    * Hlavní částí testování z pohledu dodávky aplikace zákazníkovi. 
- 
-**Další testy:** 
- 
-  * **Funkční testy** 
-    * slouží k nalezení rozdílů mezi aktuální aplikací proti funkční specifikaci (funkční požadavky) 
-  * **Nefunkční testy** ​ 
-    * Zahrnují testování výkonu, zátěžové testování,​ stres testování,​ testování použitelnosti,​ testování udržovatelnosti,​ testování spolehlivosti a testování přenositelnosti. 
-    * Je testováním toho, “jak“ systém pracuje (jako celek). 
-  * **Statické testy** 
-    * Provádí manuální prozkoumání (revidování) a automatizovanou analýzu (statickou analýzu) kódu nebo jiné projektové dokumentace (uživ.příručky,​ apod.) 
-  * **Dynamické testy** 
-    * Znamenají provádění testování na již běžící systému, aplikaci 
-  * **Regresní testy** 
-    * Testy na ověření stávající funkcionality (provádí se po opravení chyb či novem release) 
-  * **Progresní testy** 
-    * Testy na ověření nové funkcionality 
-  * **Smoke test** 
-    * Je krátký test, který slouží jako ověření, že vyvíjená aplikace je "​způsobilá"​ pro další fázi testování. 
-  * **Assembly testy** 
-    * Mají za úkol ověřit, že jednotlivé části kódu, testované v rámci unit testů, spolu fungují. 
- 
- 
-====== Softwarové metriky ====== 
- 
-<box 90% red|Softwarová metrika> 
-Údaj (měření, atribut softwaru), který lze nakonec převést na číselné hodnocení. 
-</​box>​ 
- 
-  * **kvantitativní** (číselně vyjádřená) míra, tj. ukazatel do jaké míry se nějaký atribut vyskytuje v systému, komponentě nebo procesu 
-  * **kvalitativní** charakter, tj. nečíselné vyjádření 
- 
-Dělíme na: 
-  * **Produktové** 
-    * zdrojový kód, dokumentace,​ cyklomatická složitost (počet cest programem), počty funkčních bodů 
-  * **Procesní** 
-    * činnosti spojené s vývojem, doba strávená na jednotlivých úlohách, původní odhad a skutečná reálná doba 
-  * **Metriky zdrojů** 
-    * HW, lidé, čas, nemocnost, výkonnost 
- 
-  * **Implicitní (in proces)** 
-    * zjistitelné pouze během vývoje 
-  * **Explicitní (after proces)** 
-    * zjistí se kdykoliv i po skončení vývoje (z artefaktů produktů systému) 
- 
-<box 90% blue|Velikostně orientované metriky> 
-  * Lines Of Code (LOC), 1000 Lines Of Code (KLOC) 
-  * počet chyb/KLOC 
-  * počet defektů/​KLOC 
-  * cena/LOC 
-  * velikost dokumentace/​KLOC 
-</​box>​ 
- 
-<box 90% blue|Funkčně orientované metriky> 
-  * počet uživatelských vstupů 
-  * počet už. výstupů 
-  * počet dotazů 
-  * počet souborů 
-  * počet spojení s jinými systémy 
-</​box>​ 
- 
- 
-===== Metriky složitosti ===== 
- 
-<box 90% blue|Halsteadova metrika> 
-Program je věta, která vznikla na určité slovní zásobě. Na základě poměru délky věty (programu) a velikosti slovní zásoby (počet operátorů a operandů) získáme složitost. 
-</​box>​ 
- 
-<box 90% blue|McCabe odhad složitosti>​ 
-Vnímá program jako graf. Dochází k výpočtu **cyklomatické složitosti**:​ 
-  * Kolik je možných průchodů grafem nebo kolik je tam nezávislých větví. 
- 
-Funguje také jako indikátor spolehlivosti. 
-  * Pokud V(G) je větší než 10 má velký chybový potenciál a zle se testuje. 
-  * V(G) je v podstatě počet uzavřených oblastí v rovinném grafu. 
-</​box>​ 
- 
-<box 90% blue|McClure odhad složitost>​ 
-Také založen na cyklomatické složitosti. Odvozeno od počtu větvení (C) a počtu řídících proměnných (V), především zohledňuje složitost podmínek tj. samotných uzlů! \\ 
-  * <​math>​C + V</​math>​ 
-</​box>​ 
- 
- 
-====== Odhadování nákladů a času vývoje SW ====== 
- 
-Při odhadování se reflektuje: ​ 
-  * Minulý podobný projekt (velmi dobrý výchozí bod) 
-  * Použití dekompoziční techniky 
-  * Použití empirických modelů 
-  * Odhad se zpožděním (nutný určitý buffer, pokud by se něco pokazilo) 
- 
-<box 90% red|Funkční bod> 
-Metrika, říkající kolik toho funkční jednotka umí. Měří aplikační oblast, nezkoumá technickou oblast. 
-</​box>​ 
- 
-<box 90% blue|Putnam>​ 
-T - usílí (člověkodny) 
-D - doba řešení 
-c - hodnota podle předchozích projektů 
-N - Délka programu 
-<​math>​N = c * T^{1/3} * D*^{4/​3}</​math>​ 
-</​box>​ 
- 
- 
-<box 90% blue|Cocomo (COnstructive COst MOdel)> 
-  * Odhadování pracnosti shora-dolů. 
-  * Vychází z Putnama a odhadu délky programů KSLOC. 
-  * Zdroj empirických dat je větší počet předchozích projektů a pozorování. 
- 
-  * **Model** (přesnost výpočtu) 
-    * základní (hrubý odhad) 
-    * střední 
-    * pokročilý (bere v potaz etapu vývoje) 
- 
-  * **Mód** (jak je projekt obtížný) 
-    * organický (jednodušší,​ dobře řešitelné projekty menšího rozsahu) 
-    * bezprostřední (středně obtížné projekty) 
-    * vázaný (rozsáhlé projekty s vysokými nároky na řízení) 
- 
-<​math>​E = a * F * (KLOC)^b</​math>​\\ 
-<​math>​T = c* E^d</​math>​\\ 
- 
-  * a,b,c,d - parametry volené podle úrovně modelu a módu 
-  * T - doba řešení 
-  * E = úsilí 
-  * F = korekční faktor, ekvivalence s „c“ v Putnamovi tedy produktivita 
-</​box>​ 
- 
- 
-<box 90% blue|Cocomo II> 
-Nemá smysl dělat přesné výpočty na začátku projektu -> korekční faktor vždy 1 a základní model. 
- 
- 
-Důvod změny: 
-  * nové SW procesy 
-  * nové jevy měření 
-  * nové možnosti jako znovupoužití SW 
- 
-3 různé modely: 
-  * **ACM (Aplication Composition Model)** 
-    * pro projekty s použitím moderních nástrojů a GUI 
-  * **EDM (Early Design Model)** 
-    * pro hrubé odhady v úvodních etapách, kdy se architektura vyvíjí 
-  * **PAM (Post Architecture Model)** 
-    * pro odhady poté, co byla specifikována architektura 
- 
-</​box>​ 
- 
-====== Kvalita softwaru ====== 
- 
-  * Kvalitativní atributy souvisí převážně s non-funkčními požadavky. 
-    * Performance (výkon) 
-    * Reliability (spolehlivost) 
-    * Security (bezpečnost) 
-    * Scalability (škálovatelnost) 
-    * Maintainability (udržovatelnost) 
- 
-  * Techniky hodnocení kvality 
-    * monitoring a testování 
-      * verifikace kvality existujícího systému 
-    * predikce na základě modelu 
-      * odhad kvality systému ve vývoji 
-    * formální verifikace 
-      * verifikace formulovaných tvrzení o systému 
- 
- 
- 
- 
-**Obecný model kvality (Quality model)** 
-  * **Operation:​** 
-    * Dělá to, to co má? Týká se splnění specifikace,​ standardů a uživatelského očekávání. 
-    * pohled uživatele 
-  * **Revision:​** 
-    * Je dobře navržený? (dobře testovatelný,​ rozšiřitelný apod.) 
-    * Týká se vývoje. 
-    * Pohled vývojářů 
-  * **Transition:​** 
-    * Je dobře nasaditelný?​ (přenositelnost,​ nezávislost na HW, pohodlná instalace) 
-    * Celkový pohled obou stran 
- 
-<box 90% red|Kvalita dle IEEE> 
-Stupeň, do jaké míry systém, komponenta nebo proces splňuje specifikované požadavky. (spíše u SW na zakázku) 
-Stupeň, do jaké míry systém, komponenta nebo proces splňuje zákazníkovy nebo uživatelovy potřeby nebo jeho očekávání. (spíše u krabicového SW) 
-</​box>​ 
- 
-===== Techniky zajištění kvality software ===== 
- 
-  * Obecně lze mluvit o testování,​ validaci a verifikaci produktu. 
-  * Validací se rozumí otázka, zda jsme vytvořili správný produkt tj. jestli produkt odpovídá potřebám uživatele. 
-  * Verifikací se rozumí, zda jsme produkt vytvořili správně tj. zda produkt odpovídá specifikaci. 
-  * Testováním se pak pokoušíme zmíněné předchozí dokázat pro omezenou sadu příkladů. 
-  * Inspekce, recenze 
-  * Testování 
-  * Měření 
-  * Standardy a procedury 
- 
-====== Údržba a znovupoužitelnost + Refaktoring ====== 
- 
-Velmi nákladná v čase, finance odpovídají tomu jak dlouho ho chceme udržet. Náklady jsou 2x -100x větší než na vývoj. Na údržbu se mělo myslet již při vývoji. 
- 
-  * Oprava softwarových chyb 
-  * Adaptace softwaru na jiné operační prostředí 
-  * Přidat nebo měnit systémovou funkcionalitu -> každá implementace degraduje kvalitu systému 
- 
-===== Systémový re-engineering ===== 
- 
-Znovu napsání celé části systému bez účelu změnit její funkcionalitu,​ když subsystémy vyššího systému vyžadují častou údržbu. Cílem je vytvoření nového systému, který by se lépe udržoval (i snížení ceny za údržbu). 
- 
-===== Refactoring ===== 
- 
-Refactoring je kontinuální proces vylepšení skrze vývojový a evoluční proces. Jeho záměrem je vyhnout se degradaci struktury a kódu, která zvyšuje cenu za údržbu. 
- 
-**„Code smells“**\\ 
-  * Duplikovaný kód - kód se opakuje na různých místech programu 
-  * Dlouhé metody 
-  * Long Parameter List - dlouhý seznam parametrů 
-  * Shotgun Surgery - abychom udělali jednoduchou změnu v kódu, je nutné sahat na mnoho míst, indikátor toho, že máme špatný model, že třídy mají špatnou zodpovědnost 
-  * Middle Man - zprostředkované volání objektu zbytečně přes prostředníka 
-  * Lazy Class - prázdná skořápka, třída, která nic nedělá ​ 
-  * Spekulativní obecnost - kód, který je v programu obsažen, aby sloužil někdy do budoucna 
- 
- 
- 
-===== Znovupoužitelnost ===== 
- 
-Hlavní výhodou je několikanásobné finanční ohodnocení jednou vyvinuté komponenty. 
- 
-**Úrovně znovupoužitelnosti (reuse levels)**\\ 
-  * Abstrakce (The abstraction level): analytické prvky 
-  * Objekty (The object level): třídy 
-  * Komponenty (The component level): kolekce tříd 
-  * Systém (The system level): celý systém a různé platformy 
- 
-<box 90% blue|Reuse-Oriented software engineering>​ 
-Model vývoje SW, založen na systematickém znovuužití,​ kde jsou systémy integrovány z existujících komponent (commercial-off-the-shelf = COTS) 
- 
-  * Zbylou funkcionalitu (kterou ještě nemáme) doprogramujme,​ především proxy, adaptéry a GUI. 
-  * Jedná se o standardní budování business systémů. 
-</​box>​ 
- 
- 
-<box 90% orange|Lehmanovy zákony> 
- 
-Zákony se zabývají fází evoluce, popisují rovnováhu mezi novými požadavky a údržbou na straně jedné a zvyšující se složitostí,​ snižující se “business value” na straně druhé. 
- 
-  * **Zákon trvalé proměny** 
-    * Systém používaný v reálném prostředí se neustále mění, dokud není levnější systém restrukturalizovat nebo nahradit zcela novou verzí. 
-  * **Zákon rostoucí složitosti** 
-    * Při evolučních změnách je program stále méně strukturovaný a vzrůstá jeho vnitřní složitost. 
-    * Odstranění složitosti vyžaduje dodatečné úsilí. 
-  * **Zákon vývoje programu** 
-    * Rychlost globálních změn atributů systému se může jevit v omezeném časovém intervalu jako náhodná. 
-    * V dlouhodobém pohledu se však jedná o seberegulující proces, který lze statisticky sledovat a předvídat. 
-  * **Zákon invariantní spotřeby práce** 
-    * Celkový pokrok při vývoji projektů je statisticky invariantní. 
-    * Jinak řečeno, rychlost vývoje programu je přibližně konstantní a  nekoreluje s vynaloženými prostředky 
-  * **Zákon omezené velikosti přírůstku** 
-    * Systém určuje přípustnou velikost přírůstku v nových verzích. 
-    * Pokud je limita překročena,​ objeví se závažné problémy týkající se kvality a použitelnosti systému. 
-</​box>​ 
- 
-<box 90% orange|Brooksův zákon> 
-Týká se začlenění nového člena týmu do zpožděného projektu (ten, který s ním neměl zatím žádný styk :D). Zákon říká, že “Přidání řešitelské kapacity u opožděného projektu může zvětšit jeho zpoždění (náklady na začlenění nového pracovníka do týmu jsou zpravidla větší, než jeho přínos)”. 
-</​box>​ 
- 
-====== Zdroje ====== 
- 
-  * slidy pa103 
-  * slidy pa017 
-  * https://​docs.google.com/​document/​d/​1JVC34-jBqK-hnyxty9YNelID_LChUsvREdgS9NaEjvI 
  
mgr-szz/in-gra/21-gra.txt · Poslední úprava: 2020/04/12 16:56 (upraveno mimo DokuWiki)
Nahoru
CC Attribution-Noncommercial-Share Alike 4.0 International
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0