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
|
\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}
|