1 Základní pojmy technologie programování

1.1  Historická charakteristika

   Historické etapy tvorby programování lze rozdělit do čtyř, vzájemně se 
překrývajících etap s těmito charakteristickými rysy :

1950 - 1965   Dávková orientace programů
              Omezená distribuce programů
              Převážně zákázkový charakter tvorby programů

1960 - 1975   Víceuživatelský přístup
              Programy pracující v reálném čase
              Databázové systémy
              Zvýšený podíl produkčního programového vybavení (vytvářeného
              profesionálními organizacemi)

1970 - 1985   Distribuované systémy
              Zabudované prostředky inteligence
              Levný hardware
              Exploze počtu zákazníků

1985 - 2000   Expertní systémy
              Počítače pro umělou inteligenci
              Paralelní architektury

   Současný stav tvorby programového vybavení lze zkratkovitě charakterizovat 
těmito poznámkami:

  - Složitost technického vybavení se zvyšuje natolik, že je obtížné využít 
při tvorbě programů plně jeho detailních možností 

  - Schopnost vytvářet nové programy nestačí požadavkům na jejich tvorbu

  - Schopnost udržovat existující programy naráží na jejich špatný návrh a 
nevhodné vlastnosti

     Mezi nejzávažnější otázky, jejichž odpověď je netrpělivě očekávána mnoha 
producenty programového vybavení patří:

   Proč trvá dokončení programu vždy déle, než se předpokládá?

   Proč jsou náklady na vytvoření programů vždy větší,než se plánuje?

   Proč nejsme schopni nalézt všechny chyby před předáním programů 
zákazníkům?

   Proč máme problémy se stanovením a měřením dosaženého stadia v celkovém 
postupu vývoje programu? 

1.2  Charakteristika chybovosti programového vybavení

    Programové vybavení je na rozdíl od technického vybavení spíše logického 
charakteru než fyzického. Programové vybavení se navrhuje a vyvíjí a následně 
hromadně duplikuje způsobe, odlišným od běžné materiální výroby. Náklady na 
tvorbu programového vybavení se koncentrují stádia návrhu a vývoje. Většina 
programů má zakázkový charakter a je méně časté, že se výsledný produkt 
sestavuje z již existujících částí.

    Programové vybavení se na rozdíl od technických prostředků nemůže 
opotřebit jinak než "morálně". Na obr.1.1 je  znázorněn průběh chybovosti 
technického zařízení. V etapě "záběhu" či "zahoření" se chybovost výrazně 
snižuje. Po efektivní době životnosti začne v etapě fyzického opotřebení 
chybovost výrazně vzrůstat.

            obr. 1.1, 1.2 Průběh chybovosti technického zařízení a programového zařízení

   Průběh chybovosti typického programového vybavení je odlišný. Ideální 
průběh chybovosti se po počátečním výrazném snížení v etapě ladění a 
počátečního používání dále snižuje s časem pozvolna. Skutečný průběh však 
skokově zvyšuje chybovost po každé významné změně programu v etapě údržby 
programu s následným klesáním obdobným počátečnímu poklesu. Celkový průběh 
spodní obálky tohoto pilového průběhu má vzestupný charakter. Situaci 
znázorňuje obr.1.2

1.3  Klasifikace programového vybavení.

    Stanovit klasifikaci programů není snadné, protože vytvářené programy 
jsou stále složitější a integrují do sebe části různých charakteristik.
Uvedená klasifikace je tedy jen přibližným vymezením charakteristických tříd 
programů.

    Systémové programy (System Software): Jsou to pomocné, služební programy, 
z nichž některé (operační systémy, ovládací, řídicí a telekomunikační 
programy ap.) pracují s nespecifikovanými vstupními daty, jiné pracují se 
specifikovanými vstupními daty (překladače, editory, systémy ovládaní souborů 
ap.). Většina z nich pracuje výrazně i na strojové úrovni počítače.

   Programy pro reálný čas (Real-Time Software): RT programy jsou určeny pro 
