You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
8.1 KiB
227 lines
8.1 KiB
\documentclass[aspectratio=169]{beamer}
|
|
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{microtype}
|
|
|
|
\usepackage[ngerman]{babel}
|
|
\usepackage{tabularx}
|
|
\usepackage{graphicx}
|
|
\usepackage{transparent}
|
|
\usepackage{csquotes}
|
|
\usepackage{tikz}
|
|
\usepackage[natbib=true, style=alphabetic,dateabbrev=false]{biblatex}
|
|
\addbibresource{../bibliography.bib}
|
|
\usetikzlibrary{positioning}
|
|
\usetikzlibrary{matrix}
|
|
\usetikzlibrary{arrows}
|
|
\usetikzlibrary{fit}
|
|
|
|
\usetheme{metropolis}
|
|
|
|
\title{Evaluation von Zustandsverwaltungssystemen für das mobile Cross-Plattform-Framework Flutter}
|
|
\subtitle{Kolloquium}
|
|
\date{22.~April~2022}
|
|
|
|
\author{Jonas Franz}
|
|
\institute{Hochschule Darmstadt -- Fachbereich Informatik\\Kooperativer Studiengang Informatik\\Referent: Prof. Dr. Kai Renz\\Koreferent: Prof. Dr. Hans-Peter Wiedling}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
\begin{frame}{Gliederung}
|
|
\setbeamertemplate{section in toc}[sections numbered]
|
|
%\tableofcontents[hideallsubsections]
|
|
\begin{itemize}
|
|
\item Einführung
|
|
\item Grundlagen
|
|
\item Bewertungskriterien
|
|
\item Versuchsaufbau
|
|
\item Ergebnisse
|
|
\item Fazit
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\section{Einführung}
|
|
\begin{frame}{Ziel der Arbeit}
|
|
\begin{itemize}
|
|
\item Fragestellung: Wie lässt sich der Zustand einer Flutter-Anwendung am besten verwalten?
|
|
\item Evaluation von verschiedenen Lösungsansätzen für die Zustandsverwaltung in Flutter
|
|
\item Welcher Lösungsansatz ist am beste für verschiedene Anwendungsfälle geeignet?
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Motivation}
|
|
\begin{itemize}
|
|
\item Die Zustandsverwaltung ist ein entscheidender Aspekt einer Flutter-Anwendung
|
|
\item Entscheidet mit über dem Erfolg eines Projektes
|
|
\item Kein etablierter Standard vorhanden
|
|
\item Entscheidung schwer umkehrbar
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Vorgehen}
|
|
\begin{enumerate}
|
|
\item Recherche zu bestehenden Zustandsverwaltungssystemen
|
|
\item Konstruktion von Anforderungen
|
|
\item Ableitung von Bewertungskriterien
|
|
\item Erstellung eines Versuchsaufbaus
|
|
\item Durchführung und Bewertung
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
\section{Grundlagen}
|
|
\begin{frame}{Grundlagen}
|
|
\begin{itemize}
|
|
\item Was ist Flutter?
|
|
\item Wie funktioniert Flutter?
|
|
\item Was ist die Aufgabe der Zustandsverwaltung in Flutter?
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
|
|
\begin{frame}{Was ist Flutter?}
|
|
\begin{itemize}
|
|
\item Flutter ist ein Cross-Plattform-Framework zur Entwicklung von Anwendungen für diverse Plattformen wie iOS und Android \autocite{flutterSupportedPlatforms}
|
|
\item Ein Quelltext-Basis für alle Plattformen
|
|
\item Ziel: Reduzierung des Aufwands bei der Entwicklung
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Wie funktioniert Flutter?}
|
|
\begin{columns}[onlytextwidth,T]
|
|
\column{\dimexpr\linewidth-50mm-3mm}
|
|
\begin{itemize}
|
|
\item Flutter ist ein deklaratives UI-Toolkit
|
|
\item $\Rightarrow$ Es wird nur eine \textquote{Bauanleitung} für verschiedene Zustände definiert
|
|
\item Die Benutzeroberfläche wird anhand von sogenannten Widgets zusammengesetzt
|
|
\item $\Rightarrow$ Es entsteht eine Baumstruktur aus verschiedenen Widgets
|
|
\end{itemize}
|
|
\column{50mm}
|
|
\begin{figure}
|
|
\includegraphics[width=50mm]{../chapters/basics/flutter_tree.png}
|
|
\caption{Flutter Widget-Tree (eigene Darstellung)}
|
|
\end{figure}
|
|
\end{columns}
|
|
\end{frame}
|
|
|
|
|
|
\begin{frame}{Widgets in Flutter}
|
|
\begin{itemize}
|
|
\item \textcquote[Kap.1.9]{flutterInAction}{Everything is a widget}
|
|
\item \texttt{StatelessWidget}
|
|
\begin{itemize}
|
|
\item kein eigener Zustand
|
|
\item Zustand wird über Konstruktorparameter übergeben
|
|
\end{itemize}
|
|
\item \texttt{StatefulWidget}
|
|
\begin{itemize}
|
|
\item Verwaltet eigenen Zustand
|
|
\item kann eigenen Zustand selbstständig verändern
|
|
\end{itemize}
|
|
\item \texttt{InheritedWidget}
|
|
\begin{itemize}
|
|
\item andere Widgets können auf den Zustand zugreifen
|
|
\item zugreifende Widgets ändern sich, falls sich der Zustand
|
|
\item eigener Zustand kann nicht selbstständig verändert werden
|
|
\end{itemize}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Aufgabe der Zustandsverwaltung}
|
|
\foreignblockcquote{american}[Kap.8.1.2]{flutterInAction}{State management is a combination of passing data around the app, but also re-rendering pieces of your app at the right time.}
|
|
|
|
\foreignblockcquote{american}[Kap.1]{managingStateInFlutter}{State management is simply a technique, or multiple techniques, used to take care of the changes that occur in your application.}
|
|
\end{frame}
|
|
|
|
\begin{frame}{Aufgabe der Zustandsverwaltung}
|
|
\begin{itemize}
|
|
\item Verwaltung von Änderungen in der App
|
|
\item Neu Rendern von Widgets zur richtigen Zeit
|
|
\item Verteilung von Daten innerhalb der App
|
|
\item Aufteilung in verschieden Zustandsebenen \autocite{appState}
|
|
\item Anwendungsbeispiele: Anmeldezustand, Einstellungen, Einkaufskorb in einer Shopping-App
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
|
|
\section{Bewertungskriterien}
|
|
\begin{frame}{Anforderungen}
|
|
\begin{itemize}
|
|
\item Änderbarkeit / Skalierbarkeit
|
|
\item Testbarkeit
|
|
\item Effizienz
|
|
\item Komplexität / Wartbarkeit
|
|
\item Verständlichkeit
|
|
\item Dokumentierung
|
|
\item Strukturbestimmung
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
|
|
\begin{frame}{Änderbarkeit / Skalierbarkeit}
|
|
\begin{itemize}
|
|
\item Umgang mit wachsender Größe von Zuständen
|
|
\item Effektive Vernüpfung verschiedener Zustände
|
|
\item Metrik: qualitativ (nicht-/teilweise-/vollständig erfüllt)
|
|
\end{itemize}
|
|
\end{frame}
|
|
\begin{frame}{Testbarkeit}
|
|
\begin{itemize}
|
|
\item Testbarkeit der Geschäftslogik
|
|
\item Widget-Tests von Widgets, die auf Zustände zugreifen
|
|
\item Metrik: qualitativ (nicht-/teilweise-/vollständig erfüllt)
|
|
\end{itemize}
|
|
\end{frame}
|
|
\begin{frame}{Effizienz}
|
|
\begin{itemize}
|
|
\item Wie effizient orchestriert das System das Neubauen von Widgets?
|
|
\item Einbau von Prüfstellen
|
|
\item Zählen der Widget-Neubauten an den Prüfstellen
|
|
\item Metrik: Anzahl der Neubauten (kleiner ist besser)
|
|
\end{itemize}
|
|
\end{frame}
|
|
\begin{frame}{Komplexität / Wartbarkeit}
|
|
\begin{itemize}
|
|
\item Messung anhand von Quelltext-Metriken
|
|
\item Verwendung des Maintainability-Index
|
|
\item Kombiniert verschiedene Metriken \autocite[133]{mi}
|
|
\begin{itemize}
|
|
\item Halstead-Volumen
|
|
\item Zyklomatische Komplexität
|
|
\item Anzahl der Quelltextzeilen
|
|
\end{itemize}
|
|
\item Ergebnis wird auf eine Skala von 0 bis 100 abgebildet (größer ist besser)
|
|
\end{itemize}
|
|
\end{frame}
|
|
\begin{frame}{Verständlichkeit / Lesbarkeit}
|
|
\begin{itemize}
|
|
\item Werden neue Flutter-fremde Konzepte eingeführt?
|
|
\item Gibt es eine nachvollziehbare Struktur?
|
|
\item Wird der tiefen Verschachtelung von Widgets entgegengewirkt? (Nesting)
|
|
\item Metrik: qualitativ (nicht-/teilweise-/vollständig erfüllt)
|
|
\end{itemize}
|
|
\end{frame}
|
|
\begin{frame}{Dokumentierung}
|
|
\begin{itemize}
|
|
\item Gibt es eine Entwickler*innen-Dokumentation?
|
|
\item Werden die Grundkonzepte erläutert?
|
|
\item Gibt es umfangreiche Beispiele?
|
|
\item Metrik: qualitativ (nicht-/teilweise-/vollständig erfüllt)
|
|
\end{itemize}
|
|
\end{frame}
|
|
\begin{frame}{Strukturbestimmung}
|
|
\begin{itemize}
|
|
\item Macht das System Vorgaben an die Struktur / Architektur der Anwendung?
|
|
\item Werden diese technisch forciert?
|
|
\item Metrik: qualitativ (nicht-/teilweise-/vollständig erfüllt)
|
|
\end{itemize}
|
|
\end{frame}
|
|
\begin{frame}[noframenumbering,plain,allowframebreaks]{Quellen}
|
|
\AtNextBibliography{\tiny}
|
|
\printbibliography[heading=none]
|
|
\end{frame}
|
|
|
|
\end{document}
|
|
|
|
|