@ -73,14 +73,45 @@ Hierfür wird das Versionsverwaltungssystem Git eingesetzt. Die einzelnen Anwend
Außerdem wird in dem gemeinsamen Arbeitszweig die Versuchsvorrichtung für die Effizienz-Messung bereits vorbereitet, damit für alle Zustandsverwaltungssysteme das gleiche Messverfahren zum Einsatz kommen kann.
Der gesamte Quelltext wird in einem Git-Repository \autocite{repo} öffentlich zur Verfügung gestellt.
\newpage
\section{Ergebnis der Beispielanwendung}
Die Beispielanwendung wurde im Material-Design mit Flutter in der Version 2.10.1 erstellt. Das Design weicht dabei nur leicht von dem in den Wireframes konzipierten Design ab, wie in \autoref{fig:realisation} zu sehen ist.
Die Funktionen sind abgesehen von der Navigation noch nicht implementiert, da dies, wie beschrieben, durch die Implementierung mit den Zustandsverwaltungssystemen erfolgt.
\caption{Umsetzung der Wireframes in Flutter unter iOS}%
\label{fig:realisation}%
\end{figure}
\subsection{Versuchsaufbau}
Neben den sichtbaren Elementen der Anwendung wurde auch eine Infrastruktur zur Durchführung der Messung für die \nameref{sec:efficiency} und \nameref{sec:complexity} geschaffen.
Die Messung der \nameref{sec:complexity} erfolgt über die Metrik des \acl{mi}. Dieser Wert wird mit dem Tool \texttt{dart\_code\_metrics} ermittelt. Um die Berechnung unabhängig von der Laufzeitumgebung zu machen, wird die Berechnung in einem Docker-Container mit einem \ac{ci} durchgeführt. Die einzelnen Durchführungsschritte sind dabei in der \ac{ci}-Konfigurationsdatei \autocite[.drone.yml]{repo} im Unterschritt \texttt{generate\_metrics} dokumentiert. Die vollständigen Testergebnisse sind dieser Ausarbeitung im Anhang beigefügt.
Für die Messung der \nameref{sec:efficiency} wird an zwei Messpunkten gemessen, wie oft ein Widget neu gebaut werden muss. Dazu wird ein Zähler erhöht, wenn die Build-Methode des entsprechenden Widgets aufgerufen worden ist. Zur Messung wird ein automatisierter Test \autocite[test/efficiency\_bechmark\_test.dart]{repo} durchgeführt, welcher mehrere Produkte zum Warenkorb hinzufügt und wieder entfernt, und die An- und Abmeldung des Benutzenden auslöst. Im letzten Schritt wird zur Warenkorbansicht navigiert.
Die beiden Messpunkte wurden dabei an folgenden Stellen angebracht. Der erste Messpunkt \texttt{cartButton} wird ausgelöst beim Rendern des Warenkorb-Buttons und der zweite Messpunkt \texttt{userSwitch} wird ausgelöst beim Rendern des Schalters zum An- und Abmelden. Diese beiden Widgets wurden gewählt, da sie von Zustandsänderungen betroffen sind, allerdings nicht von allen Zustandsänderungen der Anwendung und außerhalb einer Listenansicht sind.
Beim Ausführen des Tests für die beschriebene Basisanwendung ohne Zustandsverwaltung wurde folgendes Ergebnis ermittelt:
Anzahl der Render-Vorgänge:
\begin{itemize}
\item\texttt{cartButton}: 1
\item\texttt{userSwitch}: 2
\end{itemize}
Diese Ergebnisse stellen die Minimalwerte für den Test dar.