měření, analýzu a řízení objektů reálného času. Je třeba je odlišit od 
interaktivních nebo sdílených programů, u nichž odezva není časově kritická. 
Odezva v reálném čase bývá výrazně kratší a typicky se pohybuje v intervalu
(0.001 - 1)s a na rozdíl od jiných režimů nesmí být překročena.

   Ekonomické programy (Business software): Tyto programy tvoří 
nejrozsáhlejší skupinu programů. Aplikace z této skupiny provádějí 
transformace vstupních dat za účelem umožnění ekonomických operací a 
manažerských rozhodování.

   Vědecko-technické programy (Engineering and Scientific software): 
Charakteristickým rysem těchto programů jsou numerické algoritmy s reálnými 
čísly. Patří sem pestrá paleta programů, mezi nimiž nalezneme programu pro 
astronomii i vulkanologii, pro dynamickou deformaci materiálu i pro balistiku 
družic, pro molekulární biologii i pro automatizaci výroby. Některé  
programy v této třídě mají jiný charakter jako např. programy pro návrh s 
podporou počítače (Computer Aided Design - CAD), simulační programy a jiné 
programy, které mají často také charakter systémových a RT programů.

   Zabudované programy (Embedded software): Tyto programy jsou uloženy v 
paměti ROM nejrůznějších zařízení, řízených mikroprocesory a vykonávají úzký 
okruh předem vymezených funkcí, které jsou často uživateli skryty.

   Programy osobních počítačů (PC Software): Tato skupina programů je 
specifická tím, že v posledním desítiletí výrazně ovládly trh programů. Patří 
k nim programy pro zpracování textu i grafické informace, tabulkové 
procesory, editory a databázové systémy, programy pro personální a ekonomické 
agendy, ale i zábavné a vzdělávací programy.

   Programy umělé inteligence (Artificial Intelligence Programs, AI 
Programs): Zahrnují použití nenumerických algoritmů, které slouží k řešení 
složitých problémů. Nejaktivnější oblastí umělé inteligence je v současnosti 
oblast tzv. expertních systémů.

1.4  Softwarová krize.

     Po době cca 30 let existence výpočetní techniky a tvorbě jejího 
programového vybavení dochází k situaci, která se označuje za _softwarovou _
_krizi_. Softwarová krize má řadu charakteristických rysů. Nejtypičtější je 
skutečnost, že ani prudce se zvyšující lidské tvůrčí kapacity, zapojené do 
oblasti programování nestačí požadavkům na údržbu starých a tvorbu nových 
programů. Průvodní jevy softwarové krize se dají shrnout do těchto bodů:

    Na tvorbu programového vybavení, které se již používá, bylo vynaloženo 
velké množství prostředků. Programy v mnoha směrech nevyhovují. Není ani 
ekonomické ani technicky reálné nahradit je novými programy a účinná úprava 
starých se nedaří.

    Na rozdíl od všech ostatních inženýrských produkčních činností se v 
oblasti produkce programů nedaří plánování ani z hlediska času ani z hlediska 
nákladů na dokončení programového produktu. Nedaří se určovat pokročilost 
rozpracovaného produktu a ovlivňovat dobu jeho dokončení dodatečným zapojením 
lidské síly nebo technologických prostředků.

   Nedaří se dosahovat žádoucího stavu bezchybnosti programů předávaných 
uživatelům, ani žádoucího tempa v jejich dodatečném odstraňování.

1.5  Vznik technologie programování

    Jako reakce na projevy softwarové krize vznikla výzkumná i aplikovaná 
