CSC/ECE 517 Spring 2017 E1734
Improve survey functionality
Problem Description
Expertiza used to have functionality for conducting surveys. It needs to be improved so that the data collected from the survey can be stored in the database along with course and assignment information.
Types of Surveys
Course Survey:
All the participants in a course can take the course survey.
File: course_evaluation_questionnaire.rb
Global Survey:
Any Expertiza user can take the global survey.
File: global_survey_questionnaire.rb
Targeted Survey:
The admin can create a survey targeted to a specific group of people.
File: survey_questionnaire.rb
Requirements
1) A page to show the distribution of results for all types of questionnaires.
2) Use of inheritance so that survey questionnaire is a subclass of the questionnaire class. Also, course evaluation questionnaire and global survey questionnaire should be subclasses of survey questionnaire.
3) Use response_controller to implement the survey functionality. This should be similar to how other questionnaires like the peer review questionnaire, are implemented.
4) Use the same code to display existing survey responses as to display the responses in peer reviews.
5) For each course or assignment, the admin/instructor should be able to create a survey and have some (or all) of the participants receive the survey. The instructor should have the option to not include some questions from a global survey. The quiz takers can take the global survey and course survey consecutively.
6) An entry in the participants table called a survey_participant record must be added to indicate when a user is assigned to take part in a survey.
7) Tests need to be written for the feature.
Note: Although the requirements document mentions that the existing code needs to be scrapped and rewritten, after discussion with professor it was decided that this is not a strict requirement.
DB Schema
Table: Survey Deployments
Element | Type | Attributes |
---|---|---|
course_evaluation_id | Integer | Limit: 4 |
start_date | Datetime | |
end_date | Datetime | |
num_of_students | Integer | Limit: 4 |
last_reminder | Datetime | |
course_id | Integer | Limit: 4, Default: 0, Null: false |
Table: Survey Participants
Element | Type | Attributes |
---|---|---|
user_id | Integer | Limit: 4 |
survey_deployment_id | Integer | Limit: 4 |
Table: Survey Responses
Element | Type | Attributes |
---|---|---|
score | Integer | Limit: 4 |
comments | Text | Limit: 65535 |
assignment_id | Integer | Limit: 4, Default: 0, Nil: false |
question_id | Integer | Limit: 4, Default: 0, Nil: false |
survey_id | Integer | Limit: 4, Default: 0, Nil: false |
String | Limit: 255 |
Class Structure
Existing class structure:

Updated class structure:

Test Plan
Testing tool:
RSpec
Test case 1:
Description:
Test to check whether an instructor can create a survey questionnaire.
Test case 2:
Description:
Test to check whether a survey questionnaire is deleted.
Test case 3:
Description:
Test to check whether a survey questionnaire is updated.
Test case 4:
Description:
Test to check whether a survey is deployed to the appropriate users.
Test case 5:
Description:
Test to check whether the distribution of survey responses is correct.
Test case 6:
Description:
Test to check whether a survey_participant record is created for the user in the participants table, if the user is assigned to take part in a survey.