220 lines
11 KiB
TeX
220 lines
11 KiB
TeX
|
\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}
|
||
|
|