451 ‐ Requirements - bounswe/bounswe2024group9 GitHub Wiki

Forum Project Requirements Specification

1. Functional Requirements

1.1 User Requirements

1.1.1 Post Creation Requirements

  • 1.1.1.1 Users shall be able to create new posts on the forum.
  • 1.1.1.2 Users shall be able to attach code snippets to their posts.
  • 1.1.1.3 Users shall specify the programming language relevant to the post (e.g., Python, C++).
  • 1.1.1.4 Users shall select up to 5 predefined labels to categorize their posts.
  • 1.1.1.5 Users shall have the ability to format text (e.g., bold, italics) within their posts.
  • 1.1.1.6 Users shall be able to include external links and media (e.g., images) in their posts.
  • 1.1.1.7 Users shall be limited to creating a maximum of 3 questions per day.
  • 1.1.1.8 Users shall be able to edit or delete their posts.
  • 1.1.1.9 Users shall have the option to add a bounty to their posts to attract more attention.

1.1.2 Feed Requirements

  • 1.1.2.1 Users shall see the most active posts in the feed by default.
  • 1.1.2.2 Users shall be able to filter questions in the feed based on:
    • 1.1.2.2.1 Post status (answered or unanswered)
    • 1.1.2.2.2 Programming language
    • 1.1.2.2.3 Predefined labels
  • 1.1.2.2.3 Date interval
  • 1.1.2.3 Users shall be able to sort posts in the feed by creation time or popularity.
  • 1.1.2.4 Users shall be able to upvote and downvote posts directly from the feed.

1.1.3 Forum Page Requirements

  • 1.1.3.1 Each programming language shall have its own dedicated forum page.
  • 1.1.3.2 Each forum page shall display posts tagged with labels relevant to that programming language.
  • 1.1.3.3 Users shall be able to apply filters and sorting options on forum pages:
    • 1.1.3.3.1 Filters: Labels, programming language, post status (answered/unanswered)
    • 1.1.3.3.2 Sorting: Recent activity, popularity, creation time

1.1.4 Commenting Requirements

  • 1.1.4.1 Users shall be able to comment on any post. (Define character limit)
  • 1.1.4.2 Users should be able to edit their own comments. (Editing may not be allowed)
  • 1.1.4.3 Users shall be able to comment on other comments to facilitate nested discussions.
  • 1.1.4.4 Deleted comments shall display only the commenter's username and indicate that the comment was deleted while keeping the child comments visible.
  • 1.1.4.5 Users shall be able to execute code snippets attached to comments and view results.
  • 1.1.4.6 Users shall be able to share modified code snippets as part of their comments.
  • 1.1.4.7 Comments on posts shall be sorted based on the number of upvotes received.
  • 1.1.4.8 Users shall be able to delete their own comments.

1.1.5 Code Snippet Requirements

  • 1.1.5.1 Users shall be notified if their code execution exceeds defined time or resource limits. (Define limits and resources)
  • 1.1.5.2 Code snippets shall be executed in a secure, isolated environment to prevent malicious activities.

1.1.6 Browsing Programming Languages

  • 1.1.6.1 Users shall be able to browse a catalog of programming languages sourced from Wikidata.
  • 1.1.6.2 Users shall be able to view detailed information about the language's origin.
  • 1.1.6.3 Users should be able to filter programming languages based on attributes such as syntactic similarity or domain of use.
  • 1.1.6.4 Users shall be able to search for programming languages by name or attributes.
  • 1.1.6.5 Users should be able to see related programming languages, such as predecessors, successors, or those with similar features.
  • 1.1.6.6 Users should be able to compare multiple programming languages side by side and see their strengths and weaknesses.
  • 1.1.6.9 Users should be able to access code examples or snippets associated with programming languages.

1.1.7 Question Search

  • 1.1.7.1 Users shall be able to search for questions within the forum using labels. Those labels are predefined by admins.
  • 1.1.7.2 Users should be able to filter search results by date range, programming language, tags, or user.
  • 1.1.7.3 Users should be able to sort search results by relevance, date posted, or number of responses.
  • 1.1.7.4 Users should be able to receive suggestions for similar questions when viewing a question.
  • 1.1.7.5 Users should be able to save or bookmark search queries for future use.
  • 1.1.7.6 Users shall be able to search within specific forums or categories.
  • 1.1.7.7 Users should be able to search for code snippets within questions and answers.
  • 1.1.7.8 Users should be able to receive notifications for new questions matching their saved search criteria.
  • 1.1.7.9 Users shall be prevented from posting duplicate questions by being prompted with similar existing questions.
  • 1.1.7.10 Users should be able to use advanced search operators (e.g., AND, OR, NOT) in their queries.
  • 1.1.7.11 Users should be able to see highlighted search terms in the search results.

