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.