2  Plánování projektu

2.1  Výpočetní systém

    Pojem "systém" je jedním z nejfrekventovanějších s četnými definicemi na 
různých úrovních. Známý americký Websterův slovník nabízí"

 ... soubor či uspořádání věcí se vzájemnými vztahy takovými, že formují 
jednotu či organický celek

 ... soubor faktů, principů, pravidel atd., klasifikovaných a uspořádaných 
formou, která vytváří logický plán slučující různé části jednoho celku

 ... metoda či plán klasifikace nebo uspořádání

 ... daný způsob určité činnosti, metoda, postup

    Pro výpočetní systém lze z výše uvedených možností navrhnout tuto 
definici:

   Výpočetní systém je uspořádání prvků zorganizované pro úspěšné provedení 
určité metody, postupu či řídicí činnosti zpracováním informace.
 
     Mezi základní prvky výpočetního systému obvykle zahrnujeme:

   - programové vybavení (software) - programy, datové struktury a 
     dokumentace, specifikující co se má dělat 

   - technické vybavení (hardware) - umožňuje realizovat výpočetní kapacitu a 
     fyzikální spojení s vnějším světem

   - člověk - lidský činitel v roli uživatele, operátora ap.

   - báze dat - rozsáhlý soubor informací zpracovávaný programovým vybavením, 
     který je integrální součástí systému

   - dokumentace - příručky, formuláře, učebnice, audiovizuální a jiné  
     prostředky popisu pro užívání a ovládání systémy 

   - Postupy (procedury) - definované postupy kroků či akcí, které popisují 
     použití jednotlivých prvků systému, či jejich procedurální kontext v 
     systému 

2.2 Technologie programování

    Technologie programování je tvůrčí problémově-orientovaná činnost, 
vycházející z požadavků a cílů definovaných zákazníkem. Na základě analýzy 
odvozuje representaci funkcí vazby a rozhraní celku, omezení možností návrhu, 
informační struktury atd., které mohou být zahrnuty do některé generické 
fáze: definice, vývoj, údržba. 

     Významnými součástmi inženýrské činnosti v technologii výpočetních 
systémů jsou:

    - Projekční rozvaha : odpovídá na otázku, zda je projekt reálný ve 
      stanovené ceně a termínu, s danými pracovními a materiálními kapacitami 

    - Obchodní rozvaha : odpovídá na otázky tržní úspěšnosti, zisku, 
      návratnosti potřebných investic, marketingu ap.

    - Technická analýza:  řeší problém technické realizovatelnosti problému, 
      technickou a konstrukční dosažitelností, potenciální rizikové faktory 
      výroby ap. 

    - Výrobní analýza: řeší otázku dostupnosti výrobních zařízení, tržního 
      dostatku součástí, realizací technické kontroly jakosti a kvality
 
    - Analýza lidských faktorů: zahrnuje analýzu zdrojů kvalifikovaných 
      pracovníků, včetně demografických a politických aspektů

    - Analýza faktorů okolí: zjišťuje, zda je systém kompatibilní se 
     systémovým okolím, zda je vzájemná komunikace typu systém-systém a 
     člověk-systém, zda je komunikace  inteligentní a robustní

    - Analýza právních faktorů: analyzuje, zda zavedení systému nezavede 
      nežádoucí porušení legálních kompetencí, zda není porušena ochrana 
      důvěrných či tajných informací, zda nedojde k jinému přestoupení 
      zákona, normy či předpisu 

2.3 Základní pojmy plánování programového projektu

    Diskuse,pozorování a prvotní odhady tvoří první významnou etapu. V této 
fázi se činí první  rozhodnutí významnou etapu. V této  fázi se činí první 
rozhodnutí o možných zdrojích, nákladech, vývojových postupech a výrobních i 
obchodních rizicích. odhaduje se rozsah a složitost řešeného systému. Týž 
problém z oblasti reálného času může být "velmi náročný" pro pracovní tým 
zvyklý na řešení dávkových problémů a "banálně jednoduchý" pro tým dlouhodobě 
řešící problémy z oblasti řízení RT systémů.

    Objektivizace prvotních odhadů je pokus získat v prvotní fázi podklady 
