pflichtenheft.tex 8.1 KB
Newer Older
1
\documentclass[parskip=full,11pt,twoside]{scrartcl}
Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
2
\usepackage[utf8]{inputenc}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
3
4
5
6

\title{ATURL: Actually Tiny URLs}
\author{Kaylee Frye, Derrial Book}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
7
8
9
% section numbers in margins:
\renewcommand\sectionlinesformat[4]{\makebox[0pt][r]{#3}#4}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
10
11
12
13
14
15
% header & footer
\usepackage{scrlayer-scrpage}
\lofoot{\today}
\refoot{\today}
\pagestyle{scrheadings}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
16
\usepackage[sfdefault,light]{roboto}
Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
17
18
\usepackage[T1]{fontenc}
\usepackage[german]{babel}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
19
20
\usepackage[yyyymmdd]{datetime} % must be after babel
\renewcommand{\dateseparator}{-} % ISO8601 date format
Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
21
\usepackage{hyperref}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
22
23
\usepackage[nameinlink]{cleveref}
\crefname{figure}{Abb}{Abb}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
24
\usepackage[section]{placeins}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
25
\usepackage{xcolor}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
26
\usepackage{graphicx}
Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
27
28
29
30
31
32
\hypersetup{
	pdftitle={Pflichtenheft},
	bookmarks=true,
}
\usepackage{csquotes}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
33
34
35
\usepackage{amsmath} % for $\text{}$
\newcommand\urlpart[2]{$\underbrace{\text{\texttt{#1}}}_{\text{#2}}$}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
36
\usepackage{pflichtenheft}
Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
37
38

\begin{document}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
39
\maketitle
Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
40

Andreas Zwinkau's avatar
Andreas Zwinkau committed
41
42
\section{Einleitung}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
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
Das Universum braucht einen besseren URL Shortener.

URL Shortening erzeugt kurze URLs,
die nur Weiterleitungen sind zu sehr viel längeren URLs.
Das ist nützlich, weil Kurz-URLs besser zu merken sind
und leichter mündlich weiterzugeben.
Ebenfalls nützlich sind sie,
wenn URLs im Text auftauchen (bspw. IRC).

Eine URL besteht aus mehreren Komponenten:

\begin{center}
\urlpart{http}{protocol}%
\texttt{://}%
\urlpart{web.io}{host}%
\texttt{/}%
\urlpart{index}{path}%
\texttt{?}%
\urlpart{argument=somevalue}{parameter}%
\texttt{\#}%
\urlpart{theAnchor}{fragment}
\end{center}

Für Kurz-URLs ist der path (engl.\ Pfad) relevant.
Das Protokoll ist HTTP oder HTTPS, abhängig vom Besucher.
Die Wahl des host-Namens ist nicht Teil der Softwareentwicklung,
sondern des Betreibers.
Parameter und Fragment werden nicht genutzt,
da es mindestens einen zusätzlichen Buchstaben braucht
und damit die URL verlängert.

Im weiteren Text nehmen wir an,
dass der Dienst unter dem Hostnamen \texttt{atu.rl} angeboten wird.
Andreas Zwinkau's avatar
Andreas Zwinkau committed
76

Andreas Zwinkau's avatar
Andreas Zwinkau committed
77
\pagebreak
Andreas Zwinkau's avatar
Revised    
Andreas Zwinkau committed
78
79
\section{Kriterien}

Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
80
81
\subsection{Muss}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
82
83
84
85
86
87
88
89
\criterium{Beschränkte Länge}{crt:length}

Der Pfad von Kurz-URLs ist exakt 3 ASCII Buchstaben oder Ziffern lang.
Das beschränkt die Anzahl der möglichen URLs auf knapp 200.000 Kurz-URLs.

\criterium{Schnelle Weiterleitung}{crt:fast}

Insbesondere das Weiterleitung von Kurz- zu Lang-URL muss sehr schnell funktionieren.
Andreas Zwinkau's avatar
Andreas Zwinkau committed
90

Andreas Zwinkau's avatar
Andreas Zwinkau committed
91
92
93
94
95
96
97
98
99
\criterium{Authentifizieren mit E-Mail}{crt:login}

Für das Erstellen von Kurz-URLs muss ein Benutzer sich authentifizieren.
Zu jeder Kurz-URL speichert der Dienst die E-Mailaddresse des Erstellenden.

\criterium{Facebook-Login}{crt:facebook}

Einloggen via Facebook ist möglich.

Andreas Zwinkau's avatar
Andreas Zwinkau committed
100
\criterium{Rechtlichte Vorgaben werden eingehalten}{crt:tmg}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
101
102
103

Der Dienst befolgt alle in Deutschland geltenden Richtlinien,
insbesondere das Telemediengesetz.
Andreas Zwinkau's avatar
Andreas Zwinkau committed
104

Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
105
106
\subsection{Kann}

107
\criteriumOptional{Github-Login}{crt:github}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
108
109
110

Einloggen via Github ist möglich.

111
\criteriumOptional{Seite mit Betreiberinfo}{crt:about}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
112
113
114
115

Der Dienst bietet eine Seite \enquote{Über Uns},
mit Informationen zum Betreiber.

Andreas Zwinkau's avatar
Andreas Zwinkau committed
116
117
\subsection{Abgrenzung}

118
\criteriumNot{Keine Wahl des Kürzels}{crt:no-choice}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134

Ein Nutzer hat keine Möglichkeit die Auswahl des Pfads
einer Kurz-URL zu bestimmen.

\section{Produkteinsatz}

Das Produkt soll mit minimalen Administrationskenntnissen zu betreiben sein.

Besucher des Diensts sollen diesen ohne Schulung oder andere Information benutzen können.

\section{Produktumgebung}

Das Programm soll als Servlet in einem Apache Tomcat betrieben werden.

Es stehen mindestens 2 AMD64 Kerne mit insgesamt 2GB shared RAM zur Verfügung.

Andreas Zwinkau's avatar
Andreas Zwinkau committed
135
%%%%%%%%%%%
136
\section{Funktionale Anforderungen}
Andreas Zwinkau's avatar
Revised    
Andreas Zwinkau committed
137

138
\functionality{Schnelle Weiterleitung}{fnc:o1}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
139
\fulfills{crt:fast}
Andreas Zwinkau's avatar
Revised    
Andreas Zwinkau committed
140

Andreas Zwinkau's avatar
Andreas Zwinkau committed
141
142
143
144
145
Um zu einer Kurz- die Lang-URLs zu finden,
benutzt der Dienst einen $O(1)$ Mechanismus.
Es wird sichergestellt,
dass mit einer zunehmenden Anzahl von Kurz-URLs im System
das Finden nicht länger dauert.
Andreas Zwinkau's avatar
Revised    
Andreas Zwinkau committed
146

Andreas Zwinkau's avatar
Andreas Zwinkau committed
147
148
149
150
\functionality{Login-Möglichkeit auf Homepage}{fnc:login}
\fulfills{crt:login}
\fulfills{crt:facebook}
\fulfills{crt:github}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
151

Andreas Zwinkau's avatar
Andreas Zwinkau committed
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
Auf der Homepage \texttt{http://atu.rl/} sieht ein Besucher
einen \enquote{Login via Facebook} Knopf.
Weitere Knöpfe wie \enquote{Login via Github} sind möglich.
Siehe \cref{fig:homepage}.

\functionality{Auf jeder Seite ist ein Link \enquote{Impressum}}{fnc:impressum-link}
\fulfills{crt:tmg}

Entsprechend Telemediengesetz (TMG) §1
müssen gewisse Informationen über einen Betreiber jederzeit verfügbar sein.
Die inzwischen etablierte Vorgehensweise ist auf allen (!) Seiten
einen Link mit dem Text \enquote{Impressum} anzubieten.
Dieser Link für auf eine Seite mit entsprechender Erklärung.

\functionality{Auf jeder Seite ist ein Link \enquote{Datenschutz}}{fnc:datenschutz-link}
\fulfills{crt:tmg}

Entsprechend Telemediengesetz (TMG) §13
muss der Betreiber den Nutzer Speicherung und Verarbeitung seiner personenbezogenen Daten unterrichten.
Die inzwischen etablierte Vorgehensweise ist auf allen (!) Seiten
einen Link mit dem Text \enquote{Datenschutz} anzubieten.
Dieser Link für auf eine Seite mit entsprechender Erklärung.

Andreas Zwinkau's avatar
Andreas Zwinkau committed
175
176
177
178
\functionality{Daten werden persistent gespeichert}{fnc:persistence}

Ein geordneter Neustart des Diensts führt nicht zu Datenverlust.

179
180
181
%%%%%%%%%%%
\section{Nicht-Funktionale Anforderungen}

182
183
\nonFunctionality{Modernes Design}{nfc:design}

184
185
Das Design soll modern und seriös wirken.

186
187
\nonFunctionality{Persistenz}{nfc:persistence}

188
189
190
Sollten in Zukunft Erweiterungen oder Updates notwendig werden,
müssen die Daten (Kurz-URLs, E-Mailaddressen) erhalten bleiben.

191
192
\nonFunctionality{Erweiterbarkeit}{nfc:extensibility}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
193
194
195
196
197
Das Produkt muss dahingehend erweiterbar sein,
das die Liste der E-Mail-URL Abbildung von authentifizierten Nutzern
abgerufen werden kann.
Wie das genau implementiert wird, ist nicht Teil dieses Projekts.

Andreas Zwinkau's avatar
Andreas Zwinkau committed
198
%%%%%%%%%%%
Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
199
200
\section{Tests}

Andreas Zwinkau's avatar
Andreas Zwinkau committed
201
202
203
204
205
\test{Kurz-URL Erstellen}{tst:create}
\tests{fnc:login}

\teststep{Besucher \enquote{Zoe Washburne} hat einen Browser geöffnet.}
{Zoe navigiert auf die Homepage \texttt{http://atu.rl/}.}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
206
{Die Homepage wird angezeigt wie in \cref{fig:homepage}.}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
207
208
209

\teststep{Zoe hat einen Facebook-Account.}%
{Zoe drückt den \enquote{Login via Facebook} Knopf.}%
Andreas Zwinkau's avatar
Andreas Zwinkau committed
210
{Zoe wird eingeloggt und auf die Erstellseite wie in \cref{fig:form} weitergeleitet.}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
211
212
213

\teststep{}
{Zoe befüllt das Feld \enquote{URL} mit \texttt{sehrlangedomain.com/undganzlangeURL.html} und drückt auf \enquote{Kurz-URL erstellen}.}%
Andreas Zwinkau's avatar
Andreas Zwinkau committed
214
215
{Ihr wird eine Kurz-URL angezeigt wie z.B.\ \texttt{atu.rl/abc}
 wie in \cref{fig:generated}.
Andreas Zwinkau's avatar
typos    
Andreas Zwinkau committed
216
 Statt \enquote{abc}, dürfen beliebige andere Buchstaben und Zahl angezeigt werden, allerdings exakt drei.}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
217
218
219
220

\teststep{}
{Zoe navigiert auf die eben generierte Kurz-URL, z.B.\ \texttt{http://atu.rl/abc}.}
{Sie wird zu \texttt{sehrlangedomain.com/undganzlang  eURL.html} weitergeleitet.}
Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
221

Andreas Zwinkau's avatar
Andreas Zwinkau committed
222
223
224
\test{Betreiberinfos lesen}{tst:tmg}
\tests{fnc:impressum-link}
\tests{fnc:datenschutz-link}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
225

Andreas Zwinkau's avatar
Andreas Zwinkau committed
226
227
228
229
230
231
232
233
234
\teststep{Besucher \enquote{Jayne Cobb} ist auf der Homepage}
{Er folgt dem Link mit dem Text \enquote{Datenschutz}}
{Ein Text mit allen Datenschutzinformationen wird ihm angezeigt.}

\teststep{}
{Jayne folgt dem Link mit dem Text \enquote{Impressum}}
{Ein Text mit Informationen des Betreibers wird ihm angezeigt.}

%%%%%%%%%%%%%
Andreas Zwinkau's avatar
Andreas Zwinkau committed
235
\pagebreak
Andreas Zwinkau's avatar
Andreas Zwinkau committed
236
237
238
\appendix

\section{Seitenentwürfe}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
239
240
241
242
243
244
245
246
247
248
249
250

% made via https://gomockingbird.com/projects/mnf0cwf/4gXVnC

\begin{figure}[hb]
\fbox{\includegraphics[width=\textwidth]{image/login.png}}
\caption{\label{fig:homepage}
Homepage mit Login-Funktion
}
\end{figure}

\begin{figure}[hb]
\fbox{\includegraphics[width=\textwidth]{image/form.png}}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
251
\caption{\label{fig:form}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
252
Formular zur Generierung einer Kurz-URL.
Andreas Zwinkau's avatar
Andreas Zwinkau committed
253
Getestet beispielsweise in \testlink{tst:create}.
Andreas Zwinkau's avatar
Andreas Zwinkau committed
254
255
}
\end{figure}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
256

Andreas Zwinkau's avatar
Andreas Zwinkau committed
257
258
\begin{figure}[hb]
\fbox{\includegraphics[width=\textwidth]{image/generated.png}}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
259
\caption{\label{fig:generated}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
260
Anzeige der generierten Kurz-URL.
Andreas Zwinkau's avatar
Andreas Zwinkau committed
261
Das Textfeld mit der Lang-URL kann nicht geändert werden.
Andreas Zwinkau's avatar
Andreas Zwinkau committed
262
263
}
\end{figure}
Andreas Zwinkau's avatar
Andreas Zwinkau committed
264

Andreas Zwinkau's avatar
Andreas Zwinkau committed
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
\section{Glossar}

\textbf{Besucher}:
Eine Person, welche den Dienst nutzt.
Kann eingeloggt sein oder nicht.

\textbf{Dienst}:
Die Software im laufenden Betrieb. Software as a Service.

\textbf{Homepage}:
Seite, die beim Besuchen der Betreiberdomain \emph{ohne Pfad} angezeigt wird. Auch \enquote{Startseite}.

\textbf{Nutzer}:
Ein eingeloggter Besucher.

Andreas Zwinkau's avatar
initial  
Andreas Zwinkau committed
280
\end{document}