CSC/ECE 517 Spring 2017 E1734: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
Line 12: Line 12:


3) Fixing the broken features. This involves little bug fixes here and there, as well as finishing the features that are completely unfinished.
3) Fixing the broken features. This involves little bug fixes here and there, as well as finishing the features that are completely unfinished.


== Requirements ==
== Requirements ==

Revision as of 02:53, 13 April 2017

Improve survey functionality

Problem Description

Expertiza used to have functionality for conducting surveys. However, the existing code is inefficient and needs to be improved. This functionality has rarely been used and so isn't tested very well either. Therefore, there are parts of survey functionality that are broken or are totally unfinished.

So, there are three major problems this project will tackle.

1) Restructure and move around functionality within classes to further streamline the code.

2) Test the existing functionality and catalog what parts work and what do not. As an instance of a broken feature, take survey deployments for example. During initial testing, it is not possible to deploy any kind of survey. There are other features as well that need little fixes to make them work.

3) Fixing the broken features. This involves little bug fixes here and there, as well as finishing the features that are completely unfinished.

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.

Types of Surveys

There are three kinds of surveys available in the Expertiza application. They are differentiated based on the group of people that can have access to these surveys.

The surveys are as follows:

1) Course Survey:

All the participants in a course can take the course survey.

File: course_evaluation_questionnaire.rb

2) Global Survey:

Any Expertiza user can take the global survey.

File: global_survey_questionnaire.rb

3) Targeted Survey:

The admin can create a survey targeted to a specific group of people.

File: survey_questionnaire.rb

Class Design

Existing class structure:

Updated class structure:


New Class Functionality:

Questionnaire:

Contains the basic information and methods required for posing questions to students or users in general. It is inherited by Classes Quiz, Survey, etc.

We can reuse this class's functionality to create, edit and delete surveys. The functionality for checking if questions have been answered can also be borrowed from this class.

Survey:

This project will introduce a new class called Survey.

This class will inherit from the Questionnaire class and it will be a superclass for the three different kinds of survey classes.

This class will include the assign_participants() method that can be used by any of the child classes to assign participants for their respective surveys.

This class will also have the statistics_generation functionality to be used to provide statistics for any kind of survey. This is the one that will take care of the requirement for getting the distribution of responses.

Global Survey:

This class will inherit from class Survey.

This class will be set the display_type for the survey to be global. So, while assigning participants all the users of Expertiza will be able to see this particular survey.

This kind of survey can only be created by admins of the Expertiza system.

Course Evaluation:

This is also another type of survey and will inherit from class Survey.

Surveys of this type, however, will only be available to the class to which this survey would be assigned. Accordingly, the display_type for it will be set to course.

So assign_participants() will create new survey participants for all users in a particular course.

Survey Questionnaire:

This class will also inherit from the class Survey. The name used for this class may change after further discussions with the professor.

The existing survey_questionnaire class will be repurposed to be used to create surveys that could be targeted to a group of users or be attached to a questionnaire.

It will allow for an association between an assignment and a questionnaire to be established. Additionally, it maintains the instructor id who will create the association.

A flag for a score outside an acceptable range will also be set. It could also be used to play a part in the total score calculation for the assignment.


Database Schema

There are database tables that are used to track the deployment of the surveys, that are used to help keep track of the participants for each survey and that keep track of all the responses for the surveys we create. We would not be making any or would make only minimal design changes to these tables. Our main task would be to go in and fix things that are not currently operational given what we already have.

To give an idea about these database tables we have included them below.


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
email String Limit: 255

Tasks to be performed

Given the information at hand, the following list will provide a good summary of the tasks we will have to perform to achieve the goals of this project.


1) Change the hierarchical structure of classes. Make survey the child of questionnaire. Global survey, survey_questionnaire and course evaluation to be subclasses of survey.

2) Creation, editing and deletion of questions, is a functionality that would be inherited into class Survey(which is a kind of questionnaire) and so into all its children surveys, from the Questionnaire class.

3) Add new class Survey and include functionality to assign(which is in the survey_controller currently) to this model.

4) In the new class add functionality to generate statistics.

5) The display_type for each of the subclasses of Survey can be set individually in the post_initialization method.

6) The three kinds of surveys can be assigned to some either an assignment, a course, a student or to all the users of Expertiza depending on their display_type.

7) Use the course evaluation tab on the Expertiza homepage to display any pending surveys instead of just the course evaluation surveys. The course evaluation tab’s functionality is currently broken and needs to be fixed.

8) "Survey deployment" functionality is broken. Need to make survey deployment of all forms of surveys functional. This would include the following tasks:

  a) Ability to add new survey deployments.
  b) View responses to the deployments.
  c) Delete deployments.

9) "Statistic generation for Survey" functionality is broken. From the drop down menu in survey deployments, we can select Statistical tests and that should take the user to a page where depending on the survey chosen the corresponding statistics would be displayed.

Test Plan

Testing tool:

RSpec

Test # Type Description Steps
Test case 1: Manual Test to check whether an instructor can create a survey.

1. Login to Expertiza as an instructor

2. Click Manage… and go to Questionnaire

3. Add the questions, and specify options

4. In the same Questionnaire view, create the questionnaire by Clicking Create

Test case 2: Manual Test to check whether a survey is deployed to the appropriate users.

1. After creation of a survey that a particular student can participate in, login as that student

2. The student can then participate in the survey by clicking on Surveys.

3.If the survey appears there, that indicates that the survey has been deployed successfully.

Test case 3: Manual Test to check whether the distribution of survey responses is displayed.

1. Login to Expertiza as an instructor

2. Assuming that a survey is created, and students have participated in it, we can check the distribution of results.

3. Under the Manage… Surveys tab, click Statistical tests

4. Click the particular survey that was created to view the distribution of responses.

Test case 4: Automated 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.

1.Create a survey

2. Assign a user(a student) to the survey

3. In the survey participants table, fire a query to check whether the student having that particular ID is present

Test case 5: Manual Test to check that only allowed users can participate in the survey

1. Login to Expertiza as a student that is not included as a participant in the survey.

2. By clicking on Surveys, the list of surveys that the student can currently take is displayed

3. If the survey that was created is not visible, then the user is correctly excluded.

Test case 6: Automated Test for the display_type after creation of a survey

1. Create any kind of survey, i.e. Survey Questionnaire, Global Survey Questionnaire, or Course Evaluation Questionnaire

2. Post_initialization as the name suggests, is called after the initialization of a survey, so it gets called on creation in the first step.

3. Assert whether the value of display_type is course/survey/global depending on what survey was created