\subsection{Eksterne tests}

Disse tests undersøger om dele af implementationen overholder de eksternt definerede krav.

\begin{itemize}
\item Vedligeholdelse af spillerinformation
\item Netværkskommunikation
\item Kollisionshåndtering
\item Ødelæggelse af spillerens skib
\end{itemize}

\subsubsection{Vedligeholdelse af spillerinformation}

Denne afprøvning undersøger om spillogikken er i stand til at vedligeholde information omkring spillere. Dette betyder i praksis, at der undersøges om der kan indsættes en spiller i spillet og denne senere findes ud fra samme id. Til sidst undersøges også om spilleren kan fjernes fra spillet.

Afprøvningen lykkedes.

\begin{center}
\begin{minipage}[t]{0.8\textwidth}
\begin{flushleft}
\begin{lstlisting}[caption=Pseudo-kode for vedligeholdelse af spillerinformation, label=lst:playeradd]
opret spiller med givet id

tilføj spiller til spillet

find spilleren i spillet med det givne id

forudsæt at det er den samme spiller som blev indsat

fjern spiller med det givne id fra spillet

forudsæt at spilleren ikke længre er med i spillet
\end{lstlisting}
\end{flushleft}
\end{minipage}
\end{center}

\subsubsection{Netværkskommunikation}

Denne afprøvning afprøver om det er muligt at oprette en forbindelse mellem en klient og en server. Derefter sendes en besked. Hvis beskeden bliver modtaget korrekt, bliver der sat et flag som testen aflæser.

Det forventede resultat er, at klienten er i stand til at forbinde til serveren, og at flaget vil blive sat når serveren modtager beskeden.

Afprøvningen lykkedes ikke. Det lykkedes at forbinde klienten til serveren, men beskeden blev ikke modtaget. Dette skyldes, at MessageMaker og TestMessageMaker ikke er færdigimplemeteret.

\begin{center}
\begin{minipage}[t]{0.8\textwidth}
\begin{flushleft}
\begin{lstlisting}[caption=Pseudo-kode for test af kollision, label=lst:messagetest]
opret server på en given port

opret klient

forbind klienten til serveren på den givne port

forudsæt at der er oprettet en forbindelse

opret en testmessage

send beskeden fra klienten til serveren

lad serveren modtage de beskeder der måtte være

forudsæt at testflaget er sat til sand
\end{lstlisting}
\end{flushleft}
\end{minipage}
\end{center}

\subsubsection{Kollisionshåndtering}

Denne afprøvning undersøger om kollisionsalgoritmen er i stand til at konstatere om to polygoner overlapper. Afprøvningen er implementeret i CollisionTest \texttt{klassen}.

Der undersøges om to polygoner overlapper når de ligger oven i hinanden. Derefter undersøges om de overlapper hvis de har to punkter der overlapper, men ellers ikke overlapper med hinanden. Til sidst roteres det ene polygon således at de ikke burde overlappe. Det forventede resultat er, at polygonerne konstateres at overlappe når de ligger oven i hinanden samt når de deler et punkt. Når det ene polygon roteres således at de ikke længre deler et punkt, forventes det at de ikke overlapper.

Afprøvningen viste at algoritmen var i stand til at konstatere når to polygoner overlapper.

\begin{center}
\begin{minipage}[t]{0.8\textwidth}
\begin{flushleft}
\begin{lstlisting}[caption=Pseudo-kode for test af kollision, label=lst:collision]
opret to polygoner

placer polygonerne oven i hinanden

forudsæt at polygonerne overlapper

flyt den ene polygon således at et af punkterne ligger oven i et punkt på den anden polygon, men resten ikke overlapper

forudsæt at polygonerne overlapper

roter det ene polygon således at polygonerne ligger spejlvendt i forhold til hinanden

forudsæt at polygonerne ikke overlapper
\end{lstlisting}
\end{flushleft}
\end{minipage}
\end{center}

\ subsubsection{Ødelæggelse af spillerens skib}

Denne afprøvning undersøger om spillerens skib bliver genskabt tre sekunder efter at det ødelægges. Afprøvningen er implementeret i \texttt{ShipDeathTest} klassen, som er illustreret i liste \ref{lst:shipdeath}.

En spiller tilføjes til spillet, hvorefter spillerens skib ødelægges. Det forventede resultat er, at spilleren har fået et nyt skib tre sekunder efter det gamle blev ødelagt. 

Afprøvningen var en success.

\begin{center}
\begin{minipage}[t]{0.8\textwidth}
\begin{flushleft}
\begin{lstlisting}[caption=Pseudo-kode for ødelæggelse af spillerens skib, label=lst:shipdeath]
opret spiller med given id

tilføj spiller til spillet

lad spillogikken give spilleren et skib

forudsæt at spilleren har et skib

tilføj spillerens skib nok skade til at det ødelægges

lad spillogikken fjerne spillerens skib

forudsæt at spilleren ikke har noget skib

lad tiden skride mindre end tre sekunder frem

forudsæt at spilleren stadig ikke har noget skib

lad tiden skride frem til over tre sekunder efter skibets ødelæggelse

lad spillogikken give spilleren et skib

forudsæt af spilleren har et skib
\end{lstlisting}
\end{flushleft}
\end{minipage}
\end{center} 