From 7fcdc1c788725f866de71fc9dfd8c4d1cb132b57 Mon Sep 17 00:00:00 2001
From: Orangerot <purple@orangerot.dev>
Date: Fri, 24 May 2024 17:42:08 +0200
Subject: Initial commit

---
 .../sections/anforderungsanalyse.tex               | 185 +++++++++++++++++++++
 1 file changed, 185 insertions(+)
 create mode 100644 20-implementierungsheft/sections/anforderungsanalyse.tex

(limited to '20-implementierungsheft/sections/anforderungsanalyse.tex')

diff --git a/20-implementierungsheft/sections/anforderungsanalyse.tex b/20-implementierungsheft/sections/anforderungsanalyse.tex
new file mode 100644
index 0000000..9af8d4d
--- /dev/null
+++ b/20-implementierungsheft/sections/anforderungsanalyse.tex
@@ -0,0 +1,185 @@
+\newcommand{\newrequirementlist}[1]{
+    % https://www.overleaf.com/learn/latex/Lists#Creating_a_new_list_with_enumitem
+    \newlist{#1list}{enumerate}{1}
+    \setlist[#1list, 1]
+    {
+        before=\leavevmode,
+        label=\upshape\textlangle #1\arabic*\textrangle,
+        ref=\upshape\textlangle #1\arabic*\textrangle,
+        resume=#1list
+    }
+}
+
+\newrequirementlist{RM}
+\newrequirementlist{RS}
+\newrequirementlist{RC}
+\newrequirementlist{RW}
+
+\section{Anforderungsanalyse}
+
+\subsection{ Musskriterien }\label{r:musskriterien}
+
+Musskriterien: unabdingbare Leistungen der Software.
+
+\subsubsection*{ Funktionale Anforderungen }
+
+\begin{RMlist}
+    \item\label{r:login} Der Benutzer kann sich im Webfrontend mit einer
+    E-Mail-Adresse und einem Pass\-wort erstmalig registrieren und bei
+    abgeschlossener Registrierung fortan mit denselben Informationen
+    anmelden.
+    Für eine erfolgreiche Registrierung muss die angegebene
+    E-Mail-Adresse zuerst verifiziert werden.\\
+    \item\label{r:store} Die Liste der \Glspl{abo} eines Benutzers sowie
+    der zeitliche Fortschritt beim Anhören(/Ansehen) von jeder begonnen
+    \Gls{episode} werden für jeden Benutzer gespeichert.
+    \item\label{r:sync} Die Liste der \Glspl{abo} eines Benutzers
+    sowie der zeitliche Fortschritt beim Anhören(/Ansehen) von jeder
+    begonnenen \Gls{episode} wird automatisch über alle von einem Benutzer
+    verknüpften \Gls{podcatcher} aktualisiert.
+    Dabei sind der zu synchronisierende Stand der \Glspl{abo} und der
+    zeitliche Fortschritt jeweils definiert als derjenige Stand, der
+    zeitlich am kürzesten zurückliegt.\\
+    \item\label{r:ui} Das Webfrontend bietet dem Benutzer eine graphische
+    Benutzeroberfläche zur Navigation und zur Ansteuerung einzelner
+    Funktionalitäten.\\
+    \item\label{r:reset-pw} Der Benutzer kann sein Passwort ändern und es
+    gibt eine ,,Passwort vergessen''-Funktion.
+    So kann ein angemeldeter Benutzer sein Passwort direkt im Webfrontend
+    ändern.
+    Im nicht angemeldeten Zustand kann der Benutzer sein Passwort über
+    die registrierte E-Mail-Adresse zurücksetzen.\\
+    \item\label{r:show-podcasts} Das Webfrontend bietet dem Benutzer die
+    Möglichkeit, sich die Liste seiner \Glspl{abo} anzeigen zu
+    lassen.
+    Die dabei dargestellten Informationen beinhalten den Namen des
+    \Glspl{abo} und eine gerundete Angabe darüber, wie lange es her ist,
+    dass der Benutzer das letzte Mal eine \Gls{episode} dieses \Glspl{abo}
+    konsumiert hat.\\
+\end{RMlist}
+
+\subsubsection*{ Nicht-funktionale Anforderungen }
+
+\begin{RMlist}
+    \item\label{r:requests} Der Synchronisations-Server kann mindestens
+    50 Anfragen pro Sekunde verarbeiten.\\
+    \item\label{r:desktop-first} Das Webfrontend ist primär für
+    Desktop-Benutzer ausgelegt.
+    \item\label{r:gpodder} Der Datenaustausch erfolgt über die Gpodder
+    \Gls{rest-api} unter Verwendung des Datenformats \Gls{json}.
+    \item\label{r:persistent-storage} Die Speicherung der Daten eines
+    Benutzers \ref{r:store} über den Synchronisations-Server erfolgt
+    persistent in einer \Gls{db}. Diese Daten des Benutzers sind die
+    Liste seiner \Glspl{abo} und der zeitliche Fortschritt beim Anhören
+    (/Ansehen) aller begonnenen \Glspl{episode}.
+    \item\label{r:api-extension} Die \Gls{gpodder} wird um Funktionalitäten
+    zur verbesserten Kommunikation zwischen Front- und Backend erweitert
+    (siehe \ref{r:login}).\\
+\end{RMlist}
+
+
+\subsection{ Sollkriterien }\label{r:sollkriterien}
+
+Sollkriterien: erstrebenswerte Leistungen.
+
+\subsubsection*{ Funktionale Anforderungen }
+
+\begin{RSlist}
+    \item\label{r:man} Das Webfrontend bietet die Möglichkeit eine nicht
+    ausgefüllte Benutzeranleitung für das Synchronisieren von \Glspl{podcast}
+    anzuzeigen.\\
+    \item\label{r:delete-acc} Der Benutzer kann seinen Account löschen.
+    Daraufhin werden alle auf diesen Benutzer bezogenen Daten gelöscht.\\
+\end{RSlist}
+
+\subsubsection*{ Nicht-funktionale Anforderungen }
+
+\begin{RSlist}
+    \item\label{r:backend-libs} Das Backend wird in \Gls{java} unter Verwendung des
+    quelloffenen Frameworks \Gls{spring} implementiert. Weiter wird für die
+    \Gls{db} das relationale Open-Source Datenbankverwaltungssystem MariaDB
+    eingesetzt.
+    \item\label{r:ui-libs} Die Weboberfläche wird mithilfe der
+    \Gls{ui-lib} React oder des Webframeworks Vue in JavaScript und
+    mit dem Frontend-CSS-Framework Bootstrap entwickelt.
+    \item\label{r:ui-source}
+    Verwendete \Glspl{ui-lib} werden von einem \Gls{packagemanager}, wie dem Node
+    Package Manager (npm) bezogen. Ein \Gls{bundler}, wie vite oder Webpack,
+    stellt ein minimiertes Skript von den Teilen der Bibliotheken zusammen,
+    die vom Code verwendet werden. Das minimierte Skript wird dann auf einem
+    eigenen Server für die Weboberfläche bereitgestellt.
+    \item\label{r:spa} Die Weboberfläche wird als \Gls{spa}
+    entworfen und aktualisiert dynamisch ihren Inhalt, sobald es eine
+    Antwort auf eine Anfrage an die \Gls{gpodder} \ref{r:api-compat} erhält.
+    \item\label{r:parse-metadata} Das Backend kann die Metadaten von
+    \Gls{podcast} aus
+    deren \Gls{rss}-Feeds (XML-Dateien) für die Anzeige im Webfrontend
+    \ref{r:show-podcasts} parsen.
+    \item\label{r:pw-requirements} Verwendete Passwörter müssen mindestens 8 Zeichen,
+    ein Sonderzeichen, eine Zahl sowie einen Klein- und einen Großbuchstaben
+    enthalten.
+    Diese Anforderungen gelten also insbesondere für über die Funktionen
+    \ref{r:login} und \ref{r:reset-pw} neu gewählte Passwörter.\\
+    \item\label{r:save-pw} Passwörter werden sicher mittels \Gls{salt-hash}
+    gespeichert.
+    \item\label{r:session} Im Webfrontend angemeldete Benutzer bleiben dort
+    angemeldet. Hierfür wird eine Kombination aus einem \Gls{session-token} und
+    einem \Gls{cookie} verwendet.\\
+\end{RSlist}
+
+\subsection{ Kannkriterien }
+
+Kannkriterien: Leistungen, die enthalten sein können.
+
+\subsubsection*{ Funktionale Anforderungen }
+
+\begin{RClist}
+    \item\label{r:subscribe} Ein Benutzer kann über die Weboberfläche einen
+    abonnierten \Gls{podcast} über einen generierten Link teilen.
+    Öffnet nun ein anderer Nutzer den Link wird dieser zur Weboberfläche
+    weitergeleitet und mit einem Pop-up gefragt, ob dieser den
+    \Gls{podcast} abonnieren
+    möchte, falls noch nicht geschehen.
+    Akzeptiert der Nutzer, so wird der \Gls{podcast} zur Liste der
+    \Glspl{abo} des
+    Nutzers hinzugefügt.
+    Gegebenenfalls muss sich der Benutzer dafür zuerst anmelden.
+    Der Link setzt sich dabei unter anderem aus der URL des Webfrontends oder
+    einem \Gls{pseudoprotocol} und dem \Gls{podcast}-Link des Providers zusammen.
+    \item\label{r:unsubscribe} Das Webfrontend bietet dem Benutzer die Möglichkeit,
+    \Glspl{abo} zu entfernen beziehungsweise \Glspl{podcast} zu deabonnieren.
+    \item\label{r:import} Das Importieren und Exportieren aller benutzerbezogenen
+    Daten wird unterstützt (siehe \ref{r:dsgvo}).
+    \item\label{r:import-other} Das Umsiedeln von anderen \Gls{gpodder}-Plattformen und
+    damit insbesondere der damit verbundene Datenimport wird unterstützt.
+    \item\label{r:api-compat} Die Weboberfläche ist kompatibel mit beliebigen
+    \Glspl{gpodder}.
+    \item\label{r:responsive} Die Weboberfläche ist \gls{responsive}.
+    \item\label{r:admin} Es gibt Administrator Benutzerkonten. Eine angestrebte
+    Funktionalität dieser privilegierten Konten ist das Einsehen von Statistiken,
+    wie der Anzahl von Benutzern, und dem Abruf der Metadaten eines
+    \Glspl{abo}.
+\end{RClist}
+
+\subsubsection*{ Nicht-funktionale Anforderungen }
+
+\begin{RClist}
+    \item\label{r:login-provider} Die Anmeldung im Webfrontend kann mit dem
+    offenen Protokoll \Gls{oauth} 2.0 über Google, Apple oder Facebook erfolgen.
+    Die bei der Verknüpfung eines \Gls{podcatcher}s mit dem Synchronisationsserver
+    geforderten Anmeldedaten werden dann automatisch für den betreffenden
+    Benutzer generiert.
+    Diese kann er im Webfrontend einsehen.
+    \item\label{r:live-update} Im Webfrontend angemeldete Benutzer bleiben dort
+    angemeldet, wenn das Backend ein Update bekommt.
+    \item\label{r:language} Die Benutzeroberfläche kann in mehreren Sprachen
+    angezeigt werden, wobei neben der standardmäßig deutschen
+    Benutzeroberfläche die zusätzliche Bereitstellung einer englischen
+    Version gegenüber anderen Fremdsprachen priorisiert angestrebt wird.
+    \item\label{r:dsgvo} Der Umgang mit personenbezogenen Daten ist konform mit
+    der \\\Gls{dsgvo} der Europäischen Union.
+    \item\label{r:docker} Die Benutzung von \Gls{docker} vereinfacht das Deployment auf
+    einen Server, da Abhängigkeiten bereits im \Gls{docker}-Image enthalten sind.
+    Außerdem bleibt bei einer Kompromittierung der Software das Host-System
+    durch Virtualisierung der Container sicher.\\
+\end{RClist}
-- 
cgit v1.2.3

