Kritéria hodnocení programu a programátora
Hodnotitelé
Program
je zboží. To znamená, že je předmětem tržních vztahů. Jen málo programů,
jde obvykle o základní software, je děláno pro volný prodej. To si může
dovolit pouze prosperující "softhaus". Rozhodující množství
programů je děláno na zakázku. Pokud tedy budeme mluvit o trhu programů,
tak jde v podstatě o trh zakázkový. Cílem této učebnice je umožnit
programátorům obstát na tomto trhu.
Pro
další výklad bude vhodné definovat účastníky trhu: zadavatele, uživatele,
provozovatele a řešitele i když často budou některý z nich reprezentováni
jedinou fyzickou osobou. (Uvedené pojmy se budou v učebnici často vyskytovat,
v souvislosti s technikami programování.)
a)
Zadavatel - je subjekt, který sjednocuje požadavky uživatelů, zadává nebo
nechává zpracovat zadání úlohy, vybírá řešitele úlohy, sjednává
hospodářskou smlouvu s řešitelem, dohlíží nad dodržováním smlouvy,
organizuje ověřování funkční způsobilosti (oponentní jednání) a
financuje řešení. Tento subjekt je někdy žertovně charakterizován:
"Neví co chce, ale důsledně to vyžaduje".
b)
Uživatel - je subjekt, který specifikuje požadavky řešení, ověřuje a využívá
řešení. Pro uživatele je charakteristické (a v podstatě přirozené), že
ví co chce až v okamžiku, když vidí hotové řešení. Je inspirován, často
vnějšími podněty, ke změně zadání. Chce řešení pružné, které dává
takové výsledky, jaké v daném okamžiku potřebuje. Uživatel vždy zdůrazňuje
a bude zdůrazňovat své specifické podmínky (právě proto specifikuje požadavky
řešení).
c)
Provozovatel je profesně vzdělaný subjekt, který přebírá řešenou úlohu
od řešitele a zabezpečuje její zpracování. Odpovídá za bezchybný provoz
úlohy. Protože provoz je obvykle placen podle spotřebovaného času, je pro
provozovatele charakteristické rčení: "chce aby se nic nepočítalo, ale
pokud možno dlouho". Má tendenci svádět jakékoliv chybné výsledky na
nedokonalost práce řešitele. Ačkoliv by měl zabezpečovat změny v
programech, z výše uvedeného důvodu, přenechává tuto činnost raději řešiteli.
Nedotaženou provozní a programovou dokumentací ho řešitel v tomto směru, a
proti
sobě, podporuje.
d)
Řešitel - je subjekt, který nikdy přesně neví, co budou v budoucnu chtít
ostatní partneři. Musí počítat, zvláště v úlohách z oblasti systémů
velení, řízení a spojení, že bude muset měnit řešení, často "na
poslední chvíli". To nemusí být způsobeno jen změnami v zadání, ale
též špatným pochopením zadání. Ze zkušenosti ví, že exaktně provést
datovou a funkční analýzu lze pouze u menších úloh. Je si vědom, že je
pouze člověk, který se nevědomě dopouští chyb a že neexistuje metoda,
která by stoprocentně otestovala správnost programu. (Viděl jsem případ výskytu
chyby v programu po čtyřech letech jeho provozování). Výsledek práce řešitele
musí být kvalitní. Kvalitu řešení posuzují všichni jeho partneři.
Kritéria hodnocení
Každá
doba měla svá kritéria pro hodnocení programů a nepřímo tím hodnocení
jejich tvůrců - programátorů. Ti volili takové techniky (postupy) programování,
které umožnily vyrovnat se s požadavky rozhodujícími při hodnocení. S počátku
rozhodující požadavky kladla výpočetní technika. Dnes je to zadavatel úlohy
- zákazník.
Začátkem
šedesátých let se kladl důraz na úsporu paměti rychlost výpočtu, v době
počítačů vyráběných podle sovětského vzoru, na odolnost proti poruchám.
Teď, v době nasyceného trhu výpočetní technikou, základními i aplikovanými
programy, je důraz kladen na kvalitu a cenu programu.
Není
nutno zdůrazňovat, že neplatí přímá úměra mezi kvalitou a cenou. I když
čím kvalitnější program, tím se dá prodat za vyšší cenu.
Cena programu
Cena
programu je v současné době určována především mzdovými náklady. Od těchto
se totiž odvíjí odvody z mezd (kolem 50%), výrobní a správní režie a v
konečném důsledku zisk. To znamená, že cena je nepřímo úměrná
produktivitě práce programátora i když jeho mzda bude tvořit vždy pouze
zlomek ceny.
Produktivita
práce programátora závisí na použitých metodách a technikách, na použitém
programovacím systému (jazyku) a samozřejmě na znalostech a pilnosti programátora.
Hodnota programátora je totiž tím větší, čím levnější a kvalitnější
programy produkuje.
Produktivita
použité techniky může rozhodným způsobem ovlivnit chování zadavatele při
výběru řešení. Zadavatel nemá zájem o program, který bude mít dodán
později než ho potřebuje, zvláště když konkurence bude schopná se jeho
požadavku podřídit. (V podstatě zadavatel chce, aby mu bylo řešení dodáno
"pokud možno včera".)
Druhou
složkou, která ovlivňuje chování zadavatele, je kvalita programu.
Kvalita programu
Kvalita
programu je soubor vlastností, které lze rozdělit na vlastnosti zjevné - ověřitelné
zadavatelem nebo uživatelem a vlastnosti vnitřní - ověřitelné profesním
programátorem, provozovatelem nebo řešitelem. Mezi vnější faktory patří
především rychlost, spolehlivost, robustnost, uživatelský komfort, univerzálnost,
a možnost spolupráce s jinými programy. Mezi vnitřní vlastnosti patří
modulárnost, modifikovatelnost, možnost nového použití programu nebo jeho
částí a srozumitelnost programu. U programů, stejně jako u jiných produktů
lidské činnosti, soustřeďuje se pozornost na jejich kvalitu, která v podmínkách
armády má mnohem přísnější kritéria než u komerční produkce programů.
Správnost
programu je schopnost provádět svou činnost přesně podle požadavků uživatele.
Správnost programu je testuje v době ověřování funkční způsobilosti
(OFZ) na datech a technice uživatele. Podle zkušeností stačí k ověření
správnosti programu období tři krát delší něž je periodicita nejméně
častého zpracování automatizovaného procesu. (Doba a podmínky OFZ se
obvykle stanovují při uzavírání hospodářské smlouvy.)
Robustnost
programu je schopnost uchovat si svou funkci i za podmínek, které nejsou běžné
nebo normální. Robustnost odpovídá na otázku, co se stane za podmínek,
které nestanovuje zadání. Tím se liší od správnosti, která odpovídá
chování programu v explicitně stanovených podmínkách. Na rozdíl od správnosti
je robustnost mnohem neurčitější než přesnost. Zahrnuje chování v situacích,
které sice nejsou normální, ale které lze předvídat. Určení takových
situacích závisí na řešiteli. Měla by zajistit, aby nekorektní podnět či
situace nevedl ke katastrofickému výsledku, ale k upozornění nebo ukončení
programu. Někdy se používá pojem spolehlivost jako synonymum robustnosti.
Vhodnější je však používat pojem spolehlivost pro vlastnost danou současně
jak správností tak spolehlivostí.
Racionalita
a efektivita jsou přirozenými vlastnostmi moderního progamu. Vlastností
programu není pouhá automatizace činností, prováděných konvenčními
prostředky a metodami. Program musí tyto činnosti racionalizovat tak, aby uživateli
ze zavedení výpočetní techniky plynul hmatatelný efekt. (Přínosy plynoucí
uživateli ze zavedení automatizace musí být vyšší než vynaložené náklady.)
Programátor v současné době již proto není jen pouhým sestavovatelem
programu, ale racionalizátorem, řešitelem. (K sestavování programu v dnešní
době slouží řada nástrojů třídy low lever case, které slouží k vytváření
programu nebo jeho částí.) Proto čím déle tím více se místo názvu
programátor používá pojmu řešitel (úlohy).
Snadnost
použití je vlastnost umožňující snadno se naučit používat program, připravovat
pro něj data a interpretovat výsledky. Snadnost použití se někdy nazývá též
uživatelským komfortem nebo dokonce přítulností. V současné době, kdy uživatel
je i provozovatelem programu, jednou z rozhodujících vlastností.
Znovupoužití
je vlastnost umožňující program nebo jeho částí dlouhodobě používat
nebo ho použít pro novou aplikaci. Části programu, u kterých lze předpokládat
znovupoužití mohou být vysoce kvalitní a při tom náklady na jejich pořízení
budou rentabilní. Jde o fakt, že každý program po určité době přestane
plnit podmínku znovupoužití. Údržbou programu se dá dosáhnout vhodného
prodloužení této doby. Podle desetiletých zkušeností z budování a
provozování subsystému "Řízení průmyslové stavební výroby a jejího
odbytu podniku ŽPSV" připadalo více než 70% nákladů na údržbu
subsystému. Ke změně některé části systému řízení stačila například
personální změna na vedoucí funkci. Změny v legislativě a v cenových
relacích není nutné zdůrazňovat. Z celkových nákladů na údržbu připadalo
přibližně: 50% na změny v požadavcích uživatele nebo legislativy, 20% na
změny v datech (např. růst cen), 11% na prostředky pro ochranu před závažnými
chybami, 9% na ladění procedur a funkcí, 2% na změny v technickém vybavení,
8% na ostatní požadavky.
Modifikovatelnost
programu je vlastnost na které závisí rentabilita programu. Mírou
modifikovatelnosti programu je snadnost, s jakou může být program změněn.
Čím je program větší, tím jsou změny obtížnější. Snadné
modifikovatelnosti se dosahuje jednoduchým návrhem a autonomností programových
částí - modulů.
Kompatibilnost
je schopnost spolupracovat s jinými programy. Často se omezuje pouze na
soubory. Kompatibility se dosahuje homogenností návrhu a dodržováním
standardních konvencí pro meziprogramovou komunikaci, která zahrnuje zejména:
a) standardní formát dat (jako například v UNIX-u, kde každý soubor je chápán
jako posloupnost znaků), b) standardní formát dat (jako například v LISP-u,
kde každá struktura dat i programů je reprezentována binárním stromem), c)
standardním uživatelským rozhraním (jako například u SMALLTALK-u, kde každá
jednotka vede jednotný způsob styku s uživatelem, založený na oknech, ikonách,
grafice apod.).
Účinnost
je vlastnost, umožňující optimální využití technických parametrů výpočetního
systému.(Nejde tedy o snížení programování na úroveň stroje.)
Přenositelnost
programu je snadnost, se kterou může být programový produkt přenesen do jiných
technických i programových výpočetních prostředí.
Verifikovatelnost
je snadnost, se kterou lze vytvořit testovací procedury a testovací data pro
vysledování chyb v procesu ověřování funkční způsobilosti programu.
Integrita
programu je jeho schopnost zabránit neautorizovanému přístupu a změnám v
jeho vnitřní výstavbě. Nejde zde však o změny ve výpočtu, které řešitel
programu předpokládá a uživateli umožní (parametricky řízené programy).
Volba programovací techniky
Je
zřejmé, že mezi všemi uvedenými složkami kvality programu je řada složek,
které se navzájem vylučují nebo potlačují. Snaha o co nejúčinnější
program může vést k úzké vazbě na na technické vlastnosti výpočetního
prostředku což je v rozporu s požadavkem portability.
Při
tvorbě programového produktu s vysokou kvalitou je nutné hledat a stanovit
kompromis mezi řadou požadovaných vlastností a cílů. K jejich dosažení
je třeba použít vnitřních složek a vlastností kvality programu, které
dovede rozeznat pouze profesionální programátor.
Existuje řada technik, které slouží k vytváření programů. V současné době je vhodná pouze taková programovací technika, která zaručí vysokou produktivitu práce s vysokou kvalitou programu a takové programovací prostředí, které tuto techniku umožní uplatnit. Dřívější kritéria, jako jsou rychlost, malá náročnost na paměť a podobně, jsou již levně překonávaná technickými parametry počítačů.