Skip to content

Software Requirments

Song Zhiwen edited this page Mar 27, 2017 · 14 revisions

Functional Requirements

Account related:

  1. As a new user, I want to create an account with my email, username and password.
  2. As a registered user, I want to login to relevant third party movie websites so that I can authorise and pull my rating data from those websites to enable the app to recommend movies to me.
  3. As a user, I want to edit my username/password of my account in this app so that I can update my account information.
  4. As a user, I want to keep my account logged in so that I don’t need to login every time when launching the app.
  5. As a user, I want to logout so that the app can be logged in with another account.
  6. As a user, I want to reset my password if I forgot or lost my password accidentally.

Movie related:

  1. As a user, I want to view the popular now showing movies from movie websites so that I can follow the trend of popular movies.
  2. As a user, I want to rate the movies that I have watched so that the app can recommend movies for me based on my ratings.
  3. As a user, I want to view my rating history so that I can edit my ratings.
  4. As a user, I want to delete/edit my rating so that I can update my rating information.
  5. As a user, I want to bookmark some movies so that I can get back to them in a later time.
  6. As a user, I want to remove the bookmark of a movie so that I can delete it when I'm not interested in it.
  7. As a user, I want to view all my bookmarked movies so that I know what movies can be watched next.
  8. As a user, I want to view the details of movies when I click into the page of the movie.
  9. As a user, I want to search for a particular movie so that I can get into the page of the movie.
  10. As a user, I want to view recommended movies which I may like but have not watched so that I can watch them when I am free.
  11. As a user, I want to view recommended movies that are currently showing in cinema so that I can decide which movie to watch with no prior knowledge about the movie when I'm in the cinema.
  12. As a user, I want to select a specific cinema in Singapore and view the 'Now Showing' movies so that I can have a reference of what to watch in that cinema.

Setting related:

  1. As a user, I want to check if there is update version of the app so that I can download and install the new version.
  2. As a user, I want to clear the local cache so that I can free up some space.
  3. As a user, I want to have different coloured theme(eg.dark/light) so that I can use different theme in different situation.
  4. As a user, I want to have the option to choose to synchronise my data with the cloud database.

Non-Functional Requirements

General

  1. The app should have low response time(<3000ms) for searching a movie.
  2. The app should be able to run on Android OS for versions not earlier than KitKat 19.
  3. The app should have a UI to fit the fixed screen resolution of 480x800 hdpi.
  4. The app should not occupy more than 100Mb of RAM when running on large data size.
  5. The algorithm should be iable to calculate the recommended movies in a relative short time when the data size grows big(>1GB).
  6. The app should update the information of movies in cinema for every hour.
  7. The server should able to handle at least 1000 user requests simultaneously when user size grows large.
  8. The system should be able to resend request when calling of API fails or server is down.
  9. The system should create a new user with a magic token provided in the request to prevent robot from spamming the server by registering too many users.

Security

  1. The system should have CAPTCHA or relevant system to prevent robot from trying all password by brute force.
  2. The system should use salt and hash before storing the user credentials.
  3. The system should include the token or session code for every request sent to the backend server to ensure the authentication and authorisation.
  4. The system should send the request through https protocol for secure communication.
  5. The system should have a delay on each unauthenticated request to prevent account enumeration.

Abuser stories and Misuse cases

  1. As a hacker, I want to login to other's account by trying all possible passwords so that I can steal the information. (Countered by Security #1).
  2. As a hacker, I want to edit the user's username, password or ratings without logging in into the server through fake request. (Countered by Security #3)
  3. As a hacker, I want to perform unexpected transactions on the server with CSRF attack. (Countered by Security #3)
  4. As a hacker, I want to steal the database data through account enumeration attack. (Countered by Security #2)
  5. As a hacker, I want to break the server by spamming the server with many requests and data.
  6. As a hacker, I want to get the user's information by intercepting the request. (Countered by Security #4)