aktivita, snažící se zmírňovat a odstraňovat projevy softwarové krize. Přímým 
podnětem k této aktivitě je silný ekonomický tlak v oblasti tvorby 
programového vybavení. Z této aktivity se vyvinula disciplína, nazývaná 
"software engineering", česky "softwérové inženýrství" nebo raději 
"technologie programování". Tato disciplína se zabývá výzkumem, vývojem a 
hodnocením _metod, nástrojů a postupů a doporučení_, jak těchto metod a 
nástrojů používat při tvorbě programového vybavení, splňujícího náročné 
požadavky na ekonomické aspekty produkce, při dosažení co nejvyšší kvality.

    Mezi _metody_ technologie programování lze zahrnout metody z oblasti 
plánování a prognóz projektů, rozvahu a analýzu požadavků programových 
systémů, návrh datových a programových struktur, metody implementace 
programu, jeho testování a údržbu.

   _Nástroje_ technologie programování poskytují částečně nebo úplně 
automatizovanou podporu zvolených metod. Komplexní integrovaný systém 
takových nástrojů se nazývá také "Systém technologie programování s podporou 
počítače" ("Computer-Aided Software Engineering" - CASE).

   _Postupy a doporučení_ vyjadřují, v jakém pořadí mají být metody a nástroje 
použity, jak dokumentovat jednotlivé etapy a výsledný produkt, jak ovlivňovat 
kvalitu vznikajícího produktu, jak měřit množství vykonané práce a odhadovat 
množství zbývající práce.

1.6  Typické postupy tvorby programů

1.6.1 Klasický životní cyklus programu

     Klasický životní cyklus programu (Program Life Cycle) se nejčastěji 
popisuje jako sled 6 etap, uvedených také na obr.1.3 :

     a) _Analýza okolí programu_. V této fázi se zkoumají všechny souvislosti a 
požadavky na vztahy a interakce vytvářeného programu se svým okolím. Zahrnuje 
vztahy na úrovni systému vytvářejícího prostředí programu a na úrovni 
nejvyšších vrstev návrhu vlastního programu.

     b) _Analýza požadavků na program_, se úzce zaměřuje na funkce navrhovaného 
programu. Jde o stanovení  základních informačních charakteristik programu 
jako je tok dat programem a transformace dat, obsah dat a jejich struktura, 
způsob komunikace a interakce programu s okolím. Obě etapy musí být 
dokumentovány a konzultovány se zákazníkem.

    c) _Návrh programu_ je složitý víceetapový proces, který se zaměřuje na 
tři základní rysy programování: strukturu dat, celkovou architekturu programu 
a strukturu procedur/funkcí. Výsledkem návrhu je dokument, dostatečný pro 
zahájení vlastní implementace - zápisu programu konkrétními programovacími 
prostředky.

    d) Ve fázi _implementace_ vzniká forma  programu, která je přímo 
zpracovatelná konkrétním počítačem. Je-li návrh programu proveden dostatečně 
detailně, lze implementace dosáhnout téměř mechanicky.

    e) _Testování programu_ následuje po jeho implementaci. Zaměřuje se na 
testování vnitřní logiky programu, prověřující správnost všech jednotlivých 
komponent programu až po úroveň příkazů a na testování vnější funkce 
programu, prověřující správnost výstupních výsledků.

    f) _Údržba programů_ se zaměřuje na úpravy programů zejména v souvislosti: 
    - s odstraňováním chyb
    - se změnami okolí programu (nový operační systém, nový druh periferního 
      zařízení ap.)
    - se změnami vzniklými z nových požadavků zákazníka na doplnění nových 
      funkcí programu nebo změnu či modernizaci starých funkcí programu.

Vlastní údržba programů aplikuje všechny z předcházejících etap (a - e) 
klasického životního cyklu programu.

     Tento klasický životní cyklus je nejstarším a nejužívanějším schematem 
technologie programování. V poslední době se však proti němu vznáší řada 
námitek, především s ohledem na skutečnost, že:

    - Tvorba většiny projektů nemá lineární charakter postupu v sekvenci 
etap, ale spíše cyklický charakter návratů od kterékoli etapy zpět ke 
kterékoli předcházející etapě.

    - Pro většinu zákazníků je obtížné definovat všechny požadavky na 
