====== Funkcionální a nefunkcionální požadavky ====== * vznikají v průběhu: komunikace se zákazníkem (koncovými uživateli) * včetně důsledků realizace projektu * vlastnosti jednotlivých požadavků: * konkétnost //(Specific)// * měřitelnost //(Measurable)// * providitelnost //(Archierable)// * vztah k danému byznys plánu //(Rewarding)// * realizovatelný v daném čase //(Time bound)// * testovatelnost * postup: - sběr požadavků: * identifikace zainteresovaných stran * vrcholový management * organizace s horizontálním začleněním vůči zákazníkovi * prostředky * možnost návrhu prázdných prototypů (vizualizace aplikace) * use-case (zjednodušená verze, případně rozšířené o scénáře) - analýza požadavků * řešení nejasných, nekompletních, protichůdných požadavků - zaznamenání požadavků * text, use-case, specifikace procesů * doporučení: * dokumentejte přesně, úplně a srozumitelně * dokumentujte požadavky, nikoliv jejich řešení * dokumentujte strukturovaně, nepřeskakujte mezi "souvisejícími" požadavky * vyhnete se: nekonzistenci dokumentace === Typy požadavků === * **funkcionální požadavek ** * definuje funkcionalitu systému, případně jeho komponent * popis vstup/chování/výstup * ** nefunkcionální požadavek ** * "architektura" * definuje: * code architecture * alternativy: objektový návrh, MVC, integrace/SOA * data architecture * alternativy: * OLTP (Online Transaction Processing) * OLAP (Online Analysis Processing) * Master Data Management * zajišťuje: konzistenci data napříč decentralizovanými zdroji * Busines Inteligence * součásti: reporting, online analýza, data mining, prediktivní analýza * datové modely * možnosti volby: * desktop, client-server, distribuované, centralizované/decentralizované, služby, cloud * výkonnostní požadavek * bezpečnost * dostupnost (průměrný čas mezi výpadky) * stabilita * kapacita (zdroje aktuální, budoucí) * robustnost * interoperatibilita, znovupoužitelnost * design * užitelnost (user friendly) * záloha a obnova systému * certifikace komponent * dokumentace * efektivita * license * sítě * soukromí, anonymizace * testovatelnost * (test výsledků na konzistence, úplnost, jednoznačnost, měřitelnost,ověřitelnost v praxi) * cena * ** odvozené požadavky ** * (vyvozují z výkonnostních a funkcionálních) ===== Poznámky pod čarou ===== === Metodiky vývoje softwaru === * v praxi zejména používaný * **Vodopád** * fáze: - zjišťování požadavků - návrh systému - implementace - testování - údržba * přechody: pouze mezi sousedy (dopředně i zpětně) * **Inkrementální vodopád** * projekt rozdělen do série "malých" vodopádů * **Spirální přístup ** * fáze: - analýza * součásti: stanovení cílů, stanovení alternativ - hodnocení * součásti: vyhodnocení alternativ, identifikace, řešení rizik - vývoj a testování - plánování další iterace * výstup: vytváření neúplných prototypů * **Extrémní programování** * agilní technika * celek jako propojení dílčích, nutných, jednoduchých a jednoúčelových částí * fáze - zadání * obsahuje: požadavky + akceptační kritéria - plánování - návrh * častá: refaktorizace - implementace * prvotní utváření testů * programování ve dvojicích * zabraňuje: autorská slepota * integrace dílčích částí do celku * probíhá v krátkých vývojových cyklech * prováděna jedinou dvojicí programátorů * zdrojové kódy vlastní všichni programátoři * každý přispívá k celku * každý odpovídá za celek * optimalizace se provádí až nakonec - testování - dodávka a akceptace * Zákazník však může akceptační kritéria doplnit a iniciovat tak další cyklus vývoje. * podpůrné prostředky: * **Ganttův diagram** * zobrazuje: průběh a souslednost jednotlivých úloh na časové ose * využití k: určení kritické cesty * nejdelší cesta v projektu od počátku do konce. * úlohy na kritické cestě * jejich zdržení nutně vede na zdržení celého projektu * **PERT** * graf zobrazující souslednost a časovou náročnost jednotlivých úloh * využití: * určení času, který potřebujeme pro dokončení každé úlohy * učení minimálního času pro dokončení celého projektu.