CSC/ECE 517 Fall 2017/E17A4 Allow calibration to be part of an assignment Team34

From Expertiza_Wiki
Jump to navigation Jump to search

Introduction

1. Purpose

Expertiza is an open source website based on Ruby on Rails. Calibration is one of the main feature Expertiza provides, which allows students to compare their reviews with experts' reviews and learn from the comparisons.

2. Problem Definition

Currently, the instructor is able to calibrate the students’ peer review abilities on Expertiza. However, the instructor needs to create a separate assignment just for calibration purpose of a project . Then the instructor and students can start doing peer reviews for the project with the newly created assignment . However, calibration should become one part of the normal assignment. The instructor could turn on this feature if necessary. Adding a separate assignment every time a project needs a calibration process is not efficient.

This project proposes a solution to include the process of calibration in a regular assignment.

Overall Description

“Calibration for training?” feature of an assignment in Expertiza provides a solution for the Instructor of a course to effectively add a calibration to a newly created or existing assignment. The instructor should be able to turn on this feature by checking the check box "Calibration for training?" under the General tab of an assignment. The instructor will also be able to provide or change the corresponding deadline for calibration. Then students will be pre-assigned several sample assignments. After students finish one peer review , there will be a link named “Show calibration results” to show the calibration report.

Picture above is "Calibration for training?" box in editing/creating assignment page

Requirements

1. The instructor shall be able to add calibration process to an newly created or existing assignment.

2. In student_task/list page, current stage column shall display calibration when assignment is in calibration period.

3. The added calibration of an assignment shall have it owns type of due date.

4. The added calibration of an assignment shall have the same behavior as the current working calibration process.

Use Cases

1. Edit/Create Assignment

Use Case Id: 1

Use Case Description: Instructor can click to edit an existing assignment or create a new assignment.

Actors: Instructor

Pre Conditions: The user is logged in as an instructor.

Post Conditions: Instructor can edit the assignment.


2. Enable Calibration

Use Case Id: 2

Use Case Description: Instructor can select the option - "Calibration for training?" and save the assignment.

Actors: Instructor

Pre Conditions: Instructor is in the editing or creating assignment page.

Post Conditions: The assignment becomes a calibration assignment and the deadline for calibration now appears in the due dates tab.


3. Add calibration due date

Use Case Id: 3

Use Case Description: Instructor can set due date for calibration under due dates tab.

Actors: Instructor

Pre Conditions: Calibration for training? is enabled.

Post Conditions: The deadline for calibration is now updated.

Constraints: Calibration deadline should be before the first round submission deadline.


4. Expert Review

Use Case Id: 5

Use Case Description: Instructor can do expert reviews for works.

Actors: Instructor

Pre Conditions: The assignment is a calibration assignment and the work is submitted.

Post Conditions: The work has the expert review.


5. Calibration review

Use Case Id: 6

Use Case Description: Students can do calibration review.

Actors: Student

Pre Conditions: The assignment is a calibration assignment and the current stage is in calibration review.

Post Conditions: Students have done the calibration review.


6. View calibration result

Use Case Id: 7

Use Case Description: Student can see the comparison between their reviews and the experts' reviews.

Actors: Student

Pre Conditions: Instructors finished the expert reviews and this student submitted his reviews.

Post Conditions: NA


7. Submit work

Use Case Id: 4

Use Case Description: Students can submit their works when the current stage is "submit".

Actors: Student

Pre Conditions: Current stage is "submit".

Post Conditions: The database has the new works.

Test-Driven Development(TDD)

A software development process begins by writing an (initially failing) automated test case that defines a desired improvement or a new function, and generate the minimum amount of code to pass that test. It helps the developer to focus on a smaller portions of functionality at a time. By following the process of TDD we can ensure to maintain the minimum amount of code while writing that specific function, and the developer can gain an overview of the function.

What did we implement

1. We created a file "calibration_spec.rb" in "spec/ features" and write feature tests for the calibration function.

2. We created a migration file "_add_new_deadline_type.rb" to add a new record to deadline_types model

3. We added a calibration due date in due date tab if it's a calibration assignment

4. We added calibration_review in deadline_right file (Modified file: app/models/deadline_right.rb)

5. We changed the function of finding next due date from find_by to where().order('due_at').first

6. We changed "app/controllers/student_review_controller.rb" file to exclude calibration reviews when counting the review number. We filtered the reviews with timestamp earlier than submission due date, which means reviews are done in calibration period.

7. We changed the view for student review list in "app/views/student_review/list.html.erb" file.

How's the function working after implementation

You can refer to a youtube video to see how's calibration function working after our implementation: https://youtu.be/s4-Oh3pLN-E

Below are the screenshots for the important parts:

1. After enable calibration for training function, the instructor can see a calibration due date in "due date" tab and can assign a due date for this calibration training:



2. When the current stage is in "Calibration Review" we can only do the calibration reviews and show calibration results after submitting.

3. When the current stage is in "Review", we can see the calibration reviews and do the regular reviews.

Tests

