1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
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}
|