\section{\Glspl{Lasttest}}

\subsection{Einleitung}

\Glspl{Lasttest} sind sinnvoll, um das Verhalten eines Programmes unter großer Last
zu testen um somit dessen Belastungsgrenze zu erreichen.
Dadurch wird das Programm auf Stabilität getestet und man erhält
einen Eindruck davon, wie performant das Programm ist.
Auch kann durch die erhaltenen Ergebnisse abgeschätzt werden, 
welche Hardware für den erwarteten Einsatzzweck benötigt wird.

\subsection{Verwendete Software}

Da der \Gls{podcast}synchronisationsserver ein Webserver ist und über HTTP
kommuniziert, wird das Tool \enquote{Apache JMeter} verwendet, um
die \Glspl{Lasttest} durchzuführen.
Mit diesem Tool kann mithilfe eines sogenannten Testplans 
systematisch HTTP Anfragen an den Server gestellt werden.
Während dieser Testplan läuft, sammelt das Tool verschiedene Daten über die Performanz des Services,
wie zum Beispiel die Anzahl der Anfragen, die pro Sekunde bearbeitet werden. 
Im Anschluss werden die Testergebnisse grafisch zur Verfügung gestellt.

\subsection{Tests}
Um zu testen, ob der Synchronisationsserver unter voller Belastung
fehlerfrei arbeitet, wurden alle Schnittstellen, die die \Gls{podcatcher} zur
Synchronisation nutzen, jeweils zum Testplan als eigene Threadgruppe
hinzugefügt.
Damit ist es möglich, alle relevanten Schnittstellen
über einen längeren Zeitraum kontinuierlich zu belasten.
So wird ausgeschlossen, dass es innerhalb des Programms zu gegenseitigen
Interferenzen kommt, wenn alle Bereiche zur selben Zeit ausgelastet werden.
Ein weiterer Vorteil des gleichzeitigen Belastens ist, dass
Engpässe, welche das Programm ausbremsen, leichter identifiziert werden können.

Um einen Performanzvergleich zwischen unterschiedlicher Hardware zu erhalten,
wurden die Tests in gleicher Konfiguration einmal auf einem System,
welches den im Pflichtenheft definierten Mindestanforderungen 
(2 Kerne und 2GB RAM) entspricht und
einem besseren System (8 Kerne und 32GB RAM) getestet.

\newpage

\subsection{Testergebnisse}
\subsubsection{Genaue Testwerte}
\textit{2-Kern System:}
\begin{figure}[h]
    \centering
    \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{assets/lasttest/minimumSpecsTable.png}
\end{figure}

\textit{8-Kern System:}
\begin{figure}[h]
    \centering
    \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{assets/lasttest/goodSpecsTable.png}
\end{figure}

\subsection{Anfragen pro Sekunde}

Aus den Testdaten ist ersichtlich, dass die im Pflichtenheft für den Synchronisationsserver
als Musskriterium aufgeführte Eigenschaft, 50 Anfragen pro Sekunde bewältigen zu können,
nicht für jede Hardwarekonfiguration möglich ist. 
Denn im Gegensatz zur 8-Kern CPU, welche durchschnittlich 88,93 Transaktionen pro Sekunde 
verarbeitet, sind mit den Mindestanforderungen durchschnittlich nur 10,85 Anfragen 
pro Sekunde möglich.

\newpage
\subsubsection{Application Performance Index}

\textit{2-Kern System:}
\begin{figure}[h]
    \centering
    \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{assets/lasttest/minimumSpecsApdex.png}
\end{figure}

\textit{8-Kern System:}
\begin{figure}[h]
    \centering
    \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{assets/lasttest/goodSpecsApdex.png}
\end{figure}

\newpage

Der Application Performance Index (kurz: \Gls{Apdex}) gibt an, wie benutzerfreundlich
eine Webseite bezüglich ihrer Antwortzeiten bei Anfragen ist.
Dabei stellt \enquote{1} die beste Nutzerfreundlichkeit dar und \enquote{0} die schlechteste.

Verglichen mit den genauen Testwerten, ist ersichtlich, dass ein System mit den Mindestanforderungen zwar eine akzeptable Leistung erbringt, allerdings die vom \Gls{Apdex} definierte Frustrationsgrenze überschreiten kann:

\textit{2-Kern System:}
\begin{figure}[h]
    \centering
    \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{assets/lasttest/minimumSpecsResponse.png}
\end{figure}

\textit{8-Kern System:}
\begin{figure}[h]
    \centering
    \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{assets/lasttest/goodSpecsResponse.png}
\end{figure}

Bei Ausführung des Synchronisationsservers auf einem 2-Kern System kann somit
keine zufriedenstellende Nutzererfahrung garantiert werden, sobald der Server einer starken
Last ausgesetzt ist.

Um eine zufriedenstellende Erfahrung zu garantieren, ist bessere Hardware eine hinreichende Bedingung.