Tvorba software
Z MiS
(Rozdíly mezi verzemi)
(→Profese: Tester po celou dobu!) |
(→Fáze projektu: Doplněno více o nasazení a údržbě.) |
||
| (Není zobrazeno 11 mezilehlých verzí od 1 uživatele.) | |||
| Řádka 1: | Řádka 1: | ||
[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Softwarové inženýrství]] | [[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Softwarové inženýrství]] | ||
| + | <!-- | ||
| + | == Tvorba SW zahrnuje postupy == | ||
| + | ; Analýza | ||
| + | * Profese: analytik | ||
| + | * Vstup: slovní popis zadání; myšlenka, co je třeba udělat | ||
| + | * Výsledek: [[Algoritmus#Problém|problém]] — formálně popsaný (matematicky přesný) popis zadání. | ||
| + | Slovní popis zadání formalizujeme tak, abychom získali problém. | ||
| + | Vstupem je slovní zadání, výstupem je matematicky přesný popis problému. | ||
| − | + | ; Algoritmizace | |
| − | * | + | * Profese: typicky analytik + kodér (může být dále rozděleno) |
| + | * Vstup: Popis problému | ||
| + | * Výsledek: [[Algoritmus|algoritmus (obecný postup řešení)]] | ||
| + | Návrh/nalezení algoritmu pro daný problém. | ||
| + | ; Programování/kódování | ||
| + | * Profese: Kodér, tester | ||
| + | * Vstup: Popis algoritmu. | ||
| + | * Výsledek: Zdrojový kód. | ||
| + | Zápis algoritmu v konkrétním programovacím jazyce. | ||
| − | + | Viz také: [[Algoritmus]]. | |
| − | + | --> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Fáze projektu == | == Fáze projektu == | ||
| − | === Formulace zadání === | + | |
| − | * | + | === Formulace slovního zadání === |
| + | * Slovní formulace toho, co se má vyřešit. | ||
| + | * Rozsah několika vět až odstavců. | ||
| + | * Z tohoto popisu vychází analýza, zadání se při ní dále zpřesňuje. | ||
| + | * Formuluje zákazník nebo jiný zadavatel. | ||
| + | * Požadavky: | ||
| + | ** Jednoznačnost popisu. | ||
| + | ** Přesný výčet funkcí, které má systém plnit. S jakými dalšími navazujícími systémy má interagovat, jací uživatelé s ním budou pracovat,... | ||
| + | ** Ověřitelnost požadavků zadání (!) | ||
| + | |||
=== Analýza === | === Analýza === | ||
| − | + | ; Charakteristika: | |
| − | + | * Vědní disciplína: Softwarové inženýrství | |
| − | + | * Profese: analytik + tester | |
| − | + | * Výsledek: formalizované zadání (teoreticky ideálně až formální popis [[Algoritmus#Problém|problému]]) | |
| − | *Jaká data potřebujeme? | + | ; Řešíme: |
| − | * | + | * Jaká data potřebujeme? |
| − | *řešíme věci a akce z reálného světa | + | * Jaké operace nad daty provádíme? |
| − | + | * Které skupiny (typy) uživatelů budou se systémem interagovat? | |
| + | * Jaké výstupy budeme po systému požadovat? | ||
| + | * S jakými dalšími systémy má náš systém spolupracovat? | ||
| + | * Jaká legislativa se týká naší oblasti a jaká zákonná omezení proto musíme zohlednit? | ||
| + | ; Testujeme: | ||
| + | * Soulad se slovním zadáním. | ||
| + | * Pokrytí všech funkcí slovního zadání. | ||
| + | * Soulad jednotlivých částí: | ||
| + | ** Nejsou v datech položky, se kterými nepracuje žádná operace? | ||
| + | ** Mají všechny operace potřebná data v datech? | ||
| + | ** Odpovídá popis operací charakteru zpracovávaných dat (datový slovník)? | ||
| + | ** Odpovídá popis dat formátu, v jakém nám budou navazující systémy poskytovat data? | ||
| + | <div class="Poznamka"> | ||
| + | V rámci analýzy řešíme věci a akce z reálného světa, tomu odpovídá i terminologie. Minimálně používáme specializované pojmy ze světa IT, výstupům by měl rozumět i zákazník. | ||
| + | </div> | ||
| + | <div class="Varovani"> | ||
| + | Zatím se '''NE'''bavíme o: | ||
| + | * softwarovém či hardwarovém způsobu řešení, | ||
| + | * algoritmech, | ||
| + | * způsobu ukládání dat,... | ||
| + | </div> | ||
| + | |||
=== Návrh === | === Návrh === | ||
*Charakteristika: | *Charakteristika: | ||
**Vědní disciplína: Softwarové inženýrství + Informatika | **Vědní disciplína: Softwarové inženýrství + Informatika | ||
| − | **Profese: | + | **Profese: analytik + kodér + tester |
| − | + | ||
| − | + | ||
**Výsledek: Návrh struktury tříd + algoritmus | **Výsledek: Návrh struktury tříd + algoritmus | ||
| − | *Řešíme třídy a metody | + | * Řešíme: |
| − | + | ** Jak rozdělit jednotlivé části řešení mezi třídy a metody (strukturu tříd, přiřazení atributů a metod). Které entity reálného světa budou popsány samostatnými třídami, které budou figurovat jako atributy jiných tříd. | |
| − | **tlačítka | + | ** Dále jaké pomocné třídy je potřeba zavést pro realizaci programu (okna, tlačítka, posluchače,...). |
| − | ** | + | ** [[Algoritmus]] (obecný postup) řešení jednotlivých dílčích úkolů. |
| − | + | * Podle typu úlohy převládá svou složitostí buď: | |
| − | *Podle typu úlohy převládá | + | ** Návrh struktury — skladové systémy, evidence zaměstnanců apod., kde algoritmy bývají poměrně triviální a je hlavně třeba správně postihnout požadované chování a vztahy mezi entitami. |
| + | ** Algoritmizace — vědecké výpočty, úlohy hromadného zpracování dat, kde pracujeme často s jednoduchými daty bez vnitřní struktury, ale je třeba je zpracovat ve velkém množství efektivně. | ||
| + | |||
=== Implementace === | === Implementace === | ||
*Charakteristika: | *Charakteristika: | ||
| Řádka 64: | Řádka 87: | ||
**Výsledek: Zdrojový kód | **Výsledek: Zdrojový kód | ||
*Píšeme kód, který realizuje algoritmus. | *Píšeme kód, který realizuje algoritmus. | ||
| + | |||
=== Nasazení === | === Nasazení === | ||
| − | * Instalujeme u zákazníka. | + | * Instalujeme u zákazníka (deployment). |
* Zaškolíme obsluhu. | * Zaškolíme obsluhu. | ||
| + | * Sběr zpětné vazby. | ||
| + | |||
=== Údržba === | === Údržba === | ||
| − | * | + | * Aktualizace, záplaty, opravy. |
| − | * | + | * Úpravy v důsledku změn požadavků či legislativy. |
| + | * Migrace dat mezi verzemi. | ||
| + | |||
=== Vyřazení z provozu === | === Vyřazení z provozu === | ||
| + | * Vytvořený systém je vyřazen z provozu a dále se již nepoužívá. | ||
| + | == Testování == | ||
| + | * Testování probíhá ve všech fázích počínaje analýzou a poté při každé úpravě. | ||
| + | * V počátečních fázích (analýza, návrh) testujeme soulad jednotlivých částí dokumentace a návaznosti mezi jednotlivými fázemi. | ||
| + | * Ve fázích implementace a údržby už probíhá klasické testování kódu (black-box testy, uživatelské testování,...), ale i zde zároveň testujeme soulad s návrhovou dokumentací a požadavky analýzy, případně aktualizujeme dokumenty vzniklé v předchozích fázích, pokud se mezitím požadavky upravily. | ||
| + | * Testování proto neuvádíme jako samostatnou fázi. Jedná se o souvislý proces, který se prolíná všemi fázemi. | ||
| + | |||
| + | |||
| + | == Profese == | ||
| + | * Ne v každém týmu se vyskytují všechny role. | ||
| + | * Některé role může zastřešovat jedna osoba. | ||
| + | * Názvy a konkrétní náplň práce rolí se v jednotlivých firmách může lišit. | ||
| + | |||
| + | * Každý se může svými vlastnostmi více hodit do některých rolí a pro některé může mít předpokladů méně. | ||
| + | |||
| + | ; Informatik | ||
| + | *vědec | ||
| + | *zabývá se algoritmy (například: řadícími algoritmy,...) | ||
| + | *převody algoritmů, vztahy mezi nimi | ||
| + | *složitost algoritmů,... | ||
| + | * Dále dělíme na: | ||
| + | ** Základní výzkum: snaží se objevit souvislosti mezi jevy, prozkoumat pravidla. | ||
| + | ** Aplikovaný výzkum: aplikuje nejnovější vědecké poznatky na praktické úlohy s využitím v průmyslu a firmách. | ||
| + | |||
| + | ; Softwarový inženýr | ||
| + | * Odborník zaměřený na tvorbu rozsáhlých aplikací. | ||
| + | * Zná doporučení pro práci v týmu, účel a smysl jednotlivých fází vývojového cyklu. | ||
| + | * Analyzuje zadání, navrhuje řešení, zná metodiky vývoje software. | ||
| + | |||
| + | ; Analytik | ||
| + | * Musí být odborník v oblasti, ve které má výsledný produkt fungovat. | ||
| + | *: ''Například při tvorbě účetní aplikace musí rozumět účetnictví.'' | ||
| + | * Komunikuje se zákazníkem a specifikuje požadavky. | ||
| + | * Kontroluje správnost produktu v rámci dané cílové domény (oboru). | ||
| + | |||
| + | ; (Softwarový) architekt | ||
| + | * Navrhuje rozdělení aplikace na mikroslužby, nasazení na servery. | ||
| + | * Volí vhodné technologie: programovací jazyk, frameworky, databázové systémy, konfiguraci serverů, kontejnerizaci, ... | ||
| + | * Navrhuje strukturu API. | ||
| + | * Jedná se o zkušeného vývojáře s praxí. | ||
| + | * V řešení zohledňuje požadavky na: výkon, škálovatelnost (budoucí rozšiřitelnost), bezpečnost, snadnost údržby. | ||
| + | * Komunikuje s vývojáři a kontroluje dodržení architektonických požadavků. | ||
| + | |||
| + | ; Kodér ~ programátor | ||
| + | * Aplikuje obecné algoritmy na konkrétní úlohu. | ||
| + | * Zapisuje algoritmus v programovacím jazyce. | ||
| + | * Tyto úkoly často postupně přebírají AI agenti. | ||
| + | |||
| + | ; Deployment/DevOps | ||
| + | * Zabývá se nasazením hotového systému na servery. | ||
| + | * Řeší kontejnerizaci, konfiguraci serverů. | ||
| + | * Automatizaci nasazení (CI/CD). | ||
| + | |||
| + | ; Tester | ||
| + | * Po '''celou''' dobu projektu ověřuje správnost vytvořených materiálů. | ||
| + | * Podle povahy cílové aplikace se zaměřuje na různé oblasti: | ||
| + | ** výkonové testy u aplikací kritických na výkon | ||
| + | ** penetrační testování u aplikací kritických na bezpečnost. | ||
| + | ** ... | ||
| + | * Připravuje testy. | ||
| + | * Zabývá se automatizací testování. | ||
| + | |||
| + | ; Projektový manažer | ||
| + | * Dohlíží na činnost týmu, kontroluje termíny. | ||
| + | * Komunikuje se zákazníkem a předává požadavky týmu. | ||
| + | |||
| + | ; UX specialista | ||
| + | * Navrhuje uživatelské rozhraní aplikace/produktu tak, aby bylo uživatelsky přívětivé. | ||
| + | |||
| + | ; Grafik | ||
| + | * Vytváří vizuální podobu produktu. | ||
| + | |||
| + | ; Kreativec | ||
| + | * Přináší nové pohledy na věc. Jeho úkolem primárně není řešit technické provedení. | ||
== Proč začínat na papíře/obrázku? == | == Proč začínat na papíře/obrázku? == | ||
| Řádka 78: | Řádka 180: | ||
*Psát spoustu klíčových slov je triviální a zdržuje. | *Psát spoustu klíčových slov je triviální a zdržuje. | ||
*V počátcích zdržuje i klikání v ArgoUML či jiném modeláři. | *V počátcích zdržuje i klikání v ArgoUML či jiném modeláři. | ||
| + | |||
== Pojmy == | == Pojmy == | ||
| Řádka 88: | Řádka 191: | ||
**jaké nástroje použít | **jaké nástroje použít | ||
**jaké produkty vyrobit | **jaké produkty vyrobit | ||
| + | * Softwarové inženýrství | ||
| + | ** Vědecká disciplína, zabývá se metodikou a postupy efektivní práce a spolupráce v týmu při tvorbě SW. | ||
| + | ** Zahrnuje i návrh grafického rozhraní a jeho zákonitosti. | ||
Aktuální verze z 23. 7. 2026, 14:56
Obsah |
Fáze projektu
Formulace slovního zadání
- Slovní formulace toho, co se má vyřešit.
- Rozsah několika vět až odstavců.
- Z tohoto popisu vychází analýza, zadání se při ní dále zpřesňuje.
- Formuluje zákazník nebo jiný zadavatel.
- Požadavky:
- Jednoznačnost popisu.
- Přesný výčet funkcí, které má systém plnit. S jakými dalšími navazujícími systémy má interagovat, jací uživatelé s ním budou pracovat,...
- Ověřitelnost požadavků zadání (!)
Analýza
- Charakteristika
- Vědní disciplína: Softwarové inženýrství
- Profese: analytik + tester
- Výsledek: formalizované zadání (teoreticky ideálně až formální popis problému)
- Řešíme
- Jaká data potřebujeme?
- Jaké operace nad daty provádíme?
- Které skupiny (typy) uživatelů budou se systémem interagovat?
- Jaké výstupy budeme po systému požadovat?
- S jakými dalšími systémy má náš systém spolupracovat?
- Jaká legislativa se týká naší oblasti a jaká zákonná omezení proto musíme zohlednit?
- Testujeme
- Soulad se slovním zadáním.
- Pokrytí všech funkcí slovního zadání.
- Soulad jednotlivých částí:
- Nejsou v datech položky, se kterými nepracuje žádná operace?
- Mají všechny operace potřebná data v datech?
- Odpovídá popis operací charakteru zpracovávaných dat (datový slovník)?
- Odpovídá popis dat formátu, v jakém nám budou navazující systémy poskytovat data?
V rámci analýzy řešíme věci a akce z reálného světa, tomu odpovídá i terminologie. Minimálně používáme specializované pojmy ze světa IT, výstupům by měl rozumět i zákazník.
Zatím se NEbavíme o:
- softwarovém či hardwarovém způsobu řešení,
- algoritmech,
- způsobu ukládání dat,...
Návrh
- Charakteristika:
- Vědní disciplína: Softwarové inženýrství + Informatika
- Profese: analytik + kodér + tester
- Výsledek: Návrh struktury tříd + algoritmus
- Řešíme:
- Jak rozdělit jednotlivé části řešení mezi třídy a metody (strukturu tříd, přiřazení atributů a metod). Které entity reálného světa budou popsány samostatnými třídami, které budou figurovat jako atributy jiných tříd.
- Dále jaké pomocné třídy je potřeba zavést pro realizaci programu (okna, tlačítka, posluchače,...).
- Algoritmus (obecný postup) řešení jednotlivých dílčích úkolů.
- Podle typu úlohy převládá svou složitostí buď:
- Návrh struktury — skladové systémy, evidence zaměstnanců apod., kde algoritmy bývají poměrně triviální a je hlavně třeba správně postihnout požadované chování a vztahy mezi entitami.
- Algoritmizace — vědecké výpočty, úlohy hromadného zpracování dat, kde pracujeme často s jednoduchými daty bez vnitřní struktury, ale je třeba je zpracovat ve velkém množství efektivně.
Implementace
- Charakteristika:
- Vědní disciplína: Programování
- Profese: kodér + tester
- Výsledek: Zdrojový kód
- Píšeme kód, který realizuje algoritmus.
Nasazení
- Instalujeme u zákazníka (deployment).
- Zaškolíme obsluhu.
- Sběr zpětné vazby.
Údržba
- Aktualizace, záplaty, opravy.
- Úpravy v důsledku změn požadavků či legislativy.
- Migrace dat mezi verzemi.
Vyřazení z provozu
- Vytvořený systém je vyřazen z provozu a dále se již nepoužívá.
Testování
- Testování probíhá ve všech fázích počínaje analýzou a poté při každé úpravě.
- V počátečních fázích (analýza, návrh) testujeme soulad jednotlivých částí dokumentace a návaznosti mezi jednotlivými fázemi.
- Ve fázích implementace a údržby už probíhá klasické testování kódu (black-box testy, uživatelské testování,...), ale i zde zároveň testujeme soulad s návrhovou dokumentací a požadavky analýzy, případně aktualizujeme dokumenty vzniklé v předchozích fázích, pokud se mezitím požadavky upravily.
- Testování proto neuvádíme jako samostatnou fázi. Jedná se o souvislý proces, který se prolíná všemi fázemi.
Profese
- Ne v každém týmu se vyskytují všechny role.
- Některé role může zastřešovat jedna osoba.
- Názvy a konkrétní náplň práce rolí se v jednotlivých firmách může lišit.
- Každý se může svými vlastnostmi více hodit do některých rolí a pro některé může mít předpokladů méně.
- Informatik
- vědec
- zabývá se algoritmy (například: řadícími algoritmy,...)
- převody algoritmů, vztahy mezi nimi
- složitost algoritmů,...
- Dále dělíme na:
- Základní výzkum: snaží se objevit souvislosti mezi jevy, prozkoumat pravidla.
- Aplikovaný výzkum: aplikuje nejnovější vědecké poznatky na praktické úlohy s využitím v průmyslu a firmách.
- Softwarový inženýr
- Odborník zaměřený na tvorbu rozsáhlých aplikací.
- Zná doporučení pro práci v týmu, účel a smysl jednotlivých fází vývojového cyklu.
- Analyzuje zadání, navrhuje řešení, zná metodiky vývoje software.
- Analytik
- Musí být odborník v oblasti, ve které má výsledný produkt fungovat.
- Například při tvorbě účetní aplikace musí rozumět účetnictví.
- Komunikuje se zákazníkem a specifikuje požadavky.
- Kontroluje správnost produktu v rámci dané cílové domény (oboru).
- (Softwarový) architekt
- Navrhuje rozdělení aplikace na mikroslužby, nasazení na servery.
- Volí vhodné technologie: programovací jazyk, frameworky, databázové systémy, konfiguraci serverů, kontejnerizaci, ...
- Navrhuje strukturu API.
- Jedná se o zkušeného vývojáře s praxí.
- V řešení zohledňuje požadavky na: výkon, škálovatelnost (budoucí rozšiřitelnost), bezpečnost, snadnost údržby.
- Komunikuje s vývojáři a kontroluje dodržení architektonických požadavků.
- Kodér ~ programátor
- Aplikuje obecné algoritmy na konkrétní úlohu.
- Zapisuje algoritmus v programovacím jazyce.
- Tyto úkoly často postupně přebírají AI agenti.
- Deployment/DevOps
- Zabývá se nasazením hotového systému na servery.
- Řeší kontejnerizaci, konfiguraci serverů.
- Automatizaci nasazení (CI/CD).
- Tester
- Po celou dobu projektu ověřuje správnost vytvořených materiálů.
- Podle povahy cílové aplikace se zaměřuje na různé oblasti:
- výkonové testy u aplikací kritických na výkon
- penetrační testování u aplikací kritických na bezpečnost.
- ...
- Připravuje testy.
- Zabývá se automatizací testování.
- Projektový manažer
- Dohlíží na činnost týmu, kontroluje termíny.
- Komunikuje se zákazníkem a předává požadavky týmu.
- UX specialista
- Navrhuje uživatelské rozhraní aplikace/produktu tak, aby bylo uživatelsky přívětivé.
- Grafik
- Vytváří vizuální podobu produktu.
- Kreativec
- Přináší nové pohledy na věc. Jeho úkolem primárně není řešit technické provedení.
Proč začínat na papíře/obrázku?
- Složité věci řešíme první!
- Vymyslet strukturu tříd je složité.
- Psát spoustu klíčových slov je triviální a zdržuje.
- V počátcích zdržuje i klikání v ArgoUML či jiném modeláři.
Pojmy
- CASE
- Computer-Aided Software Engineering
- Programy pro podporu návrhu software
- metodika
- jaké pracovníky využít
- jaké činnosti vykonat
- jaké nástroje použít
- jaké produkty vyrobit
- Softwarové inženýrství
- Vědecká disciplína, zabývá se metodikou a postupy efektivní práce a spolupráce v týmu při tvorbě SW.
- Zahrnuje i návrh grafického rozhraní a jeho zákonitosti.