summaryrefslogtreecommitdiff
path: root/00-pflichtenheft/sections/anforderungsanalyse.tex
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2024-05-24 17:42:08 +0200
committerOrangerot <purple@orangerot.dev>2024-05-24 17:47:22 +0200
commit7fcdc1c788725f866de71fc9dfd8c4d1cb132b57 (patch)
tree89931c85ae3f149884ba02c69862558e93f01531 /00-pflichtenheft/sections/anforderungsanalyse.tex
Initial commitHEADmain
Diffstat (limited to '00-pflichtenheft/sections/anforderungsanalyse.tex')
-rw-r--r--00-pflichtenheft/sections/anforderungsanalyse.tex219
1 files changed, 219 insertions, 0 deletions
diff --git a/00-pflichtenheft/sections/anforderungsanalyse.tex b/00-pflichtenheft/sections/anforderungsanalyse.tex
new file mode 100644
index 0000000..51be6c3
--- /dev/null
+++ b/00-pflichtenheft/sections/anforderungsanalyse.tex
@@ -0,0 +1,219 @@
+\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 }
+
+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.\\
+ \emph{Tests: \ref{t:register}, \ref{t:login}}
+ \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}n 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.\\
+ \emph{Tests: \ref{t:sync-sub}, \ref{t:sync-unsub}, \ref{t:sync-episode}}
+ \item\label{r:ui} Das Webfrontend bietet dem Benutzer eine graphische
+ Benutzeroberfläche zur Navigation und zur Ansteuerung einzelner
+ Funktionalitäten.\\
+ \emph{Implizit durch alle Testfälle geprüft.}
+ \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.\\
+ \emph{Tests: \ref{t:change-pw}, \ref{t:forgot-pw}}
+ \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.\\
+ \emph{Tests: \ref{t:sync-sub}, \ref{t:sync-unsub}}
+\end{RMlist}
+
+\subsubsection*{ Nicht-funktionale Anforderungen }
+
+\begin{RMlist}
+ \item\label{r:requests} Der Synchronisations-Server kann mindestens
+ 50 Anfragen pro Sekunde verarbeiten.\\
+ \emph{Test: \ref{t:lasttest}}
+ \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 }
+
+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 (Abbildung \ref{fig:help-desktop}).\\
+ \emph{Test: \ref{t:man}}
+ \item\label{r:delete-acc} Der Benutzer kann seinen Account löschen.
+ Daraufhin werden alle auf diesen Benutzer bezogenen Daten gelöscht.\\
+ \emph{Test: \ref{t:delete-acc}}
+\end{RSlist}
+
+\subsubsection*{ Nicht-funktionale Anforderungen }
+
+\begin{RSlist}
+\item\label{r:backend-libs} Das Backend wird in \Gls{java} unter Verwendung des
+ quelloffenen Frameworks 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.\\
+ \emph{Test: \ref{t:pw-req}}
+ \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 ein \Gls{session-token} in einem \Gls{cookie} gespeichert.\\
+\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 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}
+
+\subsection{ Abgrenzungskriterien }
+
+Abgrenzungskriterien: Leistungen, die explizit nicht umgesetzt werden.
+
+\begin{RWlist}
+ \item\label{r:playback} Das Webfrontend stellt explizit keine Funktionalität
+ zum Anhören von \Glspl{podcast} bereit und grenzt sich unter anderem dadurch
+ von \Gls{podcatcher}-Software ab.
+ \item\label{r:no-logs} Es werden explizit keine Logdateien für Benutzer-Aktionen
+ gespeichert. Stattdessen wird nur genau die Liste der \Glspl{abo} eines
+ Benutzers und der zeitliche Fortschritt jeder \Gls{episode} aktuell gehalten.
+ \item\label{r:no-devices} Die benutzerdefinierte Synchronisation über
+ verschiedene, für die Synchronisation differenzierte Geräte wird nicht
+ unterstützt.
+ Das heißt, die gespeicherten Daten eines Benutzers werden über alle
+ mit seinem Account verbundenen \Gls{podcatcher} unabhängig vom Gerät auf den
+ gleichen, letzten Stand synchronisiert.
+ \item\label{r:discovery} Das Webfrontend bietet keine Funktionalität zum
+ Suchen von \Glspl{podcast} (\Gls{discovery}) an.
+ \item\label{r:no-man} Im Webfrontend wird lediglich die Möglichkeit geboten,
+ eine zunächst leere Benutzeranleitung \ref{r:man} anzuzeigen. Eine
+ inhaltlich vollständig ausgeschriebene Benutzeranleitung wird
+ ausdrücklich nicht bereitgestellt.
+\end{RWlist}
+