výsledný produkt již v počáteční fázi. Teprve po jistých zkušenostech s 
výsledným produktem nabývá uživatel jistoty, co vlastně potřebuje a do 
nepotřebuje. Tato skutečnost na jedné straně klade vysoké nároky na dodatečné 
změny v etapě údržby a na druhé straně způsobuje nevyužívání potenciálně 
rozsáhlých vlastností programu, jejichž účelnost se v počáteční fázi 
přecenila, nebo které se v praxi neosvědčily.

   - Zákazník musí být trpělivý, protože výsledný produkt je k dispozici až v 
posledních fázích sledu. Předčasné poskytnutí nedokončeného produktu přináší 
vážné škody.

    Přes tyto námitky zůstává tento postup základní metodou, ze které se 
odvozují některé další postupy.

            Obr.1.3  Klasický životní cyklus programu
  Obr.1.4  Postup s prototypem

1.6.2 Tvorba programů s použitím prototypu.

    Postup s použitím prototypu je vhodný především tam, kde uživatel není 
schopen definovat všechny potřebné vstupní a výstupní údaje a funkce, ani 
všechny transformační operace mezi nimi. Prototyp je model konečného 
programu, pomocí něhož uživatel ve spolupráci s tvůrcem formuluje své 
požadavky na výsledný produkt. Prototyp může mít jednu ze tří typických forem:

    - "Papírový prototyp" usnadňuje uživateli pochopit principy interakce 
programu s uživatelem

    - Funkční prototyp plní určitou podmnožinu funkcí navrhovaného programu

    - Existující program, která plní všechny nebo jen některé z požadovaných 
funkcí. Jeho vlastnosti však musí být zlepšeny, aby se dosáhlo požadovaných 
parametrů.

    Postup s použitím prototypu (Obr.1.4) má následující etapy:

    a) _Specifikace a analýza prvotních požadavků_ ,á podobnou funkci jako 
první dvě etapy klasického životního cyklu.

    b)_"Rychlý návrh"_ se zaměřuje na vytvoření nejdůležitějších a 
nejtypičtějších funkcí programů zejména těch, se kterými přijde uživatel do 
bezprostředního styku.

    c) _Vytvoření prototypu_ umožní, aby uživatel i tvůrce vyhodnotili jeho 
vlastnosti.

    d)_ Hodnocení a zlepšování vlastností prototypu_ je poslední etapou 
vnitřního iteračního cyklu, za nímž následuje

    e) _Konečná verze produktu_, plnícího komplexně funkce navržené na základě 
experimentování a úprav prototypu.

    V ideálním případě lze některé z částí prototypu použít i při výstavbě 
konečné verze programu. Tato metoda má však také některé nevýhody:

    - Uživatel, který vidí fungující prototyp se často domnívá, že mu to již 
stačí jako konečný produkt. Neuvědomuje si, že prototyp je účelový slepenec, 
který nebyl vytvořen s ohledem na spolehlivost, robustnost a udržovatelnost.

    - Tvůrce, který se snaží co nejrychleji získat chodící prototyp volí 
kompromisní implementační rozhodnutí s ohledem na nejpohodlnější operační 
systém, programovací jazyk či vnitřní algoritmus. Po čase si tvůrce neuvědomí 
pravý důvod této volby a přijme ji i za konečné řešení.

     tato metoda je pčes své některé nevýhody užitečná. podmínkou je, aby si 
řešitel i uživatel uvědomili, že prototyp slouží jen pro úplnou specifikaci 
vlastností konečného produktu.

1.6.3   Technologie čtvrté generace (Four Generation Techniques - 4GT)

    Pojem 4GT zahrnuje širokou třídu nástrojů pro tvorbu programů, pro kterou 