pro prvotní kvantitativní odhady. C této fázi se významně uplatňuje zkušenost 
a schopnost komplexní intuitivní analýzy všech aspektů projektu.

    Vymezení základních parametrů programového produktu je nezbytné již v 
prvotní fázi tvorby a má své kvantitativní složky (rychlost zpracování, počet 
simultánních uživatelů, maximální doba odezvy, maximální použitá paměť ap.) a 
kvalitativní složky (zabezpečované funkce, způsob komunikace, spolehlivost 
ap.).

     Zdroje a kapacity vyjadřují maximální prostředky a lidské síly a obvykle 
je dělíme do 3 kategorií:

   Pracovní kapacitu představují pracovníci s různou kvalifikací, potřební 
pro realizaci projektu. nejčastěji jsou charakterizování:
      požadovanou kvalifikací
      dostupností na trhu práce
      dobou jejich úvazku na projektu
      datem začátku jejich úvazku na projektu

     Na obr.2.1 je ukázka typického zapojení pracovníků v jednotlivých 
etapách projektu.

    Obr.2.1 Zapojení pracovníku na projektu

     Technickou kapacitu (Hardware) představují technické výpočetní 
prostředky, které lze rozdělit na 3 podskupiny:

    - vývojový systém (hostitelský systém) slouží pro vývoj projektu; není 
      určen pro cílové použití
    - cílový počítač
    - ostatní technické prostředky

     Programová kapacita probíhá v současné době prudkým vývojem. Rozdělíme 
ji v prvním přístupu na současné a perspektivní prostředky.

     Současné prostředky dělíme dále na:

     - Prostředky pro přímou tvorbu programů , zahrnují nejčastěji 
univerzální a problémově orientované překladače, editory, sestavovací a 
zaváděcí programy, ladicí programy a široký okruh různých pomocných 
programových prostředků.

     - Prostředky pro technologický návrh zahrnují nástroje usnadňující 
plánování, analýzu požadavků, návrh, testování a údržbu. V současné době již 
existuje několik takových prostředků jako např. DesignAid (Nastec Corp.), 
Excelerator (Index Technology) nebo TeamWork (Cadre Techn.Inc.).

     -  Prostředky čtvrté generace umožňují specifikovat problém s použitím 
dotazovacích a jiných neprocedurálních postupů. V praxi se již používají 
systémy jako NOMAD, FOCUS, INTELLECT (dotazovací báze dat) a GAMMA, HOS, 
TELON, TRANSFORM (generátory programů) a jiné prostředky pro podporu 
prototypového postupu návrhu. 

     Mezi perspektivní prostředky počítáme především:

   - Prostředky na úrovni CASE (Computer Aided Software Design) zahrnují 
souhrn nástrojů pro podporu programování ve vyspělých programovacích jazycích 
a prototypové systémy. merketingové průzkumy očekávají výrazný rozvoj v této 
oblasti orientované především na vývoj specializovaných pracovních stanic 
CASE.

   - Prostředky na úrovni AI (Artificial Intelligence) se budou orientovat na 
nástroje pracující jako expertní systémy a nástroje zpracovávající přirozený 
jazyk.

     U všech případů postupů se vždy zvažuje možnost znovupoužití 
existujících částí programového vybavení. Doporučuje se postupovat podle
tohoto návodu:

    a) Vyhovuje-li existující část programu všem požadavkům, lze ji přijmout. 
Náklady vynaložené na shromažďování vyhovujících částí bývají menší, než 
náklady na tvorbu nových částí.

   b) Vyhovuje-li existující program jen částečně, je třeba postupovat 
obezřetně. Náklady na úpravy mohou být často vyšší, než vývoj nového úseku 
programu.

     Je paradoxem, že programové kapacity, které se v průběhu vývoje stávají 
klíčovými, bývají v prvních fázích projektu často velmi zanedbávány.

