Requirements - TAGCH/ku-polls GitHub Wiki

Functional Requirements

  1. The application should allow users to view a list of active polls.
  2. Each poll should link to a detailed page displaying the question and available choices.
  3. Users should be able to vote on a poll and have their vote counted toward the total.
  4. The application should display the total number of votes for each choice after voting.
  5. Polls should have a start date, after which they become visible to users.
  6. Polls should have an optional end date, after which voting is no longer allowed.
  7. Users should be able to modify their vote during the polling period.
  8. The application should allow authenticated users to vote and view their previous votes.
  9. Poll results should be visible to all users after the start date, even if they do not vote.
  10. The application should save all poll data, including questions, choices, and votes, in a persistent database.
  11. The admin interface should allow authorized users to add, modify, or delete polls and choices.
  12. The application should prevent unauthorized users from accessing voting functionalities.
  13. The system should allow users to view poll results in graphical form.
  14. The application should redirect users to a list of polls if they attempt to access an unpublished poll.
  15. The application should automatically test for unit and coverage.

Non-functional Requirements

  1. The application should be written in Python.
  2. The application should use the Django web framework.
  3. The application should be portable and capable of running on Windows, Linux, or MacOS.
  4. The application should use Git for version control and GitHub for issue tracking and project management.
  5. The user interface should be responsive and user-friendly, with clear navigation.
  6. The application should ensure data security by using proper authentication mechanisms.
  7. The application should be able to handle multiple simultaneous users without performance degradation.
  8. The system should support future scalability, allowing for additional features in subsequent releases.
  9. The database should be capable of storing large amounts of data without significant slowdowns.
  10. The application should have clear installation and operation instructions for end-users.
  11. The application should provide automated testing and continuous integration support.
  12. The system should be able to recover gracefully from unexpected failures or restarts.