\chapter{Testování}
\label{chap:test}

\bmin{} je aplikací, jejímž cílem není optimálně a rychle minimalizovat logické funkce. Proto nemá smysl dělat
výkonnostní testy. Místo toho je udělán \textbf{usability test}, nebo-li test použitelnosti. Jeho účelem je otestovat
použitelnost aplikace na~uživatelích. Více informací o~podstatě usability testu lze najít například v~\cite{usability}.


\section{Usability test}
\label{sec:usability}

\subsection{Cíle testu}
\label{sec:test-aims}

Cílů testu je několik:

\begin{enumerate}
\item Zjistit, zda uživatel dokáže plně ovládat aplikaci bez~použití manuálů.
\item Zjistit, zda uživatel dokáže v~aplikaci optimálně používat pravdivostní tabulku.
\item Zjistit, zda uživatel dokáže v~aplikaci optimálně používat Karnaughovu mapu.
\item Zjistit, zda uživatel dokáže v~aplikaci optimálně používat Booleovskou n-krychli.
\item Zjistit, zda je uživatel schopný pochopit Quine--McCluskey algoritmus z~výpisu, jenž je zobrazen v aplikaci.
\item Zjistit, zda je uživatel schopný pochopit Espresso při~jeho krokování.
\end{enumerate}

\newpage

\subsection{Výběr účastníků}
\label{sec:test-users}

Bylo vybráno celkem 6 testovacích uživatelů. V~dalším textu budou označeni jako U1 až U6. Podmínkou výběru byla alespoň
základní znalost logických funkcí a jejich minimalizací. Všichni uživatelé prošli nějakým kurzem zaměřeným na~logické
obvody, a tak každý znal representace logických funkcí a uměl je minimalizovat pomocí Karnaughových map. Pouze uživatelé
U2 a U3 znali navíc ještě fungování algoritmu Quine--Mccluskey. O~Espressu nikdo z~uživatelů nikdy neslyšel.


\subsection{Parametry testu}
\label{sec:test-param}

Test byl připraven formou dotazníku. Každému uživateli byl poslán emailem jeden dotazník, jehož součástí bylo i zadání
čtyř úkolů uvedených v~sekci \ref{sec:test-exams}. Uživatelé poté doma, u~svého počítače, dotazník vyplnili a poslali
zpět. Při~dělání úkolů 1 až 3 zároveň měřili, jak dlouho jim trvalo, než daný úkol dokončili. Otázky byly rozděleny
do~tří skupin: 

\begin{enumerate}
\item Otázky týkající se znalostí o logických funkcích a minimalizací -- odpovědi pouze \textbf{ano} nebo \textbf{ne}. 
\item Otázky týkající se jednotlivých úkolů -- výběr jedné z~odpovědí.
\item Otázky týkající se celkového dojmu z~testu -- hodnocení jednotlivých částí, vlastní návrhy a popsání svých dojmů. 
\end{enumerate}

Test byl koncipován tak, aby zabral uživateli přibližně půl hodiny.


\subsection{Úkoly}
\label{sec:test-exams}

Pro uživatele byly připraveny čtyři navazující úkoly. Následující seznam uvádí jejich znění. U~každého úkolu jsou navíc
ještě v~závorce vypsány čísla výše uvedených cílů, které daný úkol pokrývá.

\newcounter{ukol}
\begin{list}{\bfseries\upshape Úkol \arabic{ukol}:}
  {\usecounter{ukol}
    \setlength{\labelwidth}{1.5cm}
    \setlength{\leftmargin}{2cm}
    \setlength{\labelsep}{0.5cm}
    \setlength{\rightmargin}{2cm}
    \setlength{\topsep}{0.2ex plus 0.2ex minus 0.1ex}
    \setlength{\parsep}{0.2ex plus 0.2ex minus 0.1ex}
    \setlength{\itemsep}{1ex plus 0.2ex}
    \slshape }
\item Zapni program a vytvoř funkci o třech proměnných, která bude mít výstupní hodnotu 1 pro~mintermy s~indexem  1, 2
  a~3. Tedy funkci $f(c,b,a) = \fsum(1,2,3)$. Funkci zminamalizuj a~změň její reprezentaci na~Product
  of~Sums. \textnormal{(cíl 1 a 2)}
\item Nyní zobraz Booleovskou n-krychli. V ní najdi maxterm s~indexem 0 (a + b + c) a pak zkus změnit  jeho výstupní
  hodnotu na 1. Poté se projdi skrz krychli, otoč se a podívej se nahoru. Nakonec změň pohled (Camera) na~rotační
  a~zarotuj s~krychlí. \textnormal{(cíl 1 a 4)}
\item Nyní změň počet proměnných v logické funkci na~čtyři, nastav reprezentaci na Sum of~Products a~všechny výstupní
  hodnoty na 1. Dále zobraz Karnaughovu mapu. Změň výstupní hodnotu pro~mintermy 0 (a'b'c'd'), 1 (ab'c'd'), 3
  (abc'd').  Následně zobraz pokrytí a~jedno z~nich zvýrazni. Dále se pokus změnit popis mapy (legendu, která označuje
  negace proměnných) na~binární zápis proměnných. \textnormal{(cíl 1, 2 a 3)}
\item Nejprve zadej do~pole \code{Complete Form} tuto funkci: \code{f(d,c,b,a) = sum m(1,5,7,8,9,10,11,14,15)} (zkopíruj
  tam   toto zadání). Potom přepni na Quine-McCluskey a~koukni na~průběh algoritmu. Pak přepni na~Karnaughovu mapu,
  zaškrtni \code{Show covers} a~spusť Espresso krokování (tlačítko \code{Start}). Poté mačkej tlačítko \code{Next}
  a~pozoruj, jak se mění pokrytí. \textnormal{(cíl 5 a 6)}
\end{list}


\subsection{Analýza výsledků}
\label{sec:test-results}

V~následující analýze jsou výsledky rozděleny do~skupin podle zadaných úkolů. Navíc je přidána analýza testu z~celkového
dojmu. Na závěr jsou všechny výsledky shrnuty. 

\subsubsection{Úkol 1}
\label{sec:test-re1}
Při provádění Úkolu 1 postupovali téměř všichni uživatelé stejně. Nejprve klikli na~tlačítko \code{New...}. poté
výstupní hodnotu změnili tak, že dvakrát klikli na~pole s~výstupní hodnotou a~z~výběrového pole vybrali hodnotu
1. Nakonec klikli na~tlačítko \code{Minimize} a~ve~výběrovém poli v~hlavním layoutu změnili reprezentaci funkce. Jedinou
výjimku tvořil uživatel U4, který změnil výstupní hodnotu v~pravdivostní tabulce pomocí kontextového menu.

Splnění všech úkolů tedy proběhlo optimální cestou a všichni vše splnili, což znamená, že k~vytvoření funkce není třeba
manuál.

Naměřené časy ale nebyly optimální pro~polovinu uživatelů, kterým trvalo splnění úkolu déle jak 2 minuty. Uživatelům U1
a U2 trvalo splnění kolem 3 minut. Uživatel U4 dokonce strávil nad~úkolem déle než 5 minut, což podle jeho slov bylo
způsobeno hledáním způsobu změny výstupní hodnoty v~pravdivostní tabulce.


\subsubsection{Úkol 2}
\label{sec:test-re2}
V Úkolu 2, který byl zaměřen na~Booleovskou n-krychli, všichni uživatelé našli požadovaný maxterm pomocí postranního
seznamu. Pohyb po~krychli zvládli bez problémů uživatelé U1, U2, U3. Uživatelé U4 a U5 se akorát nedokázali podívat
nahoru a U6 vůbec netušil, jak se v~krychli pohybovat. Zároveň jako jediný nedokázal změnit hodnotu maxtermu přímo
v~krychli kliknutím na~příslušnou kouli. Vše zvládl až po použití manuálu. Následné přepnutí do~rotačního pohledu
nedělalo nikomu problém. Všichni použili kontextové menu. Rotování s~krychlí zvládli všichni pomocí šipek. Jedinou
výjimkou byl znovu uživatel U6, který musel použít manuál.

Časy se téměř u~všech uživatelů pohybovaly pod~3 minuty. Jedinou výjimkou byli U5, jemuž úkol trval 4 minuty, a U6,
který vzhledem k~použití manuálu čas neuvedl.


\subsubsection{Úkol 3}
\label{sec:test-re3}
V Úkolu 3 nejprve uživatelé měnili všechny hodnoty v~logické funkci. Pouze polovina z~nich použila optimální řešení,
kterým bylo vybrání akce \code{All output values to} v~kontextovém menu pravdivostní tabulky. Uživatel U1 měnil hodnoty
po~jedné a uživatelé U3 a U4 vše změnili až Karnaughově mapě, což byla zároveň další část úkolu, kterou zvládli všichni
bez~problémů. I zobrazení pokrytí a~změna popisu mapy proběhla bez~jakýkoliv potíží.

Uživatelé U2 a U5 zvládli úkol vypracovat v čase pod 3 minuty. Zbylí uživatelé to zvládli do 4 minut. To jsou poměrně
optimální časy.

\subsubsection{Úkol 4}
\label{sec:test-re4}
Úkol 4 byl zaměřen na minimalizační algoritmy. Čas zde měřen nebyl. Šlo především o~zjištění, zda je uživatel schopen
pochopit algoritmus, jehož průběh je v~aplikaci zobrazen.

U~algoritmu Quine--McCluskey byly odpovědi jednoznačné. Uživatelé U2 a U3, kteří algoritmus alespoň částečně znali,
napsali, že jim přišel přehledný. Ostatní pak uvedli, že z~jho průběhu vůbec nepochopili, jak funguje.

Uživatelé U2, U3, U4 a U6 při krokování Espressa alespoň trochu pochopili podstatu jednotlivých procedur. Ostatní, tedy
U1 a U5, uvedli, že průběh krokování Espressa vůbec nepochopili.

\subsubsection{Hodnocení a dojmy uživatelů}
\label{sec:test-imp}

V~poslední části testu měli uživatelé ohodnotit určité části aplikaci na~stupnici od~1 do~5, kde 1 znamená
\emph{nejlepší} a 5 \emph{nejhorší}. Výsledná hodnocení uvádí Tabulka \ref{tab:test-rating}. Zpracování průběhu
algoritmu Quine--McCluskey hodnotily pouze uživatelé, kteří ho znali.

\begin{table}[hbt]
  \centering
  \begin{tabular}{l|*{6}{c|}c}
     & U1 & U2 & U3 & U4 & U5 & U6 & Průměr \\
     \hline\hline
     Grafický vzhled                    & 1 & 2 & 2 & 1 & 2 & 1 & 1.5 \\ \hline
     Layout aplikace                    & 1 & 1 & 2 & 2 & 2 & 1 & 1.5 \\ \hline
     Ovladatelnost                      & 2 & 1 & 1 & 2 & 2 & 2 & 1.7 \\ \hline
     Zpracování pravdivostní tabulky    & 1 & 3 & 3 & 2 & 3 & 2 & 2.3 \\ \hline
     Zpracování Karnaughovy mapy        & 1 & 1 & 1 & 1 & 1 & 1 & 1.0 \\ \hline
     Zpracování Booleovská n-krychle    & 2 & 1 & 1 & 1 & 1 & 2 & 1.3 \\ \hline
     Zpracování průběhu Quine--McCluske & - & 2 & 3 & - & - & - & 2.5 \\ \hline
     Celkový dojem                      & 1 & 2 & 2 & 1 & 2 & 1 & 1.5 \\ 
  \end{tabular}
  \caption{Hodnocení jednotlivých částí aplikace}
  \label{tab:test-rating}
\end{table}

Uživatelé na~závěr ještě popsali své dojmy a navrhly některá vylepšení. Všem se aplikaci líbila a každý vyzdvihl
především zpracování Karnaughovy mapy. Uživatelé U2, U3, U4 a U5 napsali, že by vylepšili zpracování
pravdivostní tabulky. Některá navrhovaná vylepšení uvádí následující seznam:

\begin{itemize}
\item Zvýrazňovat mintermy v postranním seznamu při~změně jejich hodnot v~K-mapě a~Booleovské n-krychli.
\item Pravdivostní tabulka by měla jasně oddělit a zvýraznit, která pole jsou editovatelná a která informační. Sloupeček
  indexu by měl být lépe oddělený od sloupců nul a~jedniček.
\item Espresso i Quine Mccluskey algoritmy by měly mít asociovanou nápovědu (třeba okno s popisem), která by byla
  jednoduše vyvolatelná.
\item Přidat do krokování Espressa tlačítko zpět.
\item Zkusit zakomponovat nějaký background image.
\item Zpřehlednit přidáním ikonek.
\item Rotaci u krychle pomocí myši.
\item Při minimalizaci počítat s~hazardy.
\end{itemize}
 

\subsubsection{Shrnutí}
\label{sec:test-summary}

Vzhledem k~získaným výsledkům se zdá, že aplikaci lze poměrně bez~problému ovládat bez~použití manuálu. Jedinou výjimku
tvoří Booleovská 3D n-krychle, kde ne každý dokázal odhalit klávesové zkratky.

Použitelnost pravděpodobnostní tabulky není příliš optimální. Většině uživatelů nebyl jasný způsob ovládání, který
pro~ně nebyl na~první pohled zřejmý. 

Karnaughova mapa byla ovládána zcela optimálně. Všichni na~ní dokázali provést úkoly poměrně rychle a bez~problému.

Booleovská n-krychle byla poměrně optimálně používána. Někteří uživatelé však nebyli schopni zvládnout všechny pohyby
bez~nápovědy.

Co se týče průběhu algoritmu Quine--McCluskey, tak ten byl pro všechny uživatele naprosto nepochopitelný. Espresso
dopadlo lépe. Většina uživatelů ho při jeho krokování alespoň trochu pochopila.

\subsection{Zjištěné problémy a návrh jejich řešení}
\label{sec:test-problems}

Hlavním problémem je zpracovaní pravdivostní tabulky. Měla by být zpřehledněna a jasně určit, které hodnoty lze
měnit. To bohužel není příliš jednoduchý úkol. Je třeba třeba podědit Qt třídu pro zobrazení tabulky a předefinovat její
vykreslování. Další možností je tabulku vykreslovat pomocí jiných tříd, což by mohlo být jednodušší, ale ne tak
efektivní.

Dalším problémem je ovládání Booleovské n-krychle. Nejlepším řešením by mohla být rychlá nápověda při prvním zobrazení
krychle. Následně by byla vyvolatelná z~ovládacího panelu.

Nápověda by byla vhodná i u~zpracování obou algoritmů, které byly pro~některé uživatele málo pochopitelné.









