-
Notifications
You must be signed in to change notification settings - Fork 0
/
SRS.tex
338 lines (285 loc) · 13.9 KB
/
SRS.tex
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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
\documentclass{scrreprt}
\usepackage{listings}
\usepackage{underscore}
\usepackage[bookmarks=true]{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\hypersetup{
bookmarks=false, % show bookmarks bar?
pdftitle={Software Requirement Specification}, % title
pdfauthor={Joshua D. Harshman}, % author
pdfsubject={TeX and LaTeX}, % subject of the document
pdfkeywords={TeX, LaTeX, graphics, images}, % list of keywords
colorlinks=true, % false: boxed links; true: colored links
linkcolor=blue, % color of internal links
citecolor=black, % color of links to bibliography
filecolor=black, % color of file links
urlcolor=purple, % color of external links
linktoc=page % only page is linked
}%
\def\myversion{2.3 }
\date{}
%\title{%
%}
\usepackage{hyperref}
\begin{document}
\begin{flushright}
\rule{16cm}{5pt}\vskip1cm
\begin{bfseries}
\Huge{SOFTWARE REQUIREMENTS\\ SPECIFICATION}\\
\vspace{1.0cm}
for Magpie \\
\vspace{1cm}
\LARGE{Version \myversion}\\
\vspace{1.5cm}
Prepared by\\Joshua D. Harshman\\Bruce Emehiser\\Aaron Young\\Andrew Macy\\
\vspace{1.9cm}
Application Development Team\\
\vspace{1.9cm}
\today\\
\end{bfseries}
\end{flushright}
\tableofcontents
\chapter*{Revision History}
\begin{center}
\begin{tabular}{|c|c|c|c|}
\hline
Name & Date & Reason For Changes & Version \\
\hline
Rough Draft & 2016 02 08 & Initial SRS & 1.0 \\
\hline
Version 2.0 update & 2016 02 21 & Prep for client release & 2.0 \\
\hline
Version 2.2 update & 2016 06 05 & Modification for Alpha release & 2.2 \\
\hline
Version 2.3 update & 2016 06 06 & Modification for Alpha release & 2.3 \\
\hline
\end{tabular}
\end{center}
\chapter{Introduction}
\section{Purpose}
The purpose of this document is to give a detailed description of requirements for
the Magpie mobile application and companion web services. It will illustrate the purpose
and complete declaration for the development of the system. It will also explain system
constraints, interface, interactions, and limitations.
\section{Document Conventions}
Not applicable at this time \\ \\
See 6.0.1 and 6.0.2 for for Coding Conventions
\section{Intended Audience and Reading Suggestions}
This document is intended for all those interested or having stake in the Magpie
application. Companies planning to use this product as well as future developers
planning to contribute or elaborate on this software will find the following documentation
helpful to understand the specifications and functions of both the mobile application and server application.
\section{Project Scope}
The Magpie mobile application allows users to track their visitation to events,
receive digital badges and exchange said badges for real life rewards. Badges are awarded
to users based on proximity to available events in their area. Checking in via GPS or
if applicable by scanning a QR code, will yield a digital badge that is then stored for them in a resilient database on Magpie's servers.
\section{References}
Not applicable at this time
\chapter{Overall Description}
\section{Product Perspective}
The Magpie app was first envisioned as a standalone mobile application that one
could use to track their progress through a given event and obtain badges for doing so.
It has since grown into a much bigger and more ambitious, multi-part project. And while the
fundamental idea remains the same, the implementation is turning into a robust, social, and
educational piece of software that has it's roots in game theory.
\section{Product Functions}
Magpie is intended to allow users to find interesting locations, to influence them
to visit those locations, to share the experience with friends, and collect badges
which they can redeem for some nominal reward. Because of this, we have the
following functions:
\begin{itemize}
\item User authentication
\item Robust web service backend
\item GPS and QR location check in
\item Social media hooks for sharing events and waypoints
\end{itemize}
With these features, users will be allowed to log in to the app, view events,
view waypoints, share events and waypoints via social media, and collect
badges at waypoints via GPS and QR.
\section{User Classes and Characteristics}
Magpie really has something for everyone. The game-ification of collecting badges to
exchange for real life rewards will drive the younger generations to use the application.
Not to mention the social media integration that will allow the user to quickly share, tweet, and
post their latest adventure.
\section{Operating Environment}
Magpie will run on Android API 16 and newer android devices. It is designed for
mobile phones, but it can also be run on Android tablets, although the screen
sizes are not specifically supported. The phones/tablets must have a rear facing
camera to be able to utilize the QR code check in feature.
\section{Design and Implementation Constraints}
A minimum Android version of 4.3 (Jelly Bean) is required to access *all* features of the Magpie application.
It is up to the end user to develop and maintain a database and server for the application to interface with
as well as maintain a way to push events to the Magpie server.
\section{Assumptions and Dependencies}
While Magpie is dependant on location services for core functionality,
it is also dependant on a hosted web service and database and requires connectivity to
this service in order to function correctly. \\ \\
While Magpie is currently not offically deployed to a production environment, a testing server is
currently live which the application will use by default.
% Magpie is dependent on a hosted database for pulling events and updating
% content. Without the back end it is incapable of pulling event data and
% providing the user with information.
\chapter{External Interface Requirements}
\section{User Interfaces}
The user interface will be built with Android XML layouts. It will feature
\begin{itemize}
\item Paging introduction view
\item Share drawer
\item Login screen
\item Event view screen
\item Way-point view screen
\item QR code scanner screen
\end{itemize}
\section{Hardware Interfaces}
Each device must have a rear-facing camera capable of auto-focus,
and and producing JPEG photos. This will be used by the QR code scanner for event waypoint checkin.
Magpie will also need network connection to send and receive user data to it's server.
The device must also be GPS capable if the user wants to take advantage of the GPS check in and event location features.
\section{Software Interfaces}
Magpie will make use of the following software interfaces
\begin{itemize}
\item Mobile Application
\begin{itemize}
\item ZXing QR code API
\item Google Plus API
\item Google Play Services
\item Google Gson
\item hdodenhof's circleimageview library
\item Square's okhttp3 library
\item Square's picasso library
\item Facebook Android SDK
\item Fabric I/O
\end{itemize}
\item Server Application
\begin{itemize}
\item CoreOS Stable
\item Docker
\item Apache
\item PHP
\item MySQL
\end{itemize}
\end{itemize}
\section{Communications Interfaces}
Magpie will communicate with the server via HTTPS connections, for getting event
data, and storing user data. \\
Magpie will also communicate with social media outlets Google (for user authentication),
and Google+, Facebook, and Twitter for sharing.
\chapter{System Features}
These are the main features included in Magpie.
\section{System Feature 1 : Intro \& Login}
Login screen with paginated intro / tutorial
\subsection{Description and Priority}
Provides a login as well as a quick tutorial outlining the app's basic features and
usage. This is of mixed priority, the login acts as the initial entry point for new users
which is of high priority, while the paginated tutorial provides a nice feature to user
experience which is not critical to the application's overall functionality.
\subsection{Stimulus/Response Sequences}
On initial launch, Magpie will present the user with a professionally designed login
page providing the user the option for logging in with their Google account. The user
will also be able to swipe the screen to view a paginated tutorial highlighting the
usage and main features of the application.
\subsection{Functional Requirements}
Server side database backend assisting with login verification, user, and data tracking.
\section{System Feature 2 : Events}
\subsection{Description and Priority}
Here begins the core functionality of the application and is as such high priority.
\subsection{Stimulus/Response Sequences}
Continuing the first run sequence, the application will use GPS location services to detect the user's current location.
This location will be stored in SQLite and sent to the server along with the selected radius settings.
These values are then used on the server to caclulate and return the list of known events within the user's prefered radius.
\subsection{Functional Requirements}
Server side database and services for pulling event data.
\section{System Feature 3 : Checkin}
\subsection{Description and Priority}
User checkin is a core feature of the app.
Users will be allowed to check into an event's waypoints by using GPS location services and QR code scans.
\subsection{Stimulus/Response Sequences}
The user will select an event and be presented with a list of waypoints associated with that event.
The user will then be able to select a single waypoint which they wish to check in to.
Being able to check-in to that waypoint is dependant on verified location provided via location services or by QR code
if available. \\
\subsection{Functional Requirements}
GPS connectivity - For full functionality\\
Internet connection \\
Camera and ZXing API for QR code scanning.
\section{System Feature 4 : Sharing}
The user will be able to easily share information and pictures regarding specific check-in locations at any event. Sharing will be direct through Facebook, Twitter and Google+ while also allowing photo sharing through any capable app on the device. The user will be able to choose to take a photo, pick one from their gallery or use the photo loaded on default.
\subsection{Stimulus/Response Sequences}
On the screen for an individual checkpoint, there will be a share button. When pressed a list will pop out from the top-left corner prompting for share method. An additional list will replace the existing one if the user selects the "Share Photo" option prompting for which method they prefer.
\subsection{Functional Requirements}
User accounts on desired social media accounts.
\chapter{Other Nonfunctional Requirements}
\section{Performance Requirements}
Internet connection must be suitable for loading images and other content from a
database. A simple wifi or 3G connection should be sufficient. \\
Phone must be powerful enough to decode QR codes from images.
\section{Safety Requirements}
Best practices of user data handling is still in research.
\section{Security Requirements}
Security is still in research.
\section{Software Quality Attributes}
The software is built to be extensible. It can be extended to almost any event at
which there are booths, attractions, or other locations or points of interest.
Administrators will be able to easily add events to the server, and users will see
and be able to select and pull new events.
Magpie leverages fragments to make each feature modular and easily extensible.
This allows new modules to easily be added for increased functionality.
Maintenance should be small, with the only necessary maintenance being server side.
\subsection{Naming Conventions}
\begin{itemize}
\item All code is to follow standard Java code naming conventions.
\item Variable names will be in Camel Case, beginning with a lower case letter.
\texttt{int variableName;}
\item Method names and Class names are to be camel case, beginning with an upper case letter. \\
\texttt{public class ClassName \{\}}
\item Member level variables are to be in Camel Case, and begin with a lower case character 'm'. \\
\texttt{private int mMemberLevelVariable;}
\end{itemize}
\subsection{Documentation Conventions}
All files are to contain sufficient documentation to be clearly understandable. This
contains but is not limited to
\begin{itemize}
\item File comments. Each file should contain a comment at the top which contains,
\item File name
\item Author name(s)
\item Date created
\item Date(s) modified
\item brief description of the file contents
\end{itemize}
\texttt{/** \\}
\texttt{* @file FileName.java \\}
\texttt{* @author FirstName LastName\\}
\texttt{* @date 2016 01 15 \\}
\texttt{* @date 2016 02 08\\}
\texttt{* This short description is intended to fulfill the requirements of an SRS. \\}
\texttt{*/ \\}
\begin{itemize}
\item Class Comments. All classes should contain a multi-line comment immediately above them which adheres to
the javadoc standards. They should contain a description of the Class and its intended function. \\
\end{itemize}
\texttt{/** \\}
\texttt{* Class Description used to show the proper documentation \\}
\texttt{* of a class \\}
\texttt{*/}
\texttt{public class ClassName \{\}}
\begin{itemize}
\item Method Comments. All methods should have a multi-line comment immediately with
\item Description
\item Parameter(s)
\item Return
\item Exceptions
\end{itemize}
\texttt{/** \\}
\texttt{* Method description describing the basic features \\}
\texttt{* and function of method\\}
\texttt{* \\}
\texttt{* @param paramName This parameter is useful because it shows param notation in comments \\}
\texttt{* @param param2 This shows the second parameter \\}
\texttt{* \\}
\texttt{* @return This is the description of the return value\\}
\texttt{* \\}
\texttt{*/}
\texttt{public class ClassName \{\}}
\end{document}