2.4  Metrologie programátorské produktivity a kvality

    Základním nástrojem každé inženýrské činnosti je měření. Metrologie je 
disciplína, zabývající se teorií, nástroji a aplikacemi v oblasti měření. 
Existuje mnoho důvodů k provádění měření v oblasti programového vybavení. 
Mezi nejtypičtější lze zahrnout:

   - Zjištění kvality programového produktu
   - Zjištění produktivity programátorů
   - Zjištění přírůstku kvality a produktivity při použití nových postupů a 
     nástrojů
   - Získání základních informací pro odhady a prognózy
   - Získání informací pro posouzení potřeby nasazení dalších nástrojů nebo 
     kvalifikačního růstu pracovníků, za účelem dosažení vyšších 
     technologických a ekonomických parametrů produkce

     Měření lze dělit na přímé a nepřímé. Přímým měřením se získávají 
kvantitativní informace o:

    - ceně programového vybavení
    - rychlosti
    - paměťové náročnosti
    - rozsahu zdrojového kódu (často používanou jednotkou je "počet řádků 
      zdrojového programu" (LOC - Lines of Code)
    - produktivita pracovníků nebo použitá kapacita pracovníků (vyjadřuje se 
      v jednotkách  "člověko-roky", ve vyspělých zemích častěji člověko-
      měsíce (man-month, person-month). 
    - chybovost programu

Nepřímým měřením se nejčastěji hodnotí kvalitativní vlastnosti programu jako:

    - funkčnost
    - účinnost
    - kvalita
    - spolehlivost
    - složitost
    - udržovatelnost

     Oblast programové metrologie lze kategorizovat podle obr.2.2.

     Měření orientovaná na kvalitativní veličiny mohou u dané části programu 
dospět k hodnotám těchto veličin:

      produktivita = KLOC / PM   KLOC - tisíc řádků zdrojového programu
                                 PM  -  počet člověko-měsíců

      kvalita = počet chyb / KLOC

     Jinou zajímavou zajímavou veličinou jsou náklady na 1 KLOC, nebo  úroveň 
dokumentace udávaná v jednotce

     počtech stránek dokumentace  /  KLOC

     Měření orientovaná na počet řádků zdrojového programu je v mnoha směrech 
problematická, zejména s ohledem na nejednoznačný smysl řádku zdrojového 
programu. Zastánci tvrdí, že je to jediná snadno měřitelní jednotka velikosti 
pro práci v rutinním režimu programování. Oponenti namítají, že tato 
jednotka je silně jazykově závislá, ubližuje dobře navrženým a tudíž i 
kratším programům a pro použití v prognóze vyžaduje detailní informace, které 
v době prvotních analýz nejsou k dispozici.

     Měření funkčnosti se zaměřují na míru, jakou program vyhovuje zadání či 
uživateli.  Jsou často založena na tabulkách či anketních dotaznících, 
jejichž zpracováním se získává výsledek "počtu bodů funkčnosti". Uveďme 
několik typických otázek ankety pro funkční měření:

   - Má produkt systém spolehlivého zálohování a zotavení?
   - Požadují se komunikační data?
   - Má produkt distribuované zpracování?
   - Je výkonnost produktu kritická?
   - Funguje produkt v existujícím, silně zatíženém operačním prostředí?
   - Požaduje produkt interaktivní vstup dat?
   - Pracuje vstup dat s vícenásobným systémem obrazovkových oken a operací?
   - Jsou hlavní kmenové soubory aktualizovány on-line?
   - Jsou vstupy, výstupy, soubory či jiná komunikace složité?
   - Je vnitřní zpracování složité?
   - Je navržený program znovupoužitelný?
   - Jsou v programu zabudovány prostředky instalace a konverze?
   - Je program určen pro vícenásobnou instalaci u různých uživatelů?
   - Umožňuje program adaptivní úpravy snadné pro uživatele?

     Získaný počet bodů funkčnosti (FP - function point) se dále používá pro 
měření produktivity, kvality a jiných parametrů:

     produktivita = FP / PM

     kvalita = počet chyb / FP

     nákladovost = celkové náklady / FP

     dokumentace = počet stran dokumentace / FP

2.5  Odhady a prognózy

     Existuje řada metodických návodů a postupů na získání prognostických 
informací a kvantitativních odhadů nejrůznějších veličin souvisejících s 
výstavbou programu a s jeho konečným ekonomicko-obchodním efektem. Odhad ceny 
tvorby programu a potřebné kapacity nebude mít asi ani v blízké budoucnosti 
charakter exaktní vědy, protože do procesu vstupuje mnoho parametrů ať už 
lidských, technických, společenských, politických, jejichž změna může 
významně ovlivňovat výsledek. Přesto se z původních postupů, připomínajících 
spíše černou magii stává postupně metodika s přijatelným stupněm rizika 
nepřesnosti.

    Pro odhady a prognózy v určité oblasti se používají tzv. prognostické 
nebo odhadní modely. jsou to empiricky odvozené vzorce a vztahy, které 
vznikly na základě zkušeností a které umožňují odhad určité vlastnosti v 
určité fázi postupu vývoje programu. Tzv. kapacitní modely umožňují odhad 
kapacit (v člověko-měsících), dobu potřebnou pro realizaci programu a jiné 
vlastnosti.

     Pro usnadnění prognóz a odhadů dovolují usnadnit plánování, odhadnou 
cenu a kapacity pro realizaci a provádět analýzu na bázi "co se stane 
když...?", pro některé důležité parametry jako je doba ukončení projektu, 
počet programátorů na projektu ap. Většina těchto poradních a odhadových 
systémů vyžadují tyto obecné charakteristiky:

   - kvantitativní odhad velikosti (buď v KLOC nebo v FP)
   - kvalitativní parametry jako složitost, požadovanou spolehlivost, 
     komerční účinnost ap.
   - charakteristiku pracovního týmu a pracovního prostředí

     Mezi známé systémy tohoto druhu patří SLIM (využívající lineární 
programování, statistickou simulaci, plánovací metodu PERT) nebo systém 
ASTIMAC, pracující na principu makro-prognostického modelu. Oba systémy byly 
implementovány na osobních počítačích.

2.6  Lidský činitel.

    Vliv počtu, kvalifikace, psychologických faktorů pracovníků, organizace 
jejich práce na realizaci programového díla a možnosti  odhadu tohoto vlivu v 
prvotních fázích projektu jsou zpracovány v četných výzkumných projektech a 
publikacích. Je skutečností, že dodržení termínu ukončení projektu je často 
důležitější než dodržení plánovaných nákladů. Mezi mnoha manažery je stále 
rozšířen mýtus, že zpoždění v postupu tvorby programu lze dohnat nasazením 
dalších programátorů. Výsledkem je většinou další zpoždění.

     Jen ztěží existuje projekt, jehož kapacita je 10 člověko-roků a který by 
bylo možné dělat s jedním programátorem 10 let. Nelze zaručit, že 10 
programátorů dokončí tento projekt za 1 rok a ani fantasta nemůže očekávat, 
že by 120 programátorů dokončilo tento projekt za 1 měsíc.

     Práce týmu má všechny vlastnosti složitého paralelního systému, ve 
kterém jednotlivé etapy mají značný stupeň neurčitosti co do časové 
náročnosti. Organizace a plánování práce týmu se řeší s využitím řady 
plánovacích metod známých z jiné inženýrsko-ekonomické činnosti (PERT,CPM 
aj.).

   Pro řadu středně velkých projektů se používá pravidla 40-20-40, které 
vyjadřuje procento celkové kapacity potřebné pro 3 typické fáze tvorby 
programu:
         analýza a návrh    40%
         implementace       2O%
         ladění a testování 40%

    Toto pravidlo je nutno brát jen jako velmi hrubý odhad, vyhovující 
standardním a  známým problémům.

2.7  Koupit či vyrobit?

     Tato otázka je u rozsáhlých a nákladných projektů svrchovaně důležitá a 
 ignorování důkladné analýzy může vést k význačným ekonomickým ztrátám. 
 Nejčastěji máme tuto volbu:

     - program lze koupit přímo bez úprav
     - program lze koupit a upravit
     - program lze vyrobit na zakázku

     U levného vybavení, jakým je ve vyspělých zemích typické programové 
 vybavení pro počítače PC, je často levnější koupit a vyzkoušet, než provádět 
 sáhodlouhé analýzy na papíře.

      Pro nákladné programy se doporučuje následující postup:

    a) Specifikace funkce a výkonu požadovaného programu. Pokud možno 
       specifikovat měřitelné parametry.

    b) Odhad ceny při vlastní tvorbě a odhad doby dokončení

    c) Nalezení cca tří či čtyř vhodných programů dostupných na trhu, které 
       nejlépe vyhovují stanoveným požadavkům.
 
    d) Vytvořit srovnávací tabulku v nejdůležitějších, váhově odlišených 
       parametrech, vlastnosti ohodnotit a sumarizovat celkové hodnocení. kde 
       je možné, provést testovací zkoušení programů (Benchmarking) 
       poskytující další informace pro srovnání kandidátů

     e) Hodnotit dále každý kandidující systém na základě:
        - kvality předchozích produktů výrobce
        - dodavatelských a servisních služeb
        - pověsti produktu i výrobce

     f) Získat a vyhodnotit zkušenosti jiných uživatelů.

 2.8  Plánování organizace pracovního týmu

     Plánovač není vždy kompetentní k určení organizace pracovního týmu. Tento 
 aspekt však nelze z etapy plánování zcela vyloučit. Pro organizaci N osob 
 lze najít 3 typické základní způsoby organizace:

    a) N osobám je přiděleno M různých úkolů (N<M) značně vzájemně 
 nezávislých. Koordinační činnost zvládne jeden manažer, který může řídit i 
 více takových projektů.

    b) N osobám je přiděleno M různých úkolů (N>M), takže jsou vytvořeny 
 neformální týmy. Každý tým má svého neformálního vedoucího, určeného ad hoc 
 (pro daný účel). Koordinaci týmů zajišťuje manažer.

    d) N osob je rozděleno do t týmů; každý tým má přidělen jeden nebo více 
 funkčních úkolů; každý tým má svou vlastní organizaci a strukturu; celkovou 
 koordinaci provádí hlavní manažer spolu s vedoucími týmu.

      Podle zkušeností z posledních let, je třetí způsob organizace týmu při 
 práci na rozsáhlejších projektech nejproduktivnější.

     Jedním z již klasických způsobů organizace týmu je princip tzv. "týmu 
 hlavního programátora" ("chief programmer team"). V této organizaci 
 spolupracují tyto složky:

     - Vedoucí programátor (senior engineer, chief programmer), plánuje, 
       koordinuje a hodnotí veškerou technickou činnost týmu.

     - Technický personál (technical staff), obvykle 2-5 osob provádí hlavní 
       analytické a vývojové činnosti.

     - Zástupce vedoucího (backup engineer) pomáhá vedoucímu a je schopen jej 
       zastoupit bez ztráty kontinuity práce na projektu.

     - Skupina specialistů  (např. specialisti na telekomunikaci, báze dat, 
       problémy RT ap.) tvoří specializovanou podporu týmu a může sloužit i 
       více pracovním týmům. 

     - Pomocný personál (kreslič, písař, úředník) slouží více pracovním týmům.

     - Programový knihovník slouží více pracovním týmům a plní řadu velmi 
       významných funkcí. Udržuje a řídí všechny prvky programové konfigurace 
       (t.j. dokumentaci, zdrojové texty, data, paměťová média). Katalogizuje 
       a archivuje verze programových produktů; podílí se na přípravě a 
       hodnocení dokumentace. Funkce knihovníka je mimořádně významná, protože 
       zodpovídá za řízení a hodnocení celé konfigurace.

      Tento způsob organizace vede ke snížení řady nedorozumění, která jsou 
 typická pro skupinu samostatně pracujících nezávislých programátorů.