\chapter{Testování}
Nejen na sam\'{e}m konci, ale i po portac\'{\i}ch zdrojov\'{y}ch k\'{o}dů
byly provedeny kompletn\'{\i} testy, kter\'{e} měly ověřit funkčnost
programu.
Testovac\'{\i} vstupy jsou na přilo\v{z}en\'{e}m optick\'{e}m m\'{e}diu
v~adres\'{a}ři {\bf /TEST}


\section{Testy po portaci do ANSI C}\label{TestyAnsi}
Korektn\'{\i} proveden\'{\i} v\v{s}ech změn učiněn\'{y}ch v~předchoz\'{\i}m
kroku mohly potvrdit pouze podrobn\'{e} testy proveden\'{e} nad co
největ\v{s}\'{\i} mno\v{z}inou \'{u}loh.

Testovac\'{\i} sadou byla sb\'{\i}rka standardn\'{\i}ch funkc\'{\i}
poskytnuta zadavatelem. Testovalo se metodikou {\it black box} FOOTNOTE(čern\'{a}
skř\'{\i}ňka = testovac\'{\i} metodika, kter\'{a} nepo\v{z}aduje znalost
vnitřn\'{\i}ch pochodů testovan\'{e}ho objektu a jen kontroluje
spr\'{a}vnost v\'{y}stupů na určit\'{e} vstupy), přičem\v{z} jako
referenčn\'{\i} hodnoty byly vzaty v\'{y}stupy spustiteln\'{e}ho Espressa
dodan\'{e}ho na zač\'{a}tku pr\'{a}ce.

Testy se daly rozdělit do dvou skupin podle nastaven\'{\i} programu a
velikosti testovan\'{e} mno\v{z}iny:
\begin{enumerate}
\item {\it z\'{a}kladn\'{\i} nastaven\'{\i}} Espressa (spou\v{s}těno s jedin\'{y}m parametrem - n\'{a}zvem vstupn\'{\i}ho souboru) pro {\it v\v{s}echny funkce} z testovac\'{\i} sady.
\item postupně {\it v\v{s}echny typy nastaven\'{\i}} Espressa (rozuměj v\v{s}echny mo\v{z}n\'{e} parametry) pro c\'{\i}leně zvolen\'{e} funkce (vstupn\'{\i} soubory)
\end{enumerate}
Prvn\'{\i} skupina slou\v{z}ila k ověřen\'{\i} korektnosti
minimalizačn\'{\i} metody. Proto se pou\v{z}ila na v\v{s}echny dostupn\'{e}
funkce. Druh\'{a} skupina měla ověřit v\v{s}echny ostatn\'{\i} funkce.
Spr\'{a}vně by se měly prov\'{e}st komplexn\'{\i} testy nad v\v{s}emi
dostupn\'{y}mi logick\'{y}mi funkcemi. Někter\'{e} funkce Espressa jsou
v\'{y}početně n\'{a}ročn\'{e} a vy\v{z}\'{a}daly by si spoustu času a
energie. Proto byl z ka\v{z}d\'{e}ho ,,druhu`` funkce vybr\'{a}n jeden
z\'{a}stupce, na kter\'{e}m byly provedeny v\v{s}echny operace. V\'{y}klad
t\'{y}kaj\'{\i}c\'{\i} se zm\'{\i}něn\'{y}ch ,,druhů`` logick\'{y}ch
funkc\'{\i} nen\'{\i} pro n\'{a}\v{s} př\'{\i}pad nezbytn\'{y}.
Důle\v{z}it\'{e} je pouze to, \v{z}e se to při testov\'{a}n\'{\i}
neopomnělo. Jestli m\'{a} čitatel o toto t\'{e}ma z\'{a}jem, mů\v{z}e si jej
přeč\'{\i}st na manu\'{a}lov\'{e} str\'{a}nce zab\'{y}vaj\'{\i}c\'{\i} se
vstupn\'{\i}m form\'{a}tem pro Espreso
\cite{EspressoFormat}. Po testech nad prvn\'{\i}
skupinou byla do druh\'{e} skupiny (skupina pro testov\'{a}n\'{\i} v\v{s}ech
parametrů) dodatečně vlo\v{z}ena dal\v{s}\'{\i} funkce ulo\v{z}en\'{a}
v~souboru s n\'{a}zvem {\it o64.pla. }Touto funkc\'{\i} se budou zab\'{y}vat i
n\'{a}sleduj\'{\i}c\'{\i} kapitoly, neboť jako jedin\'{a} ze 165
logick\'{y}ch funkc\'{\i} způsobila p\'{a}d programu v~z\'{a}kladn\'{\i}m
nastaven\'{\i}.

Testovac\'{\i} soubory a skripty jsou um\'{\i}stěny na přilo\v{z}en\'{e}m
m\'{e}diu v adres\'{a}ři {\bf /TEST/ANSI}. Stejn\'{a} testovan\'{\i} skupina
a nastaven\'{\i} byla pou\v{z}ita i v dal\v{s}\'{\i}ch testech.


\subsection{Vyhodnocen\'{\i} v\'{y}sledků testů}\label{ZaveryAnsi}
V~z\'{a}kladn\'{\i}m nastaven\'{\i} se v\'{y}stupy testovan\'{e} verze
shodovaly s~v\'{y}stupy referenčn\'{\i}ho Espressa. Při zad\'{a}n\'{\i}
vstupn\'{\i} funkce ulo\v{z}en\'{e} v~souboru {\it o64.pla} ,,havarovaly`` oba programy.
Po opětovn\'{e}m spu\v{s}těn\'{\i} a sledov\'{a}n\'{\i}
vyu\v{z}\'{\i}van\'{y}ch syst\'{e}mov\'{y}ch prostředků bylo zji\v{s}těno,
\v{z}e program postupně alokuje paměť po č\'{\i}m d\'{a}l vět\v{s}\'{\i}ch
bloc\'{\i}ch. V okam\v{z}iku p\'{a}du měl přiděleno přes 1GB operačn\'{\i}
paměti! Z~toho se usuzuje, \v{z}e mohlo doj\'{\i}t k vyčerp\'{a}n\'{\i}
voln\'{e} paměti pro tento proces, operačn\'{\i} syst\'{e}m t\'{\i}m
p\'{a}dem nevyhověl dal\v{s}\'{\i}mu po\v{z}adavku na paměť, program
nekontroloval n\'{a}vratovou hodnotu alokačn\'{\i} funkce (co\v{z} je
obvykl\'{e} zjednodu\v{s}en\'{\i} při programov\'{a}n\'{\i}) a
n\'{a}sledn\'{y}m př\'{\i}stupem mimo dovolen\'{e} meze byl operačn\'{\i}m
syst\'{e}mem zastaven. Potvrzen\'{\i} nebo vyvr\'{a}cen\'{\i} t\'{e}to
domněnky bude jedn\'{\i}m z~c\'{\i}lů anal\'{y}zy.

V~druh\'{e} testovac\'{\i} skupině dopadlo porovn\'{a}n\'{\i} ve vět\v{s}ině
př\'{\i}padů bez rozd\'{\i}lů. V někter\'{y}ch př\'{\i}padech byly
porovn\'{a}van\'{e} soubory velikost\'{\i} stejn\'{e}, obsahem v\v{s}ak
odli\v{s}n\'{e} (porovn\'{a}v\'{a}no př\'{\i}kazem {\it comp} na MS Windows XP SP2
CZ). Při pou\v{z}it\'{\i} specializovaněj\v{s}\'{\i}ho n\'{a}stroje na
porovn\'{a}v\'{a}n\'{\i} obsahů dvou souborů (jak\'{y} obsahuje např. PSPad
nebo TotalCommander) vy\v{s}lo najevo, \v{z}e soubory jsou i obsahově
stejn\'{e}, jen jsou v nich zpřeh\'{a}zen\'{e} ř\'{a}dky. Toto rozličn\'{e}
uskupen\'{\i} nem\'{a} vliv na spr\'{a}vnost v\'{y}sledn\'{e} funkce. Tento
rozd\'{\i}l se vyskytl jen v nastaven\'{\i} vyu\v{z}\'{\i}vaj\'{\i}c\'{\i}m
{\it n\'{a}hodn\'{e}} uspoř\'{a}d\'{a}n\'{\i} (parametr {\it -erandom} viz. Popis parametrů Espressa \ref{EspressoMan})
 a tud\'{\i}\v{z} to nen\'{\i} chyba, ale jen důsledek
vyu\v{z}\'{\i}van\'{e} n\'{a}hody.
Při zm\'{\i}něn\'{e} funkci o64.pla bylo chov\'{a}n\'{\i} obou programů
toto\v{z}n\'{e} a byly ukončeny operačn\'{\i}m syst\'{e}mem t\'{e}měř ve
v\v{s}ech př\'{\i}padech. Nestalo se tak jen v~někter\'{y}ch
nastaven\'{\i}ch.

Funkce ze souboru {\it o64.pla} nebyla jedin\'{a} probl\'{e}mov\'{a}.
N\'{a}sleduj\'{\i}c\'{\i} tabulka ud\'{a}v\'{a} n\'{a}zev funkce (souboru) a
parametr, kter\'{y} způsobil probl\'{e}m. Jsou zde zahrnuty i dva
př\'{\i}pady pro funkci $o64$, kdy do\v{s}lo k~odli\v{s}n\'{e}mu způsobu p\'{a}du
-- bez alokace velk\'{e}ho mno\v{z}stv\'{\i} paměti.

\begin{table}[htp]
\begin{center}
\begin{tabular}{|l|l|}
\hline
\bf{Funkce (soubor)} & \bf{Nastavení} \\
\hline
io.pla & -ekiss \\
\hline
phasepair.pla & -Dpair \\
\hline
phasepair.pla & -Dpairall \\
\hline
type.pla & -ekiss \\
\hline
o64.pla & -ekiss \\
\hline
o64.pla & -Dmap \\
\hline
\end{tabular}
\end{center}
\caption{Nekorektní ukončení programu Espresso}
\label{tabulkaUkonceni}
\end{table}

N\'{a}sleduj\'{\i}c\'{\i} tabulka uv\'{a}d\'{\i} př\'{\i}pady, kdy program
vypsal chybovou hl\'{a}\v{s}ku a n\'{a}sledně se s\'{a}m ukončil. Uvedeny
jsou zde pro zdůrazněn\'{\i} potřeby indikace a určen\'{\i} chyby
v~navrhovan\'{e} knihovně.

\begin{table}[hbt]
\begin{center}
\begin{tabular}{|p{100pt}|l|p{250pt}|}
\hline
\bf{Funkce (soubor)} & \bf{Nastavení} & \bf{Hláška} \\
\hline
kiss.pla, label.pla, symbolic.pla & -oeqn & espresso Must have binary-valued function for EQNTOTT output mode \\
\hline
kiss.pla & -Dgasp & espresso empty reduction in reduce\_ gasp, shouldn't happen \\
\hline
kiss.pla & -Dsuper\_ gasp & espresso empty reduction in reduce\_ gasp, shouldn't happen \\
\hline
symbolic.pla & -Dpairall & espresso ON-set and OFF-set are not orthogonal \\
\hline
o64.pla & -Dminterms & espresso unreasonable expansion in unravel \\
\hline
\end{tabular}
\caption{Pády programu Espresso}
\label{tabulkaPadu}
\end{center}
\end{table}

\begin{center}
Ukončen\'{\i} programu Espresso s~vyps\'{a}n\'{\i}m chybov\'{e}
hl\'{a}\v{s}ky
\end{center}


V\v{s}echny chyby bylo nutn\'{e} br\'{a}t na vědom\'{\i} a v~anal\'{y}ze jim
věnovat zvl\'{a}\v{s}tn\'{\i} pozornost. Odhalily toti\v{z} nedostatky
původn\'{\i}ho Espressa, kter\'{e} je \v{z}\'{a}douc\'{\i} opravit nebo
alespoň minimalizovat jejich n\'{a}sledky.


\section{Z\'{a}věrečn\'{e} testy}
Z\'{a}věrečn\'{e} testy byly provedeny nad stejnou testovac\'{\i}
mno\v{z}inou jako Testy po portaci do ANSI C.
Tentokr\'{a}t se testovala ji\v{z} hotov\'{a} knihovna.
Ověřen\'{\i} funkčnosti původn\'{\i}ch algoritmů Espressa, nově
přidan\'{y}ch parametrů a funkc\'{\i} bylo provedeno na dynamick\'{e} verzi
knihovny pro MS Windows.
Tyto testy odhalily drobn\'{e} chyby a nedodělky, kter\'{e} byly po
odhalen\'{\i} opraveny.
Na ostatn\'{\i}ch verz\'{\i}ch se ověřovala pouze mo\v{z}nost vlo\v{z}it a
n\'{a}sledně pou\v{z}it knihovnu ve vlastn\'{\i}m zdrojov\'{e}m k\'{o}du.
Hloubkov\'{e} testy ka\v{z}d\'{e} verze by byly zbytečn\'{e}, proto\v{z}e ve
zdrojov\'{e}m k\'{o}du byly pou\v{z}ity pouze knihovn\'{\i} funkce a
k~\'{u}prav\'{a}m zdrojov\'{y}ch k\'{o}dů vyjma př\'{\i}padu dynamick\'{e}
knihovny pro MS Windows nedoch\'{a}zelo.