1.1.8 Sign Up & Login

  • 1.1.8.1 Users shall be able to search for questions without registering.
  • 1.1.8.2 Users shall be able to sign up via website and the mobile application.
  • 1.1.8.3 Registered users shall be able to log in and log out via website and the mobile application.
  • 1.1.8.4 Registered users shall be able to login via their e-mail with their password, or a direct link to their mail addresses.
  • 1.1.8.5 Registered users shall be able to delete their account.
  • 1.1.8.6 Logged In users shall be able to log out.

1.1.9 Profile

  • 1.1.9.1 Users should be able to add a profile photo.
  • 1.1.9.2 Users shall be able to edit their names.
  • 1.1.9.3 Users shall be able to delete their account.
  • 1.1.9.4 Users shall be able to list their own posts in their profile.
  • 1.1.9.5 Users shall be able to list their own comments in their profile.
  • 1.1.9.6 Users should be able to list their bookmarked posts in their profile.
  • 1.1.9.7 Users shall be able to update their passwords with a confirmation link to their mail addresses sent.

1.2 System Requirements

1.2.1 Browsing Programming Languages Functionality

  • 1.2.1.1 The system shall retrieve programming language data from Wikidata.
  • 1.2.1.2 The system shall provide a user interface that displays programming languages in an organized manner, such as lists or grids (or both).
  • 1.2.1.3 The system shall allow users to view detailed information and basic examples about each programming language.
  • 1.2.1.4 The system shall implement filtering functionality, enabling users to filter programming languages based on fundamental attributes.
  • 1.2.1.5 The system shall implement a search function to search programming languages by name or attributes.
  • 1.2.1.6 The system should display related programming languages based on predefined relationships in the data.
  • 1.2.1.7 The system should allow users to compare multiple programming languages side by side.
  • 1.2.1.8 The system should allow users to bookmark or save programming languages for future reference.
  • 1.2.1.9 The system should provide an option for users to report incorrect or outdated information, which will be reviewed by administrators.
  • 1.2.1.10 The system should support localization, displaying data in different languages if available in Wikidata.
  • 1.2.1.11 The system shall ensure that the user interface for browsing is accessible and user-friendly.
  • 1.2.1.12 The system should provide access to code examples or snippets associated with programming languages.
  • 1.2.1.13 The system should allow users to customize the display settings for browsing programming languages.
  • 1.2.1.14 The system shall ensure data consistency and integrity when fetching and displaying information from Wikidata.

1.2.2 Question Search Functionality

  • 1.2.2.1 The system shall provide a search functionality for users to search questions in the forum using keywords.
  • 1.2.2.2 The system shall include filtering options in the search functionality, such as date interval, programming language, labels, or user.
  • 1.2.2.3 The system shall display search results matching the search criteria, including question title, brief excerpt, date, and number of answers.

2. Non-functional Requirements

2.1 Security

  • 2.1.1 The system shall restrict the visibility of user's data (email etc.).
  • 2.1.2 Strong encryption mechanisms shall be implemented to ensure that no third parties shall be able to access any sensitive data such as passwords.
  • 2.1.3 The system should provide a password recovery mechanism sending a recovery link to the user's email.
  • 2.1.4 The system shall provide tips to users to ensure that they create strong passwords.
  • 2.1.5 Strict controls should be implemented to restrict the access to sensitive data like email.These data shall only be accessed when it is necessary,like password recovery.
  • 2.1.6 The system should use HTTPS over HTTP protocol to provide more security.
  • 2.1.7 The system shall comply with the Turkish Personal Data Protection Law (KVKK).

2.2 Response

  • 2.2.1 A request by the user to the server such as searching for a label, question, etc. should be responded in less than 3 seconds.
  • 2.2.2 The system should not allow more than two requests at a time by a single user.

2.3 Availability

  • 2.3.1 The application shall be available on both a website and a native mobile application on Android platforms.
  • 2.3.2 The application should support English and Turkish characters.

2.4 Reliability

  • 2.4.1 Application should always run on the server.

2.5 Structure

2.5.1 Forum Question
  • 2.5.1.1 The system shall be able to accommodate text and code execution boxes within question descriptions and comments.
  • 2.5.1.2 Forum questions should be able to be linked/grouped together according to labels.

2.5.2 Profile

  • 2.5.2.1 User profile should contain the authored questions.
  • 2.5.2.2 User profile should contain the answered/commented questions.
  • 2.5.2.3 User profile should have a unique email linked to it on the whole platform.

2.5.3 Sign Up

  • 2.5.3.1 Users shall be able to register only if they provide a non-empty name, an e-mail and a password.

2.5.4 Sign In

  • 2.5.4.1 Users should be informed about a new login device and password changes via their registered mails.

2.5.5 Password

  • 2.5.5.1 Passwords shall be accepted only if the password includes at least one uppercase letter, one digit and one special character.

Glossary:

  • "Users" except for 1.1.9 Profile part means "registered users".