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čů.