Tvorba software

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Programování zahrnuje postupy: Transformováno a sladěno s kapitolkou Algoritmus-> Programování x algoritmizace.)
(Fáze projektu: Doplněno více o nasazení a údržbě.)
 
(Není zobrazeno 9 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í]]
 
+
<!--
== 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.
+
 
+
 
+
 
== Tvorba SW zahrnuje postupy ==
 
== Tvorba SW zahrnuje postupy ==
 
; Analýza
 
; Analýza
 
* Profese: analytik
 
* Profese: analytik
 
* Vstup: slovní popis zadání; myšlenka, co je třeba udělat
 
* Vstup: slovní popis zadání; myšlenka, co je třeba udělat
* Výsledek: formálně popsaný (matematicky přesný) popis problému.
+
* Výsledek: [[Algoritmus#Problém|problém]] &mdash; formálně popsaný (matematicky přesný) popis zadání.
 
Slovní popis zadání formalizujeme tak, abychom získali problém.
 
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.  
 
Vstupem je slovní zadání, výstupem je matematicky přesný popis problému.  
Řádka 26: Řádka 22:
  
 
Viz také: [[Algoritmus]].
 
Viz také: [[Algoritmus]].
 +
-->
 +
  
== Profese ==
 
*Informatik
 
**vědec
 
**zabývá se algoritmy (například: řadícími algoritmy,...)
 
**převody algoritmů, vztahy mezi nimi
 
**složitost algoritmů,...
 
*Softwarový inženýr (vývojář) ~ analytik
 
** Provádí analýzu úlohy.
 
** Komunikuje se zákazníkem.
 
** Řídí spolupráci v týmu
 
*Kodér ~ programátor
 
**aplikuje obecné algoritmy na konkrétní úlohu
 
**zapisuje v programovacím jazyce
 
*Tester
 
** Po '''celou''' dobu projektu ověřuje správnost vytvořených materiálů.
 
  
 
== Fáze projektu ==
 
== Fáze projektu ==
=== Formulace zadání ===
+
 
*vyřešte, které úlohy máte řešit
+
=== Formulace slovního zadání ===
 +
* Slovní formulace toho, co se má vyřešit.
 +
* Rozsah několika vět až odstavců.
 +
* Z&nbsp;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&nbsp;jakými dalšími navazujícími systémy má interagovat, jací uživatelé s&nbsp;ním budou pracovat,...
 +
** Ověřitelnost požadavků zadání (!)
 +
 
 
=== Analýza ===
 
=== Analýza ===
*Charakteristika:
+
; Charakteristika:
**Vědní disciplína: Softwarové inženýrství
+
* Vědní disciplína: Softwarové inženýrství
**Profese: analytik + tester
+
* Profese: analytik + tester
**Výsledek: zadání
+
* Výsledek: formalizované zadání (teoreticky ideálně až formální popis [[Algoritmus#Problém|problému]])
*Jaká data potřebujeme?
+
; Řešíme:
*Co s nimi provádíme?
+
* Jaká data potřebujeme?
*řešíme věci a akce z reálného světa
+
* Jaké operace nad daty provádíme?
**tomu odpovídá i terminologie
+
* Které skupiny (typy) uživatelů budou se systémem interagovat?
 +
* Jaké výstupy budeme po systému požadovat?
 +
* S&nbsp;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&nbsp;datech položky, se kterými nepracuje žádná operace?
 +
** Mají všechny operace potřebná data v&nbsp;datech?
 +
** Odpovídá popis operací charakteru zpracovávaných dat (datový slovník)?
 +
** Odpovídá popis dat formátu, v&nbsp;jakém nám budou navazující systémy poskytovat data?
 +
<div class="Poznamka">
 +
V&nbsp;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
***typicky analytik + kodér + tester
+
***může být dále rozděleno.
+
 
**Výsledek: Návrh struktury tříd + algoritmus
 
**Výsledek: Návrh struktury tříd + algoritmus
*Řešíme třídy a metody nutné pro běh programu
+
* Řešíme:
**okno
+
** 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,...).
**posluchači
+
** [[Algoritmus]] (obecný postup) řešení jednotlivých dílčích úkolů.
*Řešíme algoritmus, který budeme potřebovat.
+
* Podle typu úlohy převládá svou složitostí buď:
*Podle typu úlohy převládá jedno nebo druhé svou složitostí.
+
** Návrh struktury &mdash; 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 &mdash; 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 74: Řá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
+
* Aktualizace, záplaty, opravy.
*úpravy
+
* Ú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&nbsp;provozu a&nbsp;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&nbsp;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&nbsp;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&nbsp;každém týmu se vyskytují všechny role.
 +
* Některé role může zastřešovat jedna osoba.
 +
* Názvy a&nbsp;konkrétní náplň práce rolí se v&nbsp;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&nbsp;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&nbsp;využitím v&nbsp;průmyslu a&nbsp;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&nbsp;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 88: Řá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 98: Řá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í

Analýza

Charakteristika
Řešíme
Testujeme

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

Implementace

Nasazení

Údržba

Vyřazení z provozu

Testování


Profese

Informatik
Softwarový inženýr
Analytik
(Softwarový) architekt
Kodér ~ programátor
Deployment/DevOps
Tester
Projektový manažer
UX specialista
Grafik
Kreativec

Proč začínat na papíře/obrázku?


Pojmy

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje