+Quality in use is dived into five subcategories. Below we will discuss the
+categories which are relevant to the SUT.
+\begin{itemize}
+ \item \textbf{Effectiveness}\\
+ This is the core aspect of the SUT, users (other programs) need to be able
+ to effectively use the SUT to send and receive data.
+ \item \textbf{Efficiency}\\
+ This issue has already been covered above under
+ ``performance efficiency''~\ref{sec:perf_eff}.
+ \item \textbf{Satisfaction}\\
+ It is important that programs using the SUT can \emph{trust} that the SUT
+ provides the promised services. This means that data is send and received
+ reliably and the SUT provides clear and unambiguous errors when this
+ service
+ can not be provided.
+ \item \textbf{Context Coverage}\\
+ The SUT needs to behave as expected in all specified contexts
+ (\emph{context completeness}).
+\end{itemize}
+This leaves \emph{freedom from risk}, which we consider not relevant as the SUT
+itself does not pose any risks, and correct implementation (which is covered in
+the other categories) gives clear guarantees to programs using the services of
+the SUT.
+
+\subsection{Levels and types of testing} \label{levels}
+The client will deliver a product for certification. This means our team will
+only conduct \emph{acceptance testing} and assume that the client who requested
+certification has conducted \emph{unit}, \emph{module} and \emph{integration testing}.
+We will only be conducting \emph{black-box testing} and the client is not required to handover any
+source-code.
+
+Initially we will conduct a few basic \emph{manual tests} based on
+experience acquired from previous certification requests (\emph{error guessing}). If
+the product fails these basic tests we immediately reject it and seize all further
+activities.
+
+If the product is not rejected after the basic \emph{manual tests} we will proceed with the
+second stage of testing. For these follow-up tests we will use \emph{equivalence partitioning}
+to reduce the number of test cases. Every test case will result in a test report.
+If any of the test cases fail the product is rejected. In order to deliver
+usable feedback to the client we will still produce a test report.
+
+\subsubsection{Manual tests}
+
+The basic tests mentioned in Section \ref{levels} are conducted using a
+checklist. If any of the checks fail we immediately reject the product.
+
+\begin{enumerate}
+ \item Is the product complete?
+ \item Does the product come with a manual or quick start guide?
+ \item Is it possible to get the product in a usable state?
+ \item Can we use the product to initiate a connection in a corruption
+ free
+ environment?
+\end{enumerate}
+
+These\emph{ manual tests} are performed in order to ensure that the client has delivered a usable product.
+
+\subsubsection{Test generation}
+
+For the second state of testing we first use \emph{equivalence partitioning} to reduce the
+overall number of test cases as mentioned in Section \ref{levels}. At the highest level we can define the following equivalent \emph{input classes} for the SUT.
+
+\begin{enumerate}
+ \item Valid requests:
+ \begin{enumerate}
+ \item Single request.
+ \item Multiple requests.
+ \end{enumerate}
+ \item Invalid requests:
+ \begin{enumerate}
+ \item Single request.
+ \item Multiple requests.
+ \end{enumerate}
+\end{enumerate}
+
+For these requests we can introduce more cases by applying \emph{equivalence partitioning}
+to the different packets that are sent during one request.
+
+\begin{enumerate}
+ \item Packets received in order.
+ \item Packets received out of order.
+\end{enumerate}
+
+For each individual packet we can specify the follow \emph{equivalent classes}.
+
+\begin{enumerate}
+ \item Valid packet.
+ \item Corrupted packet.
+ \item Missing packets.
+\end{enumerate}
+
+A \emph{decision table} is used in order to ensure all different equivalent classes are covered in our tests.
+Valid packets can only exist in one form, the valid form and there is
+no need to divide these into additional classes.
+For the invalid packets we will construct a test case where only one parameter is made invalid.
+For the invalid value of this parameter we use \emph{boundary value analysis} to reduce the total
+number of test cases.
+The SUT input parameters correspond to different fields in the network packets.
+The following fields and there boundary values are considered during the testing.
+
+\begin{enumerate}
+ \item Checksum: valid, invalid.
+ \item Header: valid, even or odd number of bits corrupted.
+ \item Payload: valid, even or odd number of bits corrupted.
+\end{enumerate}
+
+\subsubsection{Test environment and automatization}
+\label{section:testenv}
+%%%Java\footnote{\url{http://www.java.com}} TCP driven echo server that executed
+%%%on a virtualized Ubuntu system\footnote{\url{http://www.ubuntu.com}} running on
+%%%the error behaviour custom iptables output policies have to be set
+%%%Listing~\ref{listing:iptables}. This is needed because the kernel by default
+%%%closes all connections from unknown sources and the manually created TCP
+%%%packets used in testing the implementation are from a source unknown to the
+%%%kernel.
+%%%
+%%%\begin{lstlisting}[label={listing:iptables},caption={settings iptables}]
+%%%Chain OUTPUT (policy ACCEPT)
+%%%target prot opt source destination
+%%%ACCEPT tcp -- anywhere anywhere tcp flags:PSH/PSH
+%%%DROP tcp -- anywhere anywhere tcp flags:RST/RST
+%%%\end{lstlisting}
+%%%All the tools we are going to use together with the SUT gives us the following
+%%%collection of software.
+
+\begin{enumerate}
+ \item Windows, used as a host OS.
+ \item Ubuntu, used as the guest OS running the SUT.
+ \item VirtualBox, used to run the guest OS containing the SUT.
+ \item Wireshark, used on the guest in order to capture and analyze network
+ traffic.
+ \item Bit-Twist, used to prepare network packets.
+\end{enumerate}
+
+All test will be conducted in a virtual environment. We will use VirtualBox to
+run a Linux distribution with the product installed.
+The Linux distribution in question is Ubuntu.
+All the tests are performed from within the VirtualBox environment.
+When testing network transmissions we will only analyze the packets sent/received to/from the SUT. The host system is disconnected from the Internet or any other network in
+order to prevent unnecessary traffic.
+% Dit is niet nodig omdat het via loopback gaat
+% Zeker weten? de SUT ontvangt ook niet loopback packets toch?
+
+For each test case (except for the \emph{manual tests}) a file containing previously
+captured network traffic will be replayed using Wireshark. We will use Bit-Twist
+to update the prepared packets with the MAC address of the guest network
+adapter. The response packets coming from the SUT will be recorded and
+analyzed and validated according to the \textit{RFC793} specification.
+The valid packets are build manually from the \textit{RFC793} specification.
+Invalid packets are generated from this valid traffic using Bit-Twist.
+The boundary values for the different parameters (fields in packets) are determined by hand. Automated scripts are used in order to generate packets with some fields replaced with these
+\emph{boundary values}.
+
+% Dit is mooier om footnotes van te maken en te gebruiken als het voor het
+% eerst gerefereerd is
+% WAT HOE?
+\begin{enumerate}
+ \item VirtualBox, https://www.virtualbox.org/
+ \item Whireshark, https://www.wireshark.org/
+ \item Bit-Twist, http://bittwist.sourceforge.net/
+\end{enumerate}