1. When it is in assignments#edit page:

  • To check it has a checkbox with title "Calibration for training?" in assignments#edit page
  • This feature test check for when Calibration for training? is selected, the value of assignment is calibrated is set to be true so the calibration tab will show up on the top of the page to fill in the due dates for the calibration period.
context 'in assignments#edit page' do
   it 'has a checkbox with title \'Calibration for training?\' on \'General\' tab' do
     assignment = Assignment.where(name: "Assignment1665").first
     instructor = User.find_by(name: "instructor6")
     login_as("instructor6")
     stub_current_user(instructor, instructor.role.name, instructor.role)
     visit "/assignments/#{assignment.id}/edit"
     click_link 'General'
     expect(page).to have_field('Calibration for training?')
   end
   context 'when clicking \'Calibration for training?\' checkbox and clicking \'save\' button' do
     context '\'Calibration\' due date' do
       it 'works correctly' do
         assignment = Assignment.where(name: "Assignment1665").first
         instructor = User.find_by(name: "instructor6")
         login_as("instructor6")
         stub_current_user(instructor, instructor.role.name, instructor.role)
         visit "/assignments/#{assignment.id}/edit"
         click_link 'General'
         expect(page).to have_content('Calibration for training?')
         find(:css, "#assignment_is_calibrated_field").set(true)
         click_button 'Save'
         expect(page).to have_link('Calibration')
         click_link 'Due dates'
         fill_in 'datetimepicker_calibration_review', with: (Time.now.in_time_zone + 10.days).strftime("%Y/%m/%d %H:%M")
         click_button 'submit_btn'
         calibration_type_id = DeadlineType.where(name: 'calibration_review')[0].id
         calibration_due_date = DueDate.find(12)
         expect(calibration_due_date).to have_attributes(
                                             deadline_type_id: calibration_type_id,
                                             type: 'AssignmentDueDate'
                                         )
       end
     end
   end
 end

2. When current assignment is calibration stage:

  • To check it shows current stage of the assignment to be "Calibration" on student_task#view page when current assignment is in calibration stage
  • To check it shows "Calibration review 1,2,3..." instead of "Review 1,2,3..." on student_review#list page
  • To check it allows students to do calibration review and the date can be saved successfully
  • To check the student is able to compare the results of expert review by clicking "show calibration results" link
  • Since the test contained duplicate code, we load the code in load_work method and set the stage of the current assignment as "calibration" state so the review contains Calibration Review 1, 2, 3 and student can view their calibration result when clicking on View link.
 context 'when current assignment is in calibration stage' do
   context 'calibration feature' do
     it 'works correctly' do
       load_work(DateTime.now.in_time_zone + 10, DateTime.now.in_time_zone + 20, DateTime.now.in_time_zone + 30,
                 DateTime.now.in_time_zone + 40, DateTime.now.in_time_zone + 50, DateTime.now.in_time_zone + 20,
                 DateTime.now.in_time_zone + 30, DateTime.now.in_time_zone + 40, DateTime.now.in_time_zone + 50,  "calibration")
       expect(page).to have_content("Calibration Review 1")
       expect(page).to have_content("View")
       click_link "View"
     end
   end
 end


3. When current assignment if in review_stage:

  • To check it excludes calibration reviews from outstanding review restriction and total review restriction
  • To check it shows "Review 1,2,3..." instead of "Calibration review 1,2,3..." on student_review#list page
  • When the project is in review stage, the number of review allowance will not affect by the number of calibration review numbers, so we check the number of review allow is still the same after changing the stage to review stage and the page should contains Calibration Review 1 and Review 1.
 context 'when current assignment is in review stage' do
   it 'excludes calibration reviews from outstanding review restriction and total review restriction' do
     load_work(DateTime.now.in_time_zone - 10, DateTime.now.in_time_zone - 20, DateTime.now.in_time_zone + 30,
                  DateTime.now.in_time_zone + 40, DateTime.now.in_time_zone + 50, DateTime.now.in_time_zone + 20,
                  DateTime.now.in_time_zone + 30, DateTime.now.in_time_zone + 40, DateTime.now.in_time_zone + 50, "review")
     expect(page).to have_content("Number of reviews allowed: 3")
   end
   it 'shows \'Review 1, 2, 3...\' and \'Calibration review 1, 2, 3...\' on student_review#list page' do
     load_work(DateTime.now.in_time_zone - 10, DateTime.now.in_time_zone - 20, DateTime.now.in_time_zone + 30,
               DateTime.now.in_time_zone + 40, DateTime.now.in_time_zone + 50, DateTime.now.in_time_zone + 20,
               DateTime.now.in_time_zone + 30, DateTime.now.in_time_zone + 40, DateTime.now.in_time_zone + 50, "review")
     expect(page).to have_content("Calibration Review 1")
     expect(page).to have_content("Review 1")
   end
 end
end

Files Modified

  • app/controllers/student_review_controller.rb
  • app/models/deadline_right.rb
  • app/models/due_date.rb
  • app/views/assignments/edit/_due_dates.html.erb
  • app/views/student_review/_responses.html.erb
  • app/views/student_review/list.html.erb
  • New created file: spec/features/calibration_spec.rb
  • New created file: 20171206202730_add_calibration_review_to_deadline_types.rb