je charakteristická schopnost generovat zdrojovou podobu programu na základě 
určité formy specifikace tvůrcem programu. Ke specifikaci se používá 
nejčastěji neprocedurální jazyk 4. generace (Four Generation Language - 4GL).

     Postup tvorby programů podle scénáře 4GT má čtyři charakteristické 
etapy:

    a) Specifikace požadavků s podobným významem jako v předcházejících 
postupech.

    b) Návrh strategie a struktury programu

    c) Implementace s použitím 4GL

    d) Výsledný produkt

    U malých aplikací lze s použitím 4GL druhou fázi přeskočit. U větších 
aplikací to však může způsobit nízkou kvalitu a udržovatelnost produktu.

   Fáze d), která je nazvána krátce "výsledný produkt", zahrnuje řadu dílčích 
aktivit, které z automaticky vygenerovaného zdrojového programu vytvoří 
"výsledný produkt" a celkové uspořádání usnadňující údržbu produktu. Celkové 
schema postupu je na obr. 1.5.

             Obr.1.5   Postup 4GT

     Postup 4GT má své odpůrce i příznivce. Odpůrci tvrdí, že použití 
nástrojů 4GT není jednodušší než použití programovacích jazyků, že výsledný 
produkt je časově i prostorově méně účinný a že udržovatelnost velkých 
systémů vytvořených pomocí 4GT je sporná. Příznivci zdůrazňují výrazné 
zkrácení produkční doby a zvýšení produktivity programování.

     Na základě dosavadních zkušeností lze říci, že až na výjimky, zahrnuje 
aplikační sféra 4GT především programy pro zpracování ekonomických informací 
a rozsáhlých bází dat. Jen zřídka jsou používány v oblasti vědecko-
technických a systémových produktů. Při výstavbě středních a malých produktů 
se výrazně snížil čas pro jejich tvorbu a snížil se také čas návrhu a analýzy 
malých aplikací. Při návrhu rozsáhlých produktů  však čas potřebný pro 
analýzy, návrh a testování zůstal stejný, někdy i vzrostl, čímž eliminoval 
úsporu vzniklou automatickým generováním programu.

      Lze očekávat, že v následujícím desetiletí výrazně vzroste význam, 
použití i kvalita nástrojů 4GT. podíl konvenčních metod na celkové produkci 
bude slábnout. technologie 4GT tak vytvoří přechod k aplikaci očekávané 
technologie páté generace, která bude založena na principech umělé 
inteligence.

1.7 Závěr

    Procesy tvorby programového vybavení sestávají ze tří generických fází: 
             _Definice - Vývoj - Údržba_,
které lze nalézt u každého projektu, bez ohledu na jeho aplikační oblast, 
velikost nebo složitost.

     _Definiční fázi_ lze charakterizovat odpověďmi na otázku _"Co?"_ a zahrnuje:
   - Analýzu systému a prostředí či okolí
   - Plánování projektu, zahrnující určení rozsahu  a kapacitu zdrojů, odhad 
nákladů, časového plánu ap.
   - Analýzu požadavků a vlastností

     _Vývojová fáze_ odpovídá na otázku _"Jak?"_  a zahrnuje především:
   - Návrh programu vyjádřený vhodnou notací (grafickou, tabelární, 
pseudojazykem)
   - Implementaci - tvorbu zdrojového programu programátorem nebo 
(polo)automaticky s využitím 4GT.
   - Testování

     _Fáze údržby_ se zaměřuje na úkol _"Změny"_ a lze je rozdělit na tři různé 
aktivity:
    - Oprava se zaměřuje na odstranění chyb
    - Adaptace přizpůsobuje produkt změnám ve vnějším okolí programu
    - Zlepšení (modernizace) mění a rozšiřuje vlastnosti programu na základě 
nových požadavků uživatele.

     V praxi lze očekávat, že jednotlivé popsané postupy se budou vzájemně 
kombinovat tak, aby se nalezl optimální způsob tvorby dané konkrétní aplikace 
v daných konkrétních personálních a materiálních podmínkách.