<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Adeshmu</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Adeshmu"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Adeshmu"/>
	<updated>2026-06-05T18:13:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114428</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114428"/>
		<updated>2017-12-04T17:23:52Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id and they click on the '''edit''' button, then a error message will be displayed which will inform the user that his/her teammate is already editing the same review.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; color: black;&amp;quot;&lt;br /&gt;
|response_map.rb&lt;br /&gt;
|assignment.rb&lt;br /&gt;
|response_controller.rb&lt;br /&gt;
|review_mapping_controller.rb&lt;br /&gt;
|-&lt;br /&gt;
|/edit/_review_strategy.html.erb&lt;br /&gt;
|student_review/_responses.html.erb&lt;br /&gt;
|review_mapping/select_reviewer.html.haml&lt;br /&gt;
|response_controller_spec.rb&lt;br /&gt;
|-&lt;br /&gt;
|assignment_controller.rb&lt;br /&gt;
|student_review_controller.rb&lt;br /&gt;
|application_helper.rb&lt;br /&gt;
|access_helper.rb&lt;br /&gt;
|-&lt;br /&gt;
|assignment_team.rb&lt;br /&gt;
|/response/response.html.erb&lt;br /&gt;
|/review_mapping/_list_review_mapping.html.erb&lt;br /&gt;
|/student_review/_set_dynamic_review.html.erb&lt;br /&gt;
|-&lt;br /&gt;
|/student_review/list.html.erb&lt;br /&gt;
|config/routes.rb&lt;br /&gt;
|assignment_controller_spec.rb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Edge Cases===&lt;br /&gt;
Apart from the case explained above we have handled two edge cases. These cases are as explained below:&lt;br /&gt;
&lt;br /&gt;
'''Case 1:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
We are not allowing concurrent editing of reviews for teams. We are doing this by locking the response_map. Thus, when a team member is editing a review we lock the response using that team member's id. It can only be unlocked when the review has been saved. When locked the other team members can only view the review.&lt;br /&gt;
&lt;br /&gt;
'''Case 2:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
The beginning of a review is a special case since when the begin button is clicked a review form is only rendered. Nothing is saved. Since there is no response object linked to the review, we cannot lock anything. Thus, if this case is not handled all the teammates will be able to begin the review concurrently and the person who saves last will overwrite changes of all teammates. Thus, we lock the respnse_map. Now when one of the teammate begins the review ,and the other teammates try to begin too, they will get an error saying that the review is already being edited by someone else. &lt;br /&gt;
&lt;br /&gt;
'''Case 3:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
If a team member forgets to save or submit a review and has not closed the browser window, then we automatically save the review after an inactivity timeout of 20 mins thus unlocking it for the other team members to edit.&lt;br /&gt;
&lt;br /&gt;
'''Case 4:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
At a critical time, if a team is unable to contact the team member who has locked the review by closing the browser window without saving the review, the other team members can contact the instructor who has been provided an unlock button for such emergency situations. The instructor can now unlock that review and then the other team members can edit it.&lt;br /&gt;
&lt;br /&gt;
'''Case 5:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
An instructor can delete completed review if he/she decides to change the switch strategy for an assignment between tema reviews and individual reviews. If a user is editing a review at the instant when instructor is deleting the reviews, upon pressing the save review or submit review button, the user is redirected to the student_review/list.html.erb page&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:review_strategy.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''When Instructor assigns reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:instructor_assign_reviews.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan includes testing for the new team-based reviewing functionality that we have added. Our test plan includes the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Test the delete_reviews method to check whether it displays a flash message when there are no reviews to be delete.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Test the delete_reviews method to check whether it displays the success flash message on deletion of reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Test the action_allowed? method to check whether it denies certain action when the review is locked by a user other than current user.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Test the action_allowed? method to check whether it allows certain action when the review is locked by current user.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Test the reviewer_is_team_member method to check whether the current user is a member of the assignment review team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/ghnguye2/expertiza.git Github Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1118 Github Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/8vkHx3Hqm8g Project Demo]&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114427</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114427"/>
		<updated>2017-12-04T17:13:57Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id and they click on the '''edit''' button, then a error message will be displayed which will inform the user that his/her teammate is already editing the same review.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; color: black;&amp;quot;&lt;br /&gt;
|response_map.rb&lt;br /&gt;
|assignment.rb&lt;br /&gt;
|response_controller.rb&lt;br /&gt;
|review_mapping_controller.rb&lt;br /&gt;
|-&lt;br /&gt;
|/edit/_review_strategy.html.erb&lt;br /&gt;
|student_review/_responses.html.erb&lt;br /&gt;
|review_mapping/select_reviewer.html.haml&lt;br /&gt;
|response_controller_spec.rb&lt;br /&gt;
|-&lt;br /&gt;
|assignment_controller.rb&lt;br /&gt;
|student_review_controller.rb&lt;br /&gt;
|application_helper.rb&lt;br /&gt;
|access_helper.rb&lt;br /&gt;
|-&lt;br /&gt;
|assignment_team.rb&lt;br /&gt;
|/response/response.html.erb&lt;br /&gt;
|/review_mapping/_list_review_mapping.html.erb&lt;br /&gt;
|/student_review/_set_dynamic_review.html.erb&lt;br /&gt;
|-&lt;br /&gt;
|/student_review/list.html.erb&lt;br /&gt;
|config/routes.rb&lt;br /&gt;
|assignment_controller_spec.rb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Edge Cases===&lt;br /&gt;
Apart from the case explained above we have handled two edge cases. These cases are as explained below:&lt;br /&gt;
&lt;br /&gt;
'''Case 1:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
We are not allowing concurrent editing of reviews for teams. We are doing this by locking the response_map. Thus, when a team member is editing a review we lock the response using that team member's id. It can only be unlocked when the review has been saved. When locked the other team members can only view the review.&lt;br /&gt;
&lt;br /&gt;
'''Case 2:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
The beginning of a review is a special case since when the begin button is clicked a review form is only rendered. Nothing is saved. Since there is no response object linked to the review, we cannot lock anything. Thus, if this case is not handled all the teammates will be able to begin the review concurrently and the person who saves last will overwrite changes of all teammates. Thus, we lock the respnse_map. Now when one of the teammate begins the review ,and the other teammates try to begin too, they will get an error saying that the review is already being edited by someone else. &lt;br /&gt;
&lt;br /&gt;
'''Case 3:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
If a team member forgets to save or submit a review and has not closed the browser window, then we automatically save the review after an inactivity timeout of 20 mins thus unlocking it for the other team members to edit.&lt;br /&gt;
&lt;br /&gt;
'''Case 4:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
At a critical time, if a team is unable to contact the team member who has locked the review by closing the browser window without saving the review, the other team members can contact the instructor who has been provided an unlock button for such emergency situations. The instructor can now unlock that review and then the other team members can edit it.&lt;br /&gt;
&lt;br /&gt;
'''Case 5:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
An instructor can delete completed review if he/she decides to change the switch strategy for an assignment between tema reviews and individual reviews. If a user is editing a review at the instant when instructor is deleting the reviews, upon pressing the save review or submit review button, the user is redirected to the student_review/list.html.erb page&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:review_strategy.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''When Instructor assigns reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:instructor_assign_reviews.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan includes testing for the new team-based reviewing functionality that we have added. Our test plan includes the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Test the delete_reviews method to check whether it asks for a confirmation before deleting the reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Test the delete_reviews method to check whether it displays the success flash message on deletion of reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Test the action_allowed? method to check whether it denies certain action when the review is locked by a user other than current user.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Test the action_allowed? method to check whether it allows certain action when the review is locked by current user.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Test the reviewer_is_team_member method to check whether the current user is a member of the assignment review team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/ghnguye2/expertiza.git Github Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1118 Github Pull Request]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://youtu.be/8vkHx3Hqm8g Project Demo]&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1763_Fix_Staggered-Deadline_Assignments&amp;diff=114426</id>
		<title>CSC/ECE 517 Fall 2017/E1763 Fix Staggered-Deadline Assignments</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1763_Fix_Staggered-Deadline_Assignments&amp;diff=114426"/>
		<updated>2017-12-04T17:13:22Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Additional Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application developed using Ruby on Rails that serves as a peer-review system. The application allows students to submit and peer-review learning objects (articles, code, web sites, etc). It is an open source project and it's codebase is maintained in GitHub. We are contributing to Expertiza as a part of our Object-Oriented Design and Development's Open-Source Software (OSS) Project. Our goal in this project is to fix various issues related to staggered deadlines for assignments. A staggered-deadline assignment is an assignment in which different topics have different deadlines. In this Wiki Page, we will explain the changes that we have made for the same.&lt;br /&gt;
&lt;br /&gt;
=='''Changes To Be Implemented'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Currently, the system requires the instructor to enter, manually, all submission and review deadlines for all topics.  It would be better if the instructor could enter the deadlines once, and have them be applied to a specified set of topics.&lt;br /&gt;
&amp;lt;li&amp;gt; We were also asked to create a &amp;quot;Duplicate Topic&amp;quot; button  for the instructor, to copy a particular topic within a assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Currently the assignment topics are displayed on the basis of &amp;quot;first created&amp;quot;. Thus we have to sort the topics sorted based on the topic_identifiers.&lt;br /&gt;
&amp;lt;li&amp;gt;'''Testing is not a requirement of this project.'''&lt;br /&gt;
&lt;br /&gt;
=='''Motivation'''==&lt;br /&gt;
&amp;lt;li&amp;gt; Currently when the instructor wants to assign the same deadlines to certain topics, s/he has to manually enter all deadline dates. Each deadline includes date and time. Now if there are review rounds (which we assume there are), the instructor will have to enter all dates manually. This task is time consuming and just wasted effort. It will be more efficient to have a method where the instructor can assign this deadline to certain selected topics from the assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; In an assignment that has staggered deadlines, say a topic has 3 slots. For the first round only 1 slot was taken. Now in the second round, another team wants to sign-up for the topic. This team will not be allowed since the deadline has already passed, even though slots are available. The solution to this problem is to let the instructor duplicate a topic with remaining slots and set the duplicate topic deadline to the latest deadline of all topics(default) or any date that s/he wants.&lt;br /&gt;
&amp;lt;li&amp;gt; The current display of topics is not intuitive in the sense that say, topic 1.1.1 was created after topic 2.1. Now the newly created topic (1.1.1) will be displayed after 2.1. Thus, we will display the topics sorted according topic identifier. If a topic is created without identifier it will be displayed before all the topics with identifiers, on the basis of &amp;quot;first created&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=='''Modified Files'''==&lt;br /&gt;
&lt;br /&gt;
1) app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
2) app/views/sign_up_sheet/_due_dates.html.erb&lt;br /&gt;
&lt;br /&gt;
3) app/helpers/sign_up_sheet_helper.rb&lt;br /&gt;
&lt;br /&gt;
4) app/views/layouts/application.html.erb&lt;br /&gt;
&lt;br /&gt;
5) app/views/sign_up_sheet/_all_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
6) app/views/sign_up_sheet/_add_signup_topics_staggered.html.erb&lt;br /&gt;
&lt;br /&gt;
7) app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
=='''Approach Taken To Implement Changes'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) For the first issue where the instructor was forced to enter due dates manually for each topic, we have added a checkbox against each topic in the assignment. The code for this was added in the due_dates.html.erb file. We have also provided a text box at the end for the instructor to enter the due dates for the selected topics. This text box is auto-populated with the latest deadline of all topics in that assignment, thereby saving the instructor the hassle of having to enter all the fields from scratch.&lt;br /&gt;
Then we have updated the save_topic_deadlines method in the sign_up_sheet_controller. This is the method called when we want to save the new deadline entered. &lt;br /&gt;
&lt;br /&gt;
The logic we have used to modify due_dates.html.erb:&lt;br /&gt;
&amp;lt;li&amp;gt;Add a checkbox tag before each topic.Also, if the checkbox is checked add the topic_id to an array &amp;quot;selected_ids[]&amp;quot;&lt;br /&gt;
[[File:Checkbox.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Provide a text box for the instructor to enter the new deadline for the selected topics.&lt;br /&gt;
[[File:Newdeadline.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; The default deadline for the textbook is set to the latest deadline among all the topics under the assignment. This is achieved by a helper method&lt;br /&gt;
[[File:GetLastestDeadline.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Call the save_topic_deadlines controller method with this array and entered date as parameters&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The logic used to modify save_topic_deadlines:&lt;br /&gt;
&amp;lt;li&amp;gt;Receive the array of selected topics and new deadline from the view&lt;br /&gt;
&amp;lt;li&amp;gt;Loop over each of the topic.  Assign the new deadline from the text box to the topic that has a selected checkbox &lt;br /&gt;
[[File:SaveNewDeadline.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Along with the check-boxes, we have also implemented shift+click for topic selection. Without it the instructor would have to select each topic individually. Thus with this, if the instructor selects a single topic, then presses shift and selects another topic, then all the intermediate topics will also be selected. This saves the instructor the hassle of going and explicitly selecting each topic.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This is achieved using a javascript written in the due_dates.html.erb.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The logic is:&lt;br /&gt;
&amp;lt;li&amp;gt; Get the checkbox selected by the instructor&lt;br /&gt;
&amp;lt;li&amp;gt; If shift key was pressed, get the last checked checkbox. &lt;br /&gt;
&amp;lt;li&amp;gt; Loop over each checkbox between the two checkboxes and change the status of each checkbox to selected.&lt;br /&gt;
[[File:Multiselect.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) We have also sorted the topics that are displayed for the assignment based on the topic_identifier. Managing a number of topics which are all out of order can be troublesome. Currently the topics are displayed in the order in which they were created which is not intuitive. Say the instructor first creates a topic with identifier &amp;quot;4.1&amp;quot;. Second s/he creates another topic with identifier &amp;quot;1.2&amp;quot;. Intuitively the newer topic must be displayed first. This is not the case in the current version. Thus we have added that.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This is achieved by adding a simple line to the views of the topics. (i.e add_signup_topics_staggered.html.erb and add_signup_topics.html.erb)&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;% @sign_up_topics = SignUpTopic.where(['assignment_id = ?', @assignment.id]).order(:topic_identifier) %&amp;gt;&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt; We use the inbuilt method .order with the parameter :topic_identifier. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) To implement &amp;quot;duplicate topic&amp;quot; button, we have added the button under the actions menu for each topic in the sign_up_sheet/_all_actions.html.erb view file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
We have taken the following design decisions regarding the duplication of topics:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-&amp;gt; If all the slots are available for the particular topic, then instead of duplicating a topic, the instructor can just extend the deadline and allow students to signup. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-&amp;gt; If no slots are available, then the instructor will first have to increase the number of slots and then try again.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
To implement this logic we have added a new method in the sign_up_sheet_controller.&amp;lt;br&amp;gt;&lt;br /&gt;
The method duplicates the topic using the following logic:&lt;br /&gt;
&amp;lt;li&amp;gt; Find the topic using the topic_id that we sent from the view.&lt;br /&gt;
&amp;lt;li&amp;gt; Get the available slots fo the topic.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the available slots, if topic is to be duplicated call assign_values method.&lt;br /&gt;
&amp;lt;li&amp;gt; In the assign_values method, we set the various parameters of the duplicate_topic (identifier, assignment_id, link, description etc) to their corresponding values from the original topic. &lt;br /&gt;
&amp;lt;li&amp;gt; The remaining parameters are assigned with some modifications. The name is saved with the word &amp;quot; copy&amp;quot; appended at the end. The number of max_choosers for this duplicate topic is equal to the available slots for the original topic.&lt;br /&gt;
&amp;lt;li&amp;gt; If the topic is not to be duplicated(if available_slots==0 or available_slots==max_choosers), error out and display appropriate error message.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Duplicate1.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Duplicate2.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Screenshots Of The Implemented Features '''===&lt;br /&gt;
1) Log in as Instructor. On clicking on 'Manage Content' a screen is rendered which lists the existing assignments.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2) Click on the edit assignment button for any assignment. For the purposes of this screenshots we will select &amp;quot;Madeup problem&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3) For the first feature we can see that we have added a checkbox against each topic. We can also see the &amp;quot;New deadlines for selected topics&amp;quot; text box. This text box automatically fills the boxes with corresponding values of the topic with the latest deadlines of all topics. All these are clearly visible in the screenshot below.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[File:Default_value_with_0_selections.png]]&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4) Since multi-select cannot be shown with images, we have shown it in the screen-cast. In the following couple of screenshots we have selected various topics and entered a new date for all of them only once. When we press the save button the dates entered in the text-box is applied to all the selected topics.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[File:Selected_topic_with_date_entered.png]]&lt;br /&gt;
----&lt;br /&gt;
[[File:Updated_duedates.png]]&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
5) Sorting. From the topics displayed in the image below we clearly see that they are sorted.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[File:Sorting.png]]&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
6) The first case is when we try to duplicate a topic with zero slots available. In this case too it will not duplicate a topic and display an error message.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[File:Dup_fail1.png]]&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
7) The second case is when we try to duplicate a topic with all slots available. It will not duplicate the topic and display an error message.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[File:Dup_fail2.png]]&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
8) Success!!&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
[[File:Success.png]]&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Testing'''==&lt;br /&gt;
We have tested these features in the video using the following steps:&amp;lt;br&amp;gt;&lt;br /&gt;
*Login as an instructor since these features will not be available for other user roles.&lt;br /&gt;
*Go to assignments and for a random assignment press the edit button. We have selected &amp;quot;Madeup problem&amp;quot; for our screenshots and videos.&lt;br /&gt;
*Go to topics. You can see the &amp;quot;duplicate topic&amp;quot; button in the action column for all topics. &lt;br /&gt;
*To duplicate a topic press the button for any topic.&lt;br /&gt;
*Depending on the conditions mentions above it will successfully duplicate or it will error out with the appropriate message.&lt;br /&gt;
*For the second feature click on the &amp;quot;Show start/due dates&amp;quot; button at the bottom.&lt;br /&gt;
*Select check-boxes against topics whose deadlines you want to change.&lt;br /&gt;
*To check shift-click functionality select one topic. Press shift and select another topic. All topics in the middle will also be selected.&lt;br /&gt;
*The text box at the bottom has the latest values of all the topics by default.&lt;br /&gt;
*Change the deadlines and click on &amp;quot;Save&amp;quot; button. &lt;br /&gt;
*The entered deadlines are saved for all topics selected.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Demo Video Link'''==&lt;br /&gt;
[https://youtu.be/2Y8LzHkhcJY Demo Video Link]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Additional Links'''==&lt;br /&gt;
[https://github.com/ghnguye2/expertiza.git Github Project Repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1118 Github Pull Request]&lt;br /&gt;
[https://youtu.be/8vkHx3Hqm8g Project Demo]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza NCSU]&lt;br /&gt;
=='''Team'''==&lt;br /&gt;
[mailto:ghnguye2@ncsu.edu Giang Nguyen]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114425</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114425"/>
		<updated>2017-12-04T17:06:41Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* UI Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id and they click on the '''edit''' button, then a error message will be displayed which will inform the user that his/her teammate is already editing the same review.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; color: black;&amp;quot;&lt;br /&gt;
|response_map.rb&lt;br /&gt;
|assignment.rb&lt;br /&gt;
|response_controller.rb&lt;br /&gt;
|review_mapping_controller.rb&lt;br /&gt;
|-&lt;br /&gt;
|/edit/_review_strategy.html.erb&lt;br /&gt;
|student_review/_responses.html.erb&lt;br /&gt;
|review_mapping/select_reviewer.html.haml&lt;br /&gt;
|response_controller_spec.rb&lt;br /&gt;
|-&lt;br /&gt;
|assignment_controller.rb&lt;br /&gt;
|student_review_controller.rb&lt;br /&gt;
|application_helper.rb&lt;br /&gt;
|access_helper.rb&lt;br /&gt;
|-&lt;br /&gt;
|assignment_team.rb&lt;br /&gt;
|/response/response.html.erb&lt;br /&gt;
|/review_mapping/_list_review_mapping.html.erb&lt;br /&gt;
|/student_review/_set_dynamic_review.html.erb&lt;br /&gt;
|-&lt;br /&gt;
|/student_review/list.html.erb&lt;br /&gt;
|config/routes.rb&lt;br /&gt;
|assignment_controller_spec.rb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Edge Cases===&lt;br /&gt;
Apart from the case explained above we have handled two edge cases. These cases are as explained below:&lt;br /&gt;
&lt;br /&gt;
'''Case 1:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
We are not allowing concurrent editing of reviews for teams. We are doing this by locking the response_map. Thus, when a team member is editing a review we lock the response using that team member's id. It can only be unlocked when the review has been saved. When locked the other team members can only view the review.&lt;br /&gt;
&lt;br /&gt;
'''Case 2:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
The beginning of a review is a special case since when the begin button is clicked a review form is only rendered. Nothing is saved. Since there is no response object linked to the review, we cannot lock anything. Thus, if this case is not handled all the teammates will be able to begin the review concurrently and the person who saves last will overwrite changes of all teammates. Thus, we lock the respnse_map. Now when one of the teammate begins the review ,and the other teammates try to begin too, they will get an error saying that the review is already being edited by someone else. &lt;br /&gt;
&lt;br /&gt;
'''Case 3:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
If a team member forgets to save or submit a review and has not closed the browser window, then we automatically save the review after an inactivity timeout of 20 mins thus unlocking it for the other team members to edit.&lt;br /&gt;
&lt;br /&gt;
'''Case 4:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
At a critical time, if a team is unable to contact the team member who has locked the review by closing the browser window without saving the review, the other team members can contact the instructor who has been provided an unlock button for such emergency situations. The instructor can now unlock that review and then the other team members can edit it.&lt;br /&gt;
&lt;br /&gt;
'''Case 5:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
An instructor can delete completed review if he/she decides to change the switch strategy for an assignment between tema reviews and individual reviews. If a user is editing a review at the instant when instructor is deleting the reviews, upon pressing the save review or submit review button, the user is redirected to the student_review/list.html.erb page&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:review_strategy.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''When Instructor assigns reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:instructor_assign_reviews.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan includes testing for the new team-based reviewing functionality that we have added. Our test plan includes the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Test the delete_reviews method to check whether it asks for a confirmation before deleting the reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Test the delete_reviews method to check whether it displays the success flash message on deletion of reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Test the action_allowed? method to check whether it denies certain action when the review is locked by a user other than current user.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Test the action_allowed? method to check whether it allows certain action when the review is locked by current user.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Test the reviewer_is_team_member method to check whether the current user is a member of the assignment review team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_strategy.png&amp;diff=114424</id>
		<title>File:Review strategy.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_strategy.png&amp;diff=114424"/>
		<updated>2017-12-04T17:03:11Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: uploaded a new version of &amp;amp;quot;File:Review strategy.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Instructor_assign_reviews.png&amp;diff=114423</id>
		<title>File:Instructor assign reviews.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Instructor_assign_reviews.png&amp;diff=114423"/>
		<updated>2017-12-04T17:02:51Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114395</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114395"/>
		<updated>2017-12-03T18:55:15Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id and they click on the '''edit''' button, then a error message will be displayed which will inform the user that his/her teammate is already editing the same review.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
6. student_review/_responses.html.erb&lt;br /&gt;
&lt;br /&gt;
7. review_mapping/select_reviewer.html.haml&lt;br /&gt;
&lt;br /&gt;
8. response_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Edge Cases===&lt;br /&gt;
Apart from the case explained above we have handled two edge cases. These cases are as explained below:&lt;br /&gt;
&lt;br /&gt;
'''Case 1:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
We are not allowing concurrent editing of reviews for teams. We are doing this by locking the response_map. Thus, when a team member is editing a review we do lock the response using that team member id&lt;br /&gt;
&lt;br /&gt;
'''Case 2:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
If a team member forgets to save or submit a review and has not closed the browser window, then we automatically save the review after a timeout of 20 mins thus unlocking it for the other team members to edit.&lt;br /&gt;
&lt;br /&gt;
'''Case 3:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
At a critical time, if a team is unable to contact the team member who has locked the review by closing the browser window without saving the review, the other team members can contact the instructor who has been provided an unlock button for such emergency situations. The instructor can now unlock that review and then the other team members can edit it.&lt;br /&gt;
&lt;br /&gt;
'''Case 4:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
An instructor can delete completed review if he/she decides to change the switch strategy for an assignment between tema reviews and individual reviews. If a user is editing a review at the instant when instructor is deleting the reviews, upon pressing the save review or submit review button, the user is redirected to the student_review/list.html.erb page&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select a new submission for your team to review.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan includes testing for the new team-based reviewing functionality that we have added. Our test plan includes the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
1. Test the delete_reviews method to check whether it asks for a confirmation before deleting the reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Test the delete_reviews method to check whether it displays the success flash message on deletion of reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Test the action_allowed? method to check whether it denies certain action when the review is locked by a user other than current user.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Test the action_allowed? method to check whether it allows certain action when the review is locked by current user.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Test the reviewer_is_team_member method to check whether the current user is a member of the assignment review team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114394</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114394"/>
		<updated>2017-12-03T18:53:41Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Edge Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id and they click on the '''edit''' button, then a error message will be displayed which will inform the user that his/her teammate is already editing the same review.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
6. student_review/_responses.html.erb&lt;br /&gt;
&lt;br /&gt;
7. review_mapping/select_reviewer.html.haml&lt;br /&gt;
&lt;br /&gt;
8. response_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Edge Cases===&lt;br /&gt;
Apart from the case explained above we have handled two edge cases. These cases are as explained below:&lt;br /&gt;
&lt;br /&gt;
'''Case 1:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
We are not allowing concurrent editing of reviews for teams. We are doing this by locking the response_map. Thus, when a team member is editing a review we do lock the response using that team member id&lt;br /&gt;
&lt;br /&gt;
'''Case 2:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
If a team member forgets to save or submit a review and has not closed the browser window, then we automatically save the review after a timeout of 20 mins thus unlocking it for the other team members to edit.&lt;br /&gt;
&lt;br /&gt;
'''Case 3:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
At a critical time, if a team is unable to contact the team member who has locked the review by closing the browser window without saving the review, the other team members can contact the instructor who has been provided an unlock button for such emergency situations. The instructor can now unlock that review and then the other team members can edit it.&lt;br /&gt;
&lt;br /&gt;
'''Case 4:&amp;lt;br&amp;gt;'''&lt;br /&gt;
Scenario:&amp;lt;br&amp;gt;&lt;br /&gt;
An instructor can delete completed review if he/she decides to change the switch strategy for an assignment between tema reviews and individual reviews. If a user is editing a review at the instant when instructor is deleting the reviews, upon pressing the save review or submit review button, the user is redirected to the student_review/list.html.erb page&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select a new submission for your team to review.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan includes testing for the new team-based reviewing functionality that we have added. Our test plan includes the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*new&lt;br /&gt;
1. Test the delete_reviews method to check whether it asks for a confirmation before deleting the reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Test the delete_reviews method to check whether it displays the success flash message on deletion of reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Test the action_allowed? method to check whether it denies certain action when the review is locked by a user other than current user.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Test the action_allowed? method to check whether it allows certain action when the review is locked by current user.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Test the reviewer_is_team_member method to check whether the current user is a member of the assignment review team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*old &lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114213</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114213"/>
		<updated>2017-12-02T07:40:33Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id then they will not see the ''edit'' button on the reviews page.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
6. student_review/_responses.html.erb&lt;br /&gt;
&lt;br /&gt;
7. review_mapping/select_reviewer.html.haml&lt;br /&gt;
&lt;br /&gt;
8. response_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select a new submission for your team to review.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan includes testing for the new team-based reviewing functionality that we have added. Our test plan includes the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*new&lt;br /&gt;
1. Test the delete_reviews method to check whether it asks for a confirmation before deleting the reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Test the delete_reviews method to check whether it displays the success flash message on deletion of reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Test the action_allowed? method to check whether it denies certain action when the review is locked by a user other than current user.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Test the action_allowed? method to check whether it allows certain action when the review is locked by current user.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Test the reviewer_is_team_member method to check whether the current user is a member of the assignment review team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*old &lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114209</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114209"/>
		<updated>2017-12-02T07:39:32Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id then they will not see the ''edit'' button on the reviews page.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
6. student_review/_responses.html.erb&lt;br /&gt;
&lt;br /&gt;
7. review_mapping/select_reviewer.html.haml&lt;br /&gt;
&lt;br /&gt;
8. response_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select a new submission for your team to review.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan includes testing for the new team-based reviewing functionality that we have added. Our test plan includes the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*new&lt;br /&gt;
1. Test the delete review method to check whether it asks for a confirmation before deleting the reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Test the delete review method to check whether it displays the success flash message on deletion of reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Test the action_allowed? method to check whether it denies certain action when the review is locked by a user other than current user.&amp;lt;br&amp;gt;&lt;br /&gt;
4. Test the action_allowed? method to check whether it allows certain action when the review is locked by current user.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Test the reviewer_is_team_member method to check whether the current user is a member of the assignment review team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*old &lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114205</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114205"/>
		<updated>2017-12-02T07:34:15Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id then they will not see the ''edit'' button on the reviews page.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
6. student_review/_responses.html.erb&lt;br /&gt;
&lt;br /&gt;
7. review_mapping/select_reviewer.html.haml&lt;br /&gt;
&lt;br /&gt;
8. response_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select a new submission for your team to review.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan includes testing for the new team-based reviewing functionality that we have added. Our test plan includes the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*new&lt;br /&gt;
1. Test the delete review method to check whether it asks for a confirmation before deleting the reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Test the delete review method to check whether it displays the success flash message on deletion of reviews.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Test the action_allowed? method to check whether it denies any action when the review is locked.&amp;lt;br&amp;gt;&lt;br /&gt;
4. 3. Test the action_allowed? method to check whether the current user is a member of the assignment review team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*old &lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114147</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114147"/>
		<updated>2017-12-02T02:26:33Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Files Involved */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id then they will not see the ''edit'' button on the reviews page.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
6. student_review/_responses.html.erb&lt;br /&gt;
&lt;br /&gt;
7. review_mapping/select_reviewer.html.haml&lt;br /&gt;
&lt;br /&gt;
8. response_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select a new submission for your team to review.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan will only deal with testing for the new team-based reviewing functionality we are adding. Our test plan will include the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114145</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114145"/>
		<updated>2017-12-02T01:58:55Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Design Principles to be Followed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id then they will not see the ''edit'' button on the reviews page.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
==Design Principles Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select a new submission for your team to review.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan will only deal with testing for the new team-based reviewing functionality we are adding. Our test plan will include the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114144</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=114144"/>
		<updated>2017-12-02T01:58:34Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers review are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Any member of a team should be able to select a review to be done by their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Team members should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The responses as well as the response_maps in the database should be deleted when the instructor decides to the change the 'Review Strategy' after the reviews have already started. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In summary, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Database Migrations==&lt;br /&gt;
We will add the following fields in existing models of the Expertiza.&lt;br /&gt;
&lt;br /&gt;
1. To assign team based reviewing attribute to the assignemnts a new boolean field reviewer_is_team was added to the with the default set to false.&lt;br /&gt;
&lt;br /&gt;
2. To create a common response for all the team members we added a team_id field to the ResponseMap model. This identifies the reviewer team.&lt;br /&gt;
&lt;br /&gt;
3. To prevent concurrent editing of the reviews by the team members we lock the response in the ResponseMap. This is check is based on the new is_locked field.&lt;br /&gt;
&lt;br /&gt;
4. To identify the user who has locked the review we have also added a locked_by field in the ResponseMap which carries the current_user.id.   &lt;br /&gt;
&lt;br /&gt;
[[File:Db_migr13.png|centre]]&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created. The default value for the checkbox is &amp;quot;false&amp;quot;. Thus, it will not break any existing functionality.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;!--#E17A0 Allow reviews to be set to be reviewed by a team --&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;reviewer_is_team&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;input name=&amp;quot;assignment_form[assignment][reviewer_is_team]&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;%= check_box_tag('assignment_form[assignment][reviewer_is_team]', 'true', @assignment_form.assignment.reviewer_is_team) %&amp;gt;&lt;br /&gt;
      &amp;lt;%= label_tag('assignment_form[assignment][reviewer_is_team]', 'Reviews are to be performed by teams.') %&amp;gt;&lt;br /&gt;
    &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. For this feature to work we must create correct mappings. In Expertiza, all reviewees are AssignmentTeams, even in a non-team assignment where each team consists of a single participant. However, with this project, ''reviewers'' can be either participants or teams. In our design we are creating only one ResponseMap per team, i.e if the &amp;quot;reviewer_is_team&amp;quot; is set by the instructor, the ResponseMap created will have the reviewer_id as the participant_id of the requesting student and the team_id as the id of requesting students team in that assignment. Now to map this single response to all students in a team, we changed the strategy which returns response_mappings, in the &amp;quot;student_review_controller&amp;quot;, for a particular reviewer. If the assignment has team_reviewers, then we find the responses by &amp;quot;team_id&amp;quot;, and if there are no team reviewers for the assignment then we return responses by matching the &amp;quot;reviewer_id&amp;quot;. Thus, if our mappings are created correctly, then the entire team will be directed to a single response_map and thus a single response irrespective of who requests the review. Thus, any of the team members will be able to request reviews as as the mappings will created with the team_id. The reason for us to not set the &amp;quot;reviewer_id&amp;quot; null or 0 for team reviewers is that, some of the functionalities like number of reviews, scores are all mapped to a single participant. Thus, if that is set that to any value, we will have to define all new methods for team reviewers. But, now we can use all those functions on our response and then make that same response object available to all members of the team. By doing this, we are neither creating redundant maps and nor are we defining new methods for the same functions. The code snippet below shows our new strategy to find the responses for a particular reviewer.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    # E17A0 If an assignment is to be reviewed by a team, select it by team_id otherwise by reviewer_id&lt;br /&gt;
    if @reviewer_team_info[:reviewer_is_team_member]&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(team_id: @reviewer_team_info[:team_id])&lt;br /&gt;
      @team = Team.find(@reviewer_team_info[:team_id])&lt;br /&gt;
    else&lt;br /&gt;
      @review_mappings = ReviewResponseMap.where(reviewer_id: @participant.id)&lt;br /&gt;
    end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. This is an important feature since if we allow teammates to edit reviews concurrently, each of them will overwrite each other's changes. We have handled this by using the ''is_locked'' and ''locked_by'' field in the response_map table. Using these fields, we will lock the response for the current_user. Thus, when one teammate is editing, the response is locked and that members id is stored in the ''locked_by'' field. Now for other users we will check ''locked_by'' field. If it does not match their id then they will not see the ''edit'' button on the reviews page.&lt;br /&gt;
This response is then unlocked when the current_user saves the response. The methods for locking and unlocking the response are defined in the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  #E17A0 Lock response&lt;br /&gt;
  def lock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(Response.find(response_id).map_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; true, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  &lt;br /&gt;
  #E17A0 Unlock Response&lt;br /&gt;
  def unlock_response_map response_id&lt;br /&gt;
    review_response_map = ReviewResponseMap.find_by_id(response_id)&lt;br /&gt;
    unless review_response_map.nil?&lt;br /&gt;
      ReviewResponseMap.update(review_response_map.id, :is_locked =&amp;gt; false, :locked_by =&amp;gt; current_user.id)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4/5. Changes 4 and 5 are both database migrations. Thus, we just add these fields in their respective tables.&lt;br /&gt;
&lt;br /&gt;
6. This feature is provided to handle a rare edge case. Say that the instructor decides to change the review strategy after the reviews have already started. Now, the format of the response_maps already created will not match the response_maps that will be created after the strategy change. Thus, if the instructor wants to change the strategy, s/he can delete all reviews already done, and then instruct students to start over. The ''delete_reviews'' method is defined in the ''assignment'' model. Our method deletes all the response_maps as well as all the response objects created.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  def delete_reviews&lt;br /&gt;
    responsemap = ResponseMap.where(reviewed_object_id: self.id, type: 'ReviewResponseMap')&lt;br /&gt;
    response = Response.where(map_id: responsemap.ids)&lt;br /&gt;
    response.each { |r| Answer.destroy_all(response_id: r.id)}&lt;br /&gt;
    Response.destroy_all(map_id: responsemap.ids)&lt;br /&gt;
    ResponseMap.destroy_all(id: responsemap.ids)&lt;br /&gt;
  end&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;. This assignment also has only teams. No students can participate as an individual. Thus, when a participant is added to the assignment, s/he will be added as a single member team. Thus, in the diagram above, the participant is a single member team. &lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Select a new submission for your team to review.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
The Assignments functions; including creation, updating, saving and modifying methods have already been tested, and our test plan will only deal with testing for the new team-based reviewing functionality we are adding. Our test plan will include the following test methods:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112900</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112900"/>
		<updated>2017-11-12T23:33:33Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously. We can use ActiveRecord record locking method to lock the current record being edited.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team? should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created.&amp;lt;br&amp;gt;&lt;br /&gt;
2. This change will be made in the &amp;quot;response_map.rb&amp;quot; model. This model creates all the mapping between the reviewers and reviewees. In the new implementation of expertiza, the &amp;quot;reviewees&amp;quot; can no longer be participants. All reviewees will be teams, although the team can have a single participant. Still, &amp;quot;reviewers&amp;quot; can still be either participants or teams. Thus, we still need to create a proper mapping between reviewers and reviewees for our new feature.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. If a review is being is being edited, that review should not be edited by other team members. In case of individual reviewers, there won't be any other reviewers. Thus, once a review is being edited, we can lock the record, irrespective of reviewers are teams or individual participants.  We will use ActiveRecord::Base#lock! method to lock one record by id. &lt;br /&gt;
In the &amp;quot;/app/view/student_review/_responses.html.erb&amp;quot; view, when the student clicks on &amp;quot;edit&amp;quot; button, the reviewer_id will be passed to the edit method in response_controller. Thus, in the &amp;quot;edit&amp;quot; method in response_controller, we find the response record being edited and then we can lock it using the following lines of code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
@response = Response.find(params[:id])&lt;br /&gt;
@response.lock!&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the record is locked, it can only be changed by the person who is currently working on it. Once the person &amp;quot;saves&amp;quot; the review, the record will be unlocked. This unlocking will be done in the &amp;quot;saving&amp;quot; method of the response_controller. We can unlock a &amp;quot;.lock!&amp;quot; record by using the &amp;quot;.save!&amp;quot; method. Once unlocked the other team members will be able to edit this record. Pseudocode:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
@response = Response.find(params[:id])&lt;br /&gt;
@response.save!&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4.  We will be adding the reviewer_is_team? to the Assignments model (assignment.rb) instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round. Thus a column will have to added to multiple places unnecessarily which is not a good design decision. Hence our solution incorporates the addition of reviewer_is_team? to the Assignment model.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
For the complete testing of the new controller methods to check the functionality of reviewing as a team we have to test:&amp;lt;br&amp;gt;&lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112899</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112899"/>
		<updated>2017-11-12T23:33:14Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously. We can use ActiveRecord record locking method to lock the current record being edited.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team? should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Approach==&lt;br /&gt;
1. The first change is a simple view change. The checkbox will added in &amp;quot;assignments/edit/_review_strategy.html.erb&amp;quot;. The checkbox value will be passed to the response_controller and depending on the value of the checkbox, the response_map will be created.&amp;lt;br&amp;gt;&lt;br /&gt;
2. This change will be made in the &amp;quot;response_map.rb&amp;quot; model. This model creates all the mapping between the reviewers and reviewees. In the new implementation of expertiza, the &amp;quot;reviewees&amp;quot; can no longer be participants. All reviewees will be teams, although the team can have a single participant. Still, &amp;quot;reviewers&amp;quot; can still be either participants or teams. Thus, we still need to create a proper mapping between reviewers and reviewees for our new feature.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. If a review is being is being edited, that review should not be edited by other team members. In case of individual reviewers, there won't be any other reviewers. Thus, once a review is being edited, we can lock the record, irrespective of reviewers are teams or individual participants.  We will use ActiveRecord::Base#lock! method to lock one record by id. &lt;br /&gt;
In the &amp;quot;/app/view/student_review/_responses.html.erb&amp;quot; view, when the student clicks on &amp;quot;edit&amp;quot; button, the reviewer_id will be passed to the edit method in response_controller. Thus, in the &amp;quot;edit&amp;quot; method in response_controller, we find the response record being edited and then we can lock it using the following lines of code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
@response = Response.find(params[:id])&lt;br /&gt;
@response.lock!&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the record is locked, it can only be changed by the person who is currently working on it. Once the person &amp;quot;saves&amp;quot; the review, the record will be unlocked. This unlocking will be done in the &amp;quot;saving&amp;quot; method of the response_controller. We can unlock a &amp;quot;.lock!&amp;quot; record by using the &amp;quot;.save!&amp;quot; method. Once unlocked the other team members will be able to edit this record. Pseudocode:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
@response = Response.find(params[:id])&lt;br /&gt;
@response.save!&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4.  We will be adding the reviewer_is_team? to the Assignments model (assignment.rb) instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round. Thus a column will have to added to multiple places unnecessarily which is not a good design decision. Hence our solution incorporates the addition of reviewer_is_team? to the Assignment model.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. assignment.rb&lt;br /&gt;
&lt;br /&gt;
3. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
5. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UC_new.png|none]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
For the complete testing of the new controller methods to check the functionality of reviewing as a team we have to test:&lt;br /&gt;
1. If the review for the Assignment will have team id instead of the participant id in Response Map.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. If for an assignment the instructor can successfully apply the reviewer_is_team? attribute.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. If while a review is being edited by a team member, the other team members should not be given access to edit the same review.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. If the team based reviewing functionality works in flow with the student based reviewing.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112849</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112849"/>
		<updated>2017-11-12T22:44:17Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Use Case */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously. We can use ActiveRecord record locking method to lock the current record being edited. This will work the same way in individual and team reviews. One can also use ActiveRecord::Base#lock! method to lock one record by id. This may be better if you don't need to lock every row. Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Account.transaction do&lt;br /&gt;
  # select * from accounts where ...&lt;br /&gt;
  accounts = Account.where(...)&lt;br /&gt;
  account1 = accounts.detect { |account| ... }&lt;br /&gt;
  account2 = accounts.detect { |account| ... }&lt;br /&gt;
  # select * from accounts where id=? for update&lt;br /&gt;
  account1.lock!&lt;br /&gt;
  account2.lock!&lt;br /&gt;
  account1.balance -= 100&lt;br /&gt;
  account1.save!&lt;br /&gt;
  account2.balance += 100&lt;br /&gt;
  account2.save!&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam. We will be adding the reviewer_is_team? to the Assignments table instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round. Thus a column will have to added to multiple places unncessarily which is not a good design decision. Hence our solution incorporates the addition of reviewer_is_team? to the Assignments table.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
3. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UML_new.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up an assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and the number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112848</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112848"/>
		<updated>2017-11-12T22:43:14Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Use Case */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously. We can use ActiveRecord record locking method to lock the current record being edited. This will work the same way in individual and team reviews. One can also use ActiveRecord::Base#lock! method to lock one record by id. This may be better if you don't need to lock every row. Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Account.transaction do&lt;br /&gt;
  # select * from accounts where ...&lt;br /&gt;
  accounts = Account.where(...)&lt;br /&gt;
  account1 = accounts.detect { |account| ... }&lt;br /&gt;
  account2 = accounts.detect { |account| ... }&lt;br /&gt;
  # select * from accounts where id=? for update&lt;br /&gt;
  account1.lock!&lt;br /&gt;
  account2.lock!&lt;br /&gt;
  account1.balance -= 100&lt;br /&gt;
  account1.save!&lt;br /&gt;
  account2.balance += 100&lt;br /&gt;
  account2.save!&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam. We will be adding the reviewer_is_team? to the Assignments table instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round. Thus a column will have to added to multiple places unncessarily which is not a good design decision. Hence our solution incorporates the addition of reviewer_is_team? to the Assignments table.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
3. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:UML_new.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:UML_new.png&amp;diff=112845</id>
		<title>File:UML new.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:UML_new.png&amp;diff=112845"/>
		<updated>2017-11-12T22:41:40Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112843</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112843"/>
		<updated>2017-11-12T22:38:31Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Design Principles to be Followed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously. We can use ActiveRecord record locking method to lock the current record being edited. This will work the same way in individual and team reviews. One can also use ActiveRecord::Base#lock! method to lock one record by id. This may be better if you don't need to lock every row. Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Account.transaction do&lt;br /&gt;
  # select * from accounts where ...&lt;br /&gt;
  accounts = Account.where(...)&lt;br /&gt;
  account1 = accounts.detect { |account| ... }&lt;br /&gt;
  account2 = accounts.detect { |account| ... }&lt;br /&gt;
  # select * from accounts where id=? for update&lt;br /&gt;
  account1.lock!&lt;br /&gt;
  account2.lock!&lt;br /&gt;
  account1.balance -= 100&lt;br /&gt;
  account1.save!&lt;br /&gt;
  account2.balance += 100&lt;br /&gt;
  account2.save!&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam. We will be adding the reviewer_is_team? to the Assignments table instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round. Thus a column will have to added to multiple places unncessarily which is not a good design decision. Hence our solution incorporates the addition of reviewer_is_team? to the Assignments table.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
3. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view, and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Use_Case_(1).jpg|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112842</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112842"/>
		<updated>2017-11-12T22:38:06Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Changes to be Implemented */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously. We can use ActiveRecord record locking method to lock the current record being edited. This will work the same way in individual and team reviews. One can also use ActiveRecord::Base#lock! method to lock one record by id. This may be better if you don't need to lock every row. Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Account.transaction do&lt;br /&gt;
  # select * from accounts where ...&lt;br /&gt;
  accounts = Account.where(...)&lt;br /&gt;
  account1 = accounts.detect { |account| ... }&lt;br /&gt;
  account2 = accounts.detect { |account| ... }&lt;br /&gt;
  # select * from accounts where id=? for update&lt;br /&gt;
  account1.lock!&lt;br /&gt;
  account2.lock!&lt;br /&gt;
  account1.balance -= 100&lt;br /&gt;
  account1.save!&lt;br /&gt;
  account2.balance += 100&lt;br /&gt;
  account2.save!&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam. We will be adding the reviewer_is_team? to the Assignments table instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round. Thus a column will have to added to multiple places unncessarily which is not a good design decision. Hence our solution incorporates the addition of reviewer_is_team? to the Assignments table.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
3. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide of a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Use_Case_(1).jpg|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112841</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112841"/>
		<updated>2017-11-12T22:37:09Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Changes to be Implemented */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously. We can use ActiveRecord record locking method to lock the current record being edited. This will work the same way in individual and team reviews. One can also use ActiveRecord::Base#lock! method to lock one record by id. This may be better if you don't need to lock every row. Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Account.transaction do&lt;br /&gt;
  # select * from accounts where ...&lt;br /&gt;
  accounts = Account.where(...)&lt;br /&gt;
  account1 = accounts.detect { |account| ... }&lt;br /&gt;
  account2 = accounts.detect { |account| ... }&lt;br /&gt;
  # select * from accounts where id=? for update&lt;br /&gt;
  account1.lock!&lt;br /&gt;
  account2.lock!&lt;br /&gt;
  account1.balance -= 100&lt;br /&gt;
  account1.save!&lt;br /&gt;
  account2.balance += 100&lt;br /&gt;
  account2.save!&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam. We will be adding the reviewer_is_team? to the Assignments table instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round. Thus a column will have to added to multiple places unncessarily which is not a good design decision. Hence our solution incorporates the addition of reviewer_is_team? to the Assignments table.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
3. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide of a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Use_Case_(1).jpg|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112840</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112840"/>
		<updated>2017-11-12T22:30:40Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Changes to be Implemented */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously. We can use ActiveRecord record locking method to lock the current record being edited. This will work the same way in individual and team reviews. One can also use ActiveRecord::Base#lock! method to lock one record by id. This may be better if you don't need to lock every row. Example:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Account.transaction do&lt;br /&gt;
  # select * from accounts where ...&lt;br /&gt;
  accounts = Account.where(...)&lt;br /&gt;
  account1 = accounts.detect { |account| ... }&lt;br /&gt;
  account2 = accounts.detect { |account| ... }&lt;br /&gt;
  # select * from accounts where id=? for update&lt;br /&gt;
  account1.lock!&lt;br /&gt;
  account2.lock!&lt;br /&gt;
  account1.balance -= 100&lt;br /&gt;
  account1.save!&lt;br /&gt;
  account2.balance += 100&lt;br /&gt;
  account2.save!&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam. We will be adding the reviewer_is_team? to the Assignments table instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
3. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide of a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Use_Case_(1).jpg|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112839</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=112839"/>
		<updated>2017-11-12T22:22:42Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Changes to be Implemented */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review. On the flip-side, it may be difficult sometimes for all team members to meet to perform reviews, and this may either delay reviews or curtail them. Ultimately, it is felt that the advantages of team-based reviews far outweigh any inherent shortcomings.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added to the Assignments table to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&lt;br /&gt;
(We will be adding the reviewer_is_team? to the Assignments table instead of the Response Map as suggested in the project requirements. This is because if the checking is done on the Response Map, then it will have to be updated for every response and round.)&lt;br /&gt;
&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Files Involved==&lt;br /&gt;
1. response_map.rb&lt;br /&gt;
&lt;br /&gt;
2. response_controller.rb&lt;br /&gt;
&lt;br /&gt;
3. review_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
4. assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Polymorphism - We will use polymorphism to provide of a single interface to entities of different types. In Expertiza, individual and team-based reviewers will share one single interface.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use Case==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Use_Case_(1).jpg|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Name: Teams submitting reviews for assignment or topic&lt;br /&gt;
&lt;br /&gt;
2. Actor: Student (as member of a team)&lt;br /&gt;
&lt;br /&gt;
3. Other Participants: Team Members&lt;br /&gt;
&lt;br /&gt;
4. Precondition: Instructor has set up assignment with review strategy as &amp;quot;Team Reviews&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
5. Primary Sequence:&lt;br /&gt;
&amp;lt;li&amp;gt; Log in to Expertiza.&lt;br /&gt;
&amp;lt;li&amp;gt; Select an assignment.&lt;br /&gt;
&amp;lt;li&amp;gt; Select &amp;quot;other's work&amp;quot;.&lt;br /&gt;
&amp;lt;li&amp;gt; The student can request a review for the team from here.&lt;br /&gt;
&amp;lt;li&amp;gt; Depending on the number of reviews allowed and number of reviews already performed by the team, they will be allotted a new review&lt;br /&gt;
&amp;lt;li&amp;gt; Begin the review.&lt;br /&gt;
&amp;lt;li&amp;gt; Only one member of the team can edit the review at an given time.&lt;br /&gt;
&amp;lt;li&amp;gt; All restrictions that apply to individual reviewers, also apply to teams (e.g. like a individual reviewer, a team also cannot have more than 2 outstanding incomplete reviews).&lt;br /&gt;
&amp;lt;li&amp;gt; Complete the review and Click Submit.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
1. Currently there is no team reviewing in Expertiza. Thus, we will provide a check-box, in the review strategy tab of edit assignments, for the instructor. Checking this box will set the reviewers to teams, rather than individual participants.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Current Implementation is as follows:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Current_implementation1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''New Implementation will be as shown below:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_syn_chkbox.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. By default, the reviewers will be individual students. When they request reviews, they request reviews for themselves. If the instructor changes the reviewers to teams, then each participant (who is member of some team), will request reviews on behalf of the entire team.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has individual reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Student_review1.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''If the assignment has team reviews:'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div  style=&amp;quot;padding: 0px 0px 0px 25px&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Improved_review_req.png|none|frame]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Team Information==&lt;br /&gt;
[mailto:ashah22@ncsu.edu Aditya Shah]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:dkalro@ncsu.edu Deepak Kalro]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111920</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111920"/>
		<updated>2017-11-06T01:47:24Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added in the Response Map to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed==&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Polymorphism -&lt;br /&gt;
4. Inheritance -&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111919</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111919"/>
		<updated>2017-11-06T01:47:08Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Motivation==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added in the Response Map to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;br /&gt;
&lt;br /&gt;
==Design Principles to be Followed===&lt;br /&gt;
1. MVC - The project is implemented in Ruby on Rails that uses MVC architecture. It separates an application’s data model, user interface, and control logic into three distinct components (model, view and controller, respectively).&amp;lt;br&amp;gt;&lt;br /&gt;
2. Dry Principle - We are trying to reuse the existing functionalities in Expertiza, thus avoiding code duplication. Whenever possible, code modification based on the existing classes, controllers, or tables will be done instead of creating the new one.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Polymorphism -&lt;br /&gt;
4. Inheritance -&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111917</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111917"/>
		<updated>2017-11-06T01:39:41Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Purpose==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review.&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added in the Response Map to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111916</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111916"/>
		<updated>2017-11-06T01:39:20Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Changes to be Implemented */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Purpose==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team?  should be added in the Response Map to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111915</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111915"/>
		<updated>2017-11-06T01:38:53Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Details to changed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Purpose==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Changes to be Implemented==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team  should be added in the Response Map to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111914</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111914"/>
		<updated>2017-11-06T01:32:42Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Introduction'''===&lt;br /&gt;
==Purpose==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Details to changed==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team  should be added in the Response Map to determine whether the reviewer is an AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally, functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111913</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111913"/>
		<updated>2017-11-06T01:31:51Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Details to changed= */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Introduction===&lt;br /&gt;
=='''Purpose'''==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
=='''Details to changed'''==&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team  should be added in the Response Map to determine whether the reviewer is a AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111912</id>
		<title>CSC/ECE 517 Fall 2017/E17A0 Team-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E17A0_Team-based_reviewing&amp;diff=111912"/>
		<updated>2017-11-06T01:31:35Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Introduction===&lt;br /&gt;
=='''Purpose'''==&lt;br /&gt;
Traditionally, only single individuals have been able to perform assignment reviews in Expertiza. Over the years, it has been observed that it would be more desirable if assignment setters could define how a specific assignment could be reviewed. One of the ways will be by an individual, and a new way of reviews will be by teams. The same teams formed for the assignment would be able to participate in reviewing peer assignments.&lt;br /&gt;
&lt;br /&gt;
The benefits of peers reviews are numerous, and there is an additional benefit of reviews by teams. In general, we may be getting to a point where traditional individual reviews are becoming ineffective, often missing nuances in an assignments details and concepts. It is a general belief that team-based reviews will address this, often pooling together resources from multiple reviewers working as a team to form a one cohesive and often comprehensive review.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=='''Issues to be fixed'''==&lt;br /&gt;
=='''Details to changed'''===&lt;br /&gt;
1. A new button to select Reviewers as a team will be provided at the Assignments Edit page in the Review Strategy tab for the instructors.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Student participants of the assignment should be able to ask for a review for their team.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Participants of the team should not be allowed to edit a review simultaneously.&amp;lt;br&amp;gt;&lt;br /&gt;
4. A new field reviewer_is_team  should be added in the Response Map to determine whether the reviewer is a AssignmentParticipant or an AssignmentTeam.&amp;lt;br&amp;gt;&lt;br /&gt;
5. Finally functionality should be provided to allow Team reviews by connecting everything as mentioned above.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
Testing of the new controller methods to check whether all the functionality of reviewing as a participant is also working for the scenario when reviewing is done by a team.&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1752_Refactor_assignments_controller&amp;diff=111448</id>
		<title>CSC/ECE 517 Fall 2017/E1752 Refactor assignments controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1752_Refactor_assignments_controller&amp;diff=111448"/>
		<updated>2017-11-02T20:47:16Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Testing results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Expertiza is an open source webapp built on Ruby on Rails stack. It provides a platform to students with various features like peer-reviewing projects, submitting work, form teams, viewing grades etc. The project is being built and maintained by students and faculty at NCSU.&lt;br /&gt;
&lt;br /&gt;
==About Assignments Controller==&lt;br /&gt;
The file assignments_controller.rb handles the logic behind Expertiza assignments and enables the creation and managements of assignments by instructional staff. Besides regular CRUD operations, it also integrates multiple parts of the expertiza components, such as users of different authorizations and priorities, corresponding courses associated with the assignment, due date and so on. Therefore, further unit and integration tests are required to guarantee that these operations work as expected. And also refactoring on the code in this controller is needed to make it more readable and reduce the complexity at the same time. Our tasks are based on the motivations above.&lt;br /&gt;
&lt;br /&gt;
==About Software Testing==&lt;br /&gt;
Software testing is a process of examining a program or application with the intent of finding the software bugs. In software developemnt, it is usually defined as the process of validating and verifying that a software program or application or product meets the specified business and technical requirements.&lt;br /&gt;
&lt;br /&gt;
Additionaly, software is tested to:&lt;br /&gt;
* Detect and rectify and errors made during the development phase,&lt;br /&gt;
* Ensure customer satisfaction in the application,&lt;br /&gt;
* Ensure the quality of the software product and&lt;br /&gt;
* Optimize the performance of the system.&lt;br /&gt;
&lt;br /&gt;
Our project is guided by the Test-First Development principle. We write passing and failing tests for use cases of the assignment controller, and then turn to refactor the code. During the project, we implement the tests and refactor in Agile methodology with our mentor Zhewei through weekly delivery.&lt;br /&gt;
&lt;br /&gt;
===RSpec Testing===&lt;br /&gt;
RSpec is a 'Domain Specific Language' (DSL) testing tool written in Ruby to test Ruby code. It is a behavior-driven development (BDD) framework which is extensively used in the production applications. The basic idea behind this concept is that of Test Driven Development(TDD) where the tests are written first and the development is based on writing just enough code that will fulfill those tests followed by refactoring. &lt;br /&gt;
&lt;br /&gt;
The Expertiza project makes extensive use of RSpec to test the various components of the application. Tests of our tasks are in the code file: spec/controllers/assignments_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Testing actions perfomed===&lt;br /&gt;
* Creating new tests for each method, &lt;br /&gt;
* Testing the each method and making sure the tests pass.&lt;br /&gt;
&lt;br /&gt;
===Testing results===&lt;br /&gt;
All 22 tests were passed with zero failure on the final version of project code. Please refer to our detail project demo to see the testing in action.&lt;br /&gt;
&lt;br /&gt;
==About Refactoring==&lt;br /&gt;
Refactoring of computer software or code is the process of restructuring existing software code without changing its external behavior or performance of the software application. Refactoring improves nonfunctional attributes of the software. Refactoring aids in code readability and keeps the code well maintained and easy to understand.&lt;br /&gt;
&lt;br /&gt;
===Refactoring actions perfomed===&lt;br /&gt;
* Replace magic numbers in deadline_type_id by constants with reasonable names;&lt;br /&gt;
* Formatting the code for readability and convention;&lt;br /&gt;
* Split large chunks of code in to smaller manageable chunks;&lt;br /&gt;
* Extract simpler and specific methods out of blocks of codes to remove code duplications using DRY principle;&lt;br /&gt;
* Rename existing methods with meaningful names for better readability without change on external functionality.&lt;br /&gt;
&lt;br /&gt;
===Refactor edit method===&lt;br /&gt;
Actions: code block split, method extraction and add meaningful constants&lt;br /&gt;
&lt;br /&gt;
Original&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def edit&lt;br /&gt;
    # give an error message is instructor have not set the time zone.&lt;br /&gt;
    if current_user.timezonepref.nil?&lt;br /&gt;
      flash.now[:error] = &amp;quot;You have not specified your preferred timezone yet. Please do this before you set up the deadlines.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
    @assignment_form = AssignmentForm.create_form_object(params[:id])&lt;br /&gt;
    @user = current_user&lt;br /&gt;
&lt;br /&gt;
    @assignment_questionnaires = AssignmentQuestionnaire.where(assignment_id: params[:id])&lt;br /&gt;
    @due_date_all = AssignmentDueDate.where(parent_id: params[:id])&lt;br /&gt;
    @reviewvarycheck = false&lt;br /&gt;
    @due_date_nameurl_notempty = false&lt;br /&gt;
    @due_date_nameurl_notempty_checkbox = false&lt;br /&gt;
    @metareview_allowed = false&lt;br /&gt;
    @metareview_allowed_checkbox = false&lt;br /&gt;
    @signup_allowed = false&lt;br /&gt;
    @signup_allowed_checkbox = false&lt;br /&gt;
    @drop_topic_allowed = false&lt;br /&gt;
    @drop_topic_allowed_checkbox = false&lt;br /&gt;
    @team_formation_allowed = false&lt;br /&gt;
    @team_formation_allowed_checkbox = false&lt;br /&gt;
    @participants_count = @assignment_form.assignment.participants.size&lt;br /&gt;
    @teams_count = @assignment_form.assignment.teams.size&lt;br /&gt;
&lt;br /&gt;
    if @assignment_form.assignment.staggered_deadline == true&lt;br /&gt;
      @review_rounds = @assignment_form.assignment.num_review_rounds&lt;br /&gt;
      @assignment_submission_due_dates = @due_date_all.select {|due_date| due_date.deadline_type_id == 1 }&lt;br /&gt;
      @assignment_review_due_dates = @due_date_all.select {|due_date| due_date.deadline_type_id == 2 }&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # Check if name and url in database is empty before webpage displays&lt;br /&gt;
    @due_date_all.each do |dd|&lt;br /&gt;
      @due_date_nameurl_notempty = is_due_date_nameurl_notempty(dd)&lt;br /&gt;
      @due_date_nameurl_notempty_checkbox = @due_date_nameurl_notempty&lt;br /&gt;
      @metareview_allowed = is_meta_review_allowed?(dd)&lt;br /&gt;
      @drop_topic_allowed = is_drop_topic_allowed?(dd)&lt;br /&gt;
      @signup_allowed = is_signup_allowed?(dd)&lt;br /&gt;
      @team_formation_allowed = is_team_formation_allowed?(dd)&lt;br /&gt;
&lt;br /&gt;
      if dd.due_at.present?&lt;br /&gt;
        dd.due_at = dd.due_at.to_s.in_time_zone(current_user.timezonepref)&lt;br /&gt;
      end&lt;br /&gt;
      if  @due_date_nameurl_notempty &amp;amp;&amp;amp; @due_date_nameurl_notempty_checkbox &amp;amp;&amp;amp;&lt;br /&gt;
          (@metareview_allowed || @drop_topic_allowed || @signup_allowed || @team_formation_allowed)&lt;br /&gt;
        break&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    @assignment_questionnaires.each do |aq|&lt;br /&gt;
      unless aq.used_in_round.nil?&lt;br /&gt;
        @reviewvarycheck = 1&lt;br /&gt;
        break&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    @due_date_all = update_nil_dd_deadline_name(@due_date_all)&lt;br /&gt;
    @due_date_all = update_nil_dd_description_url(@due_date_all)&lt;br /&gt;
&lt;br /&gt;
    # only when instructor does not assign rubrics and in assignment edit page will show this error message.&lt;br /&gt;
    if !empty_rubrics_list.empty? &amp;amp;&amp;amp; request.original_fullpath == &amp;quot;/assignments/#{@assignment_form.assignment.id}/edit&amp;quot;&lt;br /&gt;
      rubrics_needed = needed_rubrics(empty_rubrics_list)&lt;br /&gt;
      flash.now[:error] = &amp;quot;You did not specify all the necessary rubrics. You need &amp;quot; + rubrics_needed +&lt;br /&gt;
          &amp;quot; of assignment &amp;lt;b&amp;gt;#{@assignment_form.assignment.name}&amp;lt;/b&amp;gt; before saving the assignment. You can assign rubrics &amp;lt;a id='go_to_tabs2' style='color: blue;'&amp;gt;here&amp;lt;/a&amp;gt;.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if @assignment_form.assignment.directory_path.nil? || @assignment_form.assignment.directory_path.empty?&lt;br /&gt;
      flash.now[:error] = &amp;quot;You did not specify your submission directory.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After refactoring&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def edit&lt;br /&gt;
    handle_current_user_timezonepref_nil&lt;br /&gt;
&lt;br /&gt;
    edit_params_setting&lt;br /&gt;
&lt;br /&gt;
    assignment_form_assignment_staggered_deadline?&lt;br /&gt;
&lt;br /&gt;
    @due_date_all.each do |dd|&lt;br /&gt;
      check_due_date_nameurl_notempty(dd)&lt;br /&gt;
&lt;br /&gt;
      adjust_timezone_when_due_date_present(dd)&lt;br /&gt;
&lt;br /&gt;
      break if validate_due_date&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    check_assignment_questionnaires_usage&lt;br /&gt;
&lt;br /&gt;
    @due_date_all = update_nil_dd_deadline_name(@due_date_all)&lt;br /&gt;
    @due_date_all = update_nil_dd_description_url(@due_date_all)&lt;br /&gt;
&lt;br /&gt;
    # only when instructor does not assign rubrics and in assignment edit page will show this error message.&lt;br /&gt;
    handle_rubrics_not_assigned_case&lt;br /&gt;
&lt;br /&gt;
    handle_assignment_directory_path_nonexist_case&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here we first grouped the blocks of code according to their similarity of functions. Then we extracted simpler methods from each code block to make it more readable and reduce the complexity and coupling. It is obvious that after refactoring, this part is simpler and easier to maintain. In addition, we also replaced the magic numbers by constants according to the deadline type.&lt;br /&gt;
&lt;br /&gt;
===Refactor update method===&lt;br /&gt;
Actions: split long code block and extract specific methods&lt;br /&gt;
&lt;br /&gt;
Original&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update&lt;br /&gt;
    unless params.key?(:assignment_form)&lt;br /&gt;
      @assignment = Assignment.find(params[:id])&lt;br /&gt;
      @assignment.course_id = params[:course_id]&lt;br /&gt;
      if @assignment.save&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved.'&lt;br /&gt;
        redirect_to list_tree_display_index_path&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment.errors.full_messages.join(' ')}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path @assignment.id&lt;br /&gt;
      end&lt;br /&gt;
      return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    @assignment_form = AssignmentForm.create_form_object(params[:id])&lt;br /&gt;
    @assignment_form.assignment.instructor ||= current_user&lt;br /&gt;
    params[:assignment_form][:assignment_questionnaire].reject! do |q|&lt;br /&gt;
      q[:questionnaire_id].empty?&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if current_user.timezonepref.nil?&lt;br /&gt;
      parent_id = current_user.parent_id&lt;br /&gt;
      parent_timezone = User.find(parent_id).timezonepref&lt;br /&gt;
      flash[:error] = &amp;quot;We strongly suggest that instructors specify their preferred timezone to guarantee the correct display time. For now we assume you are in &amp;quot; + parent_timezone&lt;br /&gt;
      current_user.timezonepref = parent_timezone&lt;br /&gt;
    end&lt;br /&gt;
    if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
      flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.errors.get(:message)}&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to edit_assignment_path @assignment_form.assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After refactoring&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update&lt;br /&gt;
    unless params.key?(:assignment_form)&lt;br /&gt;
      assignment_form_key_nonexist_case_handler&lt;br /&gt;
      return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    retrieve_assignment_form&lt;br /&gt;
&lt;br /&gt;
    handle_current_user_timezonepref_nil&lt;br /&gt;
&lt;br /&gt;
    feedback_assignment_form_attributes_update&lt;br /&gt;
&lt;br /&gt;
    redirect_to edit_assignment_path @assignment_form.assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The update method was refactored in the similar way to reduce the size of codes and improve readability. The definitions of those helper methods were placed at the bottom of the assignments_controller.rb.&lt;br /&gt;
&lt;br /&gt;
===Rename existing helper methods===&lt;br /&gt;
Actions: rename for consistent Ruby code style&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  is_due_date_nameurl_notempty → due_date_nameurl_notempty?&lt;br /&gt;
  is_meta_review_allowed? → meta_review_allowed?&lt;br /&gt;
  is_drop_topic_allowed? → drop_topic_allowed? &lt;br /&gt;
  is_signup_allowed? → signup_allowed?&lt;br /&gt;
  is_team_formation_allowed? → team_formation_allowed?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After each refactoring procedure, we perform the testing to ensure the expected functionality in Rspec. For more cases, please check our GitHub project repo. The files we make change on are: app/controllers/assignments_controller.rb and app/helpers/deadline_helper.rb&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/jerry-shijieli/expertiza Github project repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/playlist?list=PLUHiK0P0uQKLvW-_hBDdRK3x4cFn6BJ4C Project Video Demo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1024 Pull request]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[http://rspec.info/documentation/ Rspec Documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.betterspecs.org/ Better Specs]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation#Welcome_to_the_Expertiza_project.21 Expertiza Wiki]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza NCSU]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
[mailto:sli41@ncsu.edu Shijie Li]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1752_Refactor_assignments_controller&amp;diff=111447</id>
		<title>CSC/ECE 517 Fall 2017/E1752 Refactor assignments controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1752_Refactor_assignments_controller&amp;diff=111447"/>
		<updated>2017-11-02T20:45:38Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Additional Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Expertiza is an open source webapp built on Ruby on Rails stack. It provides a platform to students with various features like peer-reviewing projects, submitting work, form teams, viewing grades etc. The project is being built and maintained by students and faculty at NCSU.&lt;br /&gt;
&lt;br /&gt;
==About Assignments Controller==&lt;br /&gt;
The file assignments_controller.rb handles the logic behind Expertiza assignments and enables the creation and managements of assignments by instructional staff. Besides regular CRUD operations, it also integrates multiple parts of the expertiza components, such as users of different authorizations and priorities, corresponding courses associated with the assignment, due date and so on. Therefore, further unit and integration tests are required to guarantee that these operations work as expected. And also refactoring on the code in this controller is needed to make it more readable and reduce the complexity at the same time. Our tasks are based on the motivations above.&lt;br /&gt;
&lt;br /&gt;
==About Software Testing==&lt;br /&gt;
Software testing is a process of examining a program or application with the intent of finding the software bugs. In software developemnt, it is usually defined as the process of validating and verifying that a software program or application or product meets the specified business and technical requirements.&lt;br /&gt;
&lt;br /&gt;
Additionaly, software is tested to:&lt;br /&gt;
* Detect and rectify and errors made during the development phase,&lt;br /&gt;
* Ensure customer satisfaction in the application,&lt;br /&gt;
* Ensure the quality of the software product and&lt;br /&gt;
* Optimize the performance of the system.&lt;br /&gt;
&lt;br /&gt;
Our project is guided by the Test-First Development principle. We write passing and failing tests for use cases of the assignment controller, and then turn to refactor the code. During the project, we implement the tests and refactor in Agile methodology with our mentor Zhewei through weekly delivery.&lt;br /&gt;
&lt;br /&gt;
===RSpec Testing===&lt;br /&gt;
RSpec is a 'Domain Specific Language' (DSL) testing tool written in Ruby to test Ruby code. It is a behavior-driven development (BDD) framework which is extensively used in the production applications. The basic idea behind this concept is that of Test Driven Development(TDD) where the tests are written first and the development is based on writing just enough code that will fulfill those tests followed by refactoring. &lt;br /&gt;
&lt;br /&gt;
The Expertiza project makes extensive use of RSpec to test the various components of the application. Tests of our tasks are in the code file: spec/controllers/assignments_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Testing actions perfomed===&lt;br /&gt;
* Creating new tests for each method, &lt;br /&gt;
* Testing the each method and making sure the tests pass.&lt;br /&gt;
&lt;br /&gt;
===Testing results===&lt;br /&gt;
All 22 tests were passed with zero failure on the final version of project code.&lt;br /&gt;
&lt;br /&gt;
==About Refactoring==&lt;br /&gt;
Refactoring of computer software or code is the process of restructuring existing software code without changing its external behavior or performance of the software application. Refactoring improves nonfunctional attributes of the software. Refactoring aids in code readability and keeps the code well maintained and easy to understand.&lt;br /&gt;
&lt;br /&gt;
===Refactoring actions perfomed===&lt;br /&gt;
* Replace magic numbers in deadline_type_id by constants with reasonable names;&lt;br /&gt;
* Formatting the code for readability and convention;&lt;br /&gt;
* Split large chunks of code in to smaller manageable chunks;&lt;br /&gt;
* Extract simpler and specific methods out of blocks of codes to remove code duplications using DRY principle;&lt;br /&gt;
* Rename existing methods with meaningful names for better readability without change on external functionality.&lt;br /&gt;
&lt;br /&gt;
===Refactor edit method===&lt;br /&gt;
Actions: code block split, method extraction and add meaningful constants&lt;br /&gt;
&lt;br /&gt;
Original&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def edit&lt;br /&gt;
    # give an error message is instructor have not set the time zone.&lt;br /&gt;
    if current_user.timezonepref.nil?&lt;br /&gt;
      flash.now[:error] = &amp;quot;You have not specified your preferred timezone yet. Please do this before you set up the deadlines.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
    @assignment_form = AssignmentForm.create_form_object(params[:id])&lt;br /&gt;
    @user = current_user&lt;br /&gt;
&lt;br /&gt;
    @assignment_questionnaires = AssignmentQuestionnaire.where(assignment_id: params[:id])&lt;br /&gt;
    @due_date_all = AssignmentDueDate.where(parent_id: params[:id])&lt;br /&gt;
    @reviewvarycheck = false&lt;br /&gt;
    @due_date_nameurl_notempty = false&lt;br /&gt;
    @due_date_nameurl_notempty_checkbox = false&lt;br /&gt;
    @metareview_allowed = false&lt;br /&gt;
    @metareview_allowed_checkbox = false&lt;br /&gt;
    @signup_allowed = false&lt;br /&gt;
    @signup_allowed_checkbox = false&lt;br /&gt;
    @drop_topic_allowed = false&lt;br /&gt;
    @drop_topic_allowed_checkbox = false&lt;br /&gt;
    @team_formation_allowed = false&lt;br /&gt;
    @team_formation_allowed_checkbox = false&lt;br /&gt;
    @participants_count = @assignment_form.assignment.participants.size&lt;br /&gt;
    @teams_count = @assignment_form.assignment.teams.size&lt;br /&gt;
&lt;br /&gt;
    if @assignment_form.assignment.staggered_deadline == true&lt;br /&gt;
      @review_rounds = @assignment_form.assignment.num_review_rounds&lt;br /&gt;
      @assignment_submission_due_dates = @due_date_all.select {|due_date| due_date.deadline_type_id == 1 }&lt;br /&gt;
      @assignment_review_due_dates = @due_date_all.select {|due_date| due_date.deadline_type_id == 2 }&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # Check if name and url in database is empty before webpage displays&lt;br /&gt;
    @due_date_all.each do |dd|&lt;br /&gt;
      @due_date_nameurl_notempty = is_due_date_nameurl_notempty(dd)&lt;br /&gt;
      @due_date_nameurl_notempty_checkbox = @due_date_nameurl_notempty&lt;br /&gt;
      @metareview_allowed = is_meta_review_allowed?(dd)&lt;br /&gt;
      @drop_topic_allowed = is_drop_topic_allowed?(dd)&lt;br /&gt;
      @signup_allowed = is_signup_allowed?(dd)&lt;br /&gt;
      @team_formation_allowed = is_team_formation_allowed?(dd)&lt;br /&gt;
&lt;br /&gt;
      if dd.due_at.present?&lt;br /&gt;
        dd.due_at = dd.due_at.to_s.in_time_zone(current_user.timezonepref)&lt;br /&gt;
      end&lt;br /&gt;
      if  @due_date_nameurl_notempty &amp;amp;&amp;amp; @due_date_nameurl_notempty_checkbox &amp;amp;&amp;amp;&lt;br /&gt;
          (@metareview_allowed || @drop_topic_allowed || @signup_allowed || @team_formation_allowed)&lt;br /&gt;
        break&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    @assignment_questionnaires.each do |aq|&lt;br /&gt;
      unless aq.used_in_round.nil?&lt;br /&gt;
        @reviewvarycheck = 1&lt;br /&gt;
        break&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    @due_date_all = update_nil_dd_deadline_name(@due_date_all)&lt;br /&gt;
    @due_date_all = update_nil_dd_description_url(@due_date_all)&lt;br /&gt;
&lt;br /&gt;
    # only when instructor does not assign rubrics and in assignment edit page will show this error message.&lt;br /&gt;
    if !empty_rubrics_list.empty? &amp;amp;&amp;amp; request.original_fullpath == &amp;quot;/assignments/#{@assignment_form.assignment.id}/edit&amp;quot;&lt;br /&gt;
      rubrics_needed = needed_rubrics(empty_rubrics_list)&lt;br /&gt;
      flash.now[:error] = &amp;quot;You did not specify all the necessary rubrics. You need &amp;quot; + rubrics_needed +&lt;br /&gt;
          &amp;quot; of assignment &amp;lt;b&amp;gt;#{@assignment_form.assignment.name}&amp;lt;/b&amp;gt; before saving the assignment. You can assign rubrics &amp;lt;a id='go_to_tabs2' style='color: blue;'&amp;gt;here&amp;lt;/a&amp;gt;.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if @assignment_form.assignment.directory_path.nil? || @assignment_form.assignment.directory_path.empty?&lt;br /&gt;
      flash.now[:error] = &amp;quot;You did not specify your submission directory.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After refactoring&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def edit&lt;br /&gt;
    handle_current_user_timezonepref_nil&lt;br /&gt;
&lt;br /&gt;
    edit_params_setting&lt;br /&gt;
&lt;br /&gt;
    assignment_form_assignment_staggered_deadline?&lt;br /&gt;
&lt;br /&gt;
    @due_date_all.each do |dd|&lt;br /&gt;
      check_due_date_nameurl_notempty(dd)&lt;br /&gt;
&lt;br /&gt;
      adjust_timezone_when_due_date_present(dd)&lt;br /&gt;
&lt;br /&gt;
      break if validate_due_date&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    check_assignment_questionnaires_usage&lt;br /&gt;
&lt;br /&gt;
    @due_date_all = update_nil_dd_deadline_name(@due_date_all)&lt;br /&gt;
    @due_date_all = update_nil_dd_description_url(@due_date_all)&lt;br /&gt;
&lt;br /&gt;
    # only when instructor does not assign rubrics and in assignment edit page will show this error message.&lt;br /&gt;
    handle_rubrics_not_assigned_case&lt;br /&gt;
&lt;br /&gt;
    handle_assignment_directory_path_nonexist_case&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here we first grouped the blocks of code according to their similarity of functions. Then we extracted simpler methods from each code block to make it more readable and reduce the complexity and coupling. It is obvious that after refactoring, this part is simpler and easier to maintain. In addition, we also replaced the magic numbers by constants according to the deadline type.&lt;br /&gt;
&lt;br /&gt;
===Refactor update method===&lt;br /&gt;
Actions: split long code block and extract specific methods&lt;br /&gt;
&lt;br /&gt;
Original&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update&lt;br /&gt;
    unless params.key?(:assignment_form)&lt;br /&gt;
      @assignment = Assignment.find(params[:id])&lt;br /&gt;
      @assignment.course_id = params[:course_id]&lt;br /&gt;
      if @assignment.save&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved.'&lt;br /&gt;
        redirect_to list_tree_display_index_path&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment.errors.full_messages.join(' ')}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path @assignment.id&lt;br /&gt;
      end&lt;br /&gt;
      return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    @assignment_form = AssignmentForm.create_form_object(params[:id])&lt;br /&gt;
    @assignment_form.assignment.instructor ||= current_user&lt;br /&gt;
    params[:assignment_form][:assignment_questionnaire].reject! do |q|&lt;br /&gt;
      q[:questionnaire_id].empty?&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if current_user.timezonepref.nil?&lt;br /&gt;
      parent_id = current_user.parent_id&lt;br /&gt;
      parent_timezone = User.find(parent_id).timezonepref&lt;br /&gt;
      flash[:error] = &amp;quot;We strongly suggest that instructors specify their preferred timezone to guarantee the correct display time. For now we assume you are in &amp;quot; + parent_timezone&lt;br /&gt;
      current_user.timezonepref = parent_timezone&lt;br /&gt;
    end&lt;br /&gt;
    if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
      flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.errors.get(:message)}&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to edit_assignment_path @assignment_form.assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After refactoring&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update&lt;br /&gt;
    unless params.key?(:assignment_form)&lt;br /&gt;
      assignment_form_key_nonexist_case_handler&lt;br /&gt;
      return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    retrieve_assignment_form&lt;br /&gt;
&lt;br /&gt;
    handle_current_user_timezonepref_nil&lt;br /&gt;
&lt;br /&gt;
    feedback_assignment_form_attributes_update&lt;br /&gt;
&lt;br /&gt;
    redirect_to edit_assignment_path @assignment_form.assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The update method was refactored in the similar way to reduce the size of codes and improve readability. The definitions of those helper methods were placed at the bottom of the assignments_controller.rb.&lt;br /&gt;
&lt;br /&gt;
===Rename existing helper methods===&lt;br /&gt;
Actions: rename for consistent Ruby code style&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  is_due_date_nameurl_notempty → due_date_nameurl_notempty?&lt;br /&gt;
  is_meta_review_allowed? → meta_review_allowed?&lt;br /&gt;
  is_drop_topic_allowed? → drop_topic_allowed? &lt;br /&gt;
  is_signup_allowed? → signup_allowed?&lt;br /&gt;
  is_team_formation_allowed? → team_formation_allowed?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After each refactoring procedure, we perform the testing to ensure the expected functionality in Rspec. For more cases, please check our GitHub project repo. The files we make change on are: app/controllers/assignments_controller.rb and app/helpers/deadline_helper.rb&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/jerry-shijieli/expertiza Github project repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/playlist?list=PLUHiK0P0uQKLvW-_hBDdRK3x4cFn6BJ4C Project Video Demo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1024 Pull request]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[http://rspec.info/documentation/ Rspec Documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.betterspecs.org/ Better Specs]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation#Welcome_to_the_Expertiza_project.21 Expertiza Wiki]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza NCSU]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
[mailto:sli41@ncsu.edu Shijie Li]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1752_Refactor_assignments_controller&amp;diff=111446</id>
		<title>CSC/ECE 517 Fall 2017/E1752 Refactor assignments controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/E1752_Refactor_assignments_controller&amp;diff=111446"/>
		<updated>2017-11-02T20:45:22Z</updated>

		<summary type="html">&lt;p&gt;Adeshmu: /* Additional Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Expertiza is an open source webapp built on Ruby on Rails stack. It provides a platform to students with various features like peer-reviewing projects, submitting work, form teams, viewing grades etc. The project is being built and maintained by students and faculty at NCSU.&lt;br /&gt;
&lt;br /&gt;
==About Assignments Controller==&lt;br /&gt;
The file assignments_controller.rb handles the logic behind Expertiza assignments and enables the creation and managements of assignments by instructional staff. Besides regular CRUD operations, it also integrates multiple parts of the expertiza components, such as users of different authorizations and priorities, corresponding courses associated with the assignment, due date and so on. Therefore, further unit and integration tests are required to guarantee that these operations work as expected. And also refactoring on the code in this controller is needed to make it more readable and reduce the complexity at the same time. Our tasks are based on the motivations above.&lt;br /&gt;
&lt;br /&gt;
==About Software Testing==&lt;br /&gt;
Software testing is a process of examining a program or application with the intent of finding the software bugs. In software developemnt, it is usually defined as the process of validating and verifying that a software program or application or product meets the specified business and technical requirements.&lt;br /&gt;
&lt;br /&gt;
Additionaly, software is tested to:&lt;br /&gt;
* Detect and rectify and errors made during the development phase,&lt;br /&gt;
* Ensure customer satisfaction in the application,&lt;br /&gt;
* Ensure the quality of the software product and&lt;br /&gt;
* Optimize the performance of the system.&lt;br /&gt;
&lt;br /&gt;
Our project is guided by the Test-First Development principle. We write passing and failing tests for use cases of the assignment controller, and then turn to refactor the code. During the project, we implement the tests and refactor in Agile methodology with our mentor Zhewei through weekly delivery.&lt;br /&gt;
&lt;br /&gt;
===RSpec Testing===&lt;br /&gt;
RSpec is a 'Domain Specific Language' (DSL) testing tool written in Ruby to test Ruby code. It is a behavior-driven development (BDD) framework which is extensively used in the production applications. The basic idea behind this concept is that of Test Driven Development(TDD) where the tests are written first and the development is based on writing just enough code that will fulfill those tests followed by refactoring. &lt;br /&gt;
&lt;br /&gt;
The Expertiza project makes extensive use of RSpec to test the various components of the application. Tests of our tasks are in the code file: spec/controllers/assignments_controller_spec.rb&lt;br /&gt;
&lt;br /&gt;
===Testing actions perfomed===&lt;br /&gt;
* Creating new tests for each method, &lt;br /&gt;
* Testing the each method and making sure the tests pass.&lt;br /&gt;
&lt;br /&gt;
===Testing results===&lt;br /&gt;
All 22 tests were passed with zero failure on the final version of project code.&lt;br /&gt;
&lt;br /&gt;
==About Refactoring==&lt;br /&gt;
Refactoring of computer software or code is the process of restructuring existing software code without changing its external behavior or performance of the software application. Refactoring improves nonfunctional attributes of the software. Refactoring aids in code readability and keeps the code well maintained and easy to understand.&lt;br /&gt;
&lt;br /&gt;
===Refactoring actions perfomed===&lt;br /&gt;
* Replace magic numbers in deadline_type_id by constants with reasonable names;&lt;br /&gt;
* Formatting the code for readability and convention;&lt;br /&gt;
* Split large chunks of code in to smaller manageable chunks;&lt;br /&gt;
* Extract simpler and specific methods out of blocks of codes to remove code duplications using DRY principle;&lt;br /&gt;
* Rename existing methods with meaningful names for better readability without change on external functionality.&lt;br /&gt;
&lt;br /&gt;
===Refactor edit method===&lt;br /&gt;
Actions: code block split, method extraction and add meaningful constants&lt;br /&gt;
&lt;br /&gt;
Original&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def edit&lt;br /&gt;
    # give an error message is instructor have not set the time zone.&lt;br /&gt;
    if current_user.timezonepref.nil?&lt;br /&gt;
      flash.now[:error] = &amp;quot;You have not specified your preferred timezone yet. Please do this before you set up the deadlines.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    @topics = SignUpTopic.where(assignment_id: params[:id])&lt;br /&gt;
    @assignment_form = AssignmentForm.create_form_object(params[:id])&lt;br /&gt;
    @user = current_user&lt;br /&gt;
&lt;br /&gt;
    @assignment_questionnaires = AssignmentQuestionnaire.where(assignment_id: params[:id])&lt;br /&gt;
    @due_date_all = AssignmentDueDate.where(parent_id: params[:id])&lt;br /&gt;
    @reviewvarycheck = false&lt;br /&gt;
    @due_date_nameurl_notempty = false&lt;br /&gt;
    @due_date_nameurl_notempty_checkbox = false&lt;br /&gt;
    @metareview_allowed = false&lt;br /&gt;
    @metareview_allowed_checkbox = false&lt;br /&gt;
    @signup_allowed = false&lt;br /&gt;
    @signup_allowed_checkbox = false&lt;br /&gt;
    @drop_topic_allowed = false&lt;br /&gt;
    @drop_topic_allowed_checkbox = false&lt;br /&gt;
    @team_formation_allowed = false&lt;br /&gt;
    @team_formation_allowed_checkbox = false&lt;br /&gt;
    @participants_count = @assignment_form.assignment.participants.size&lt;br /&gt;
    @teams_count = @assignment_form.assignment.teams.size&lt;br /&gt;
&lt;br /&gt;
    if @assignment_form.assignment.staggered_deadline == true&lt;br /&gt;
      @review_rounds = @assignment_form.assignment.num_review_rounds&lt;br /&gt;
      @assignment_submission_due_dates = @due_date_all.select {|due_date| due_date.deadline_type_id == 1 }&lt;br /&gt;
      @assignment_review_due_dates = @due_date_all.select {|due_date| due_date.deadline_type_id == 2 }&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    # Check if name and url in database is empty before webpage displays&lt;br /&gt;
    @due_date_all.each do |dd|&lt;br /&gt;
      @due_date_nameurl_notempty = is_due_date_nameurl_notempty(dd)&lt;br /&gt;
      @due_date_nameurl_notempty_checkbox = @due_date_nameurl_notempty&lt;br /&gt;
      @metareview_allowed = is_meta_review_allowed?(dd)&lt;br /&gt;
      @drop_topic_allowed = is_drop_topic_allowed?(dd)&lt;br /&gt;
      @signup_allowed = is_signup_allowed?(dd)&lt;br /&gt;
      @team_formation_allowed = is_team_formation_allowed?(dd)&lt;br /&gt;
&lt;br /&gt;
      if dd.due_at.present?&lt;br /&gt;
        dd.due_at = dd.due_at.to_s.in_time_zone(current_user.timezonepref)&lt;br /&gt;
      end&lt;br /&gt;
      if  @due_date_nameurl_notempty &amp;amp;&amp;amp; @due_date_nameurl_notempty_checkbox &amp;amp;&amp;amp;&lt;br /&gt;
          (@metareview_allowed || @drop_topic_allowed || @signup_allowed || @team_formation_allowed)&lt;br /&gt;
        break&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    @assignment_questionnaires.each do |aq|&lt;br /&gt;
      unless aq.used_in_round.nil?&lt;br /&gt;
        @reviewvarycheck = 1&lt;br /&gt;
        break&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    @due_date_all = update_nil_dd_deadline_name(@due_date_all)&lt;br /&gt;
    @due_date_all = update_nil_dd_description_url(@due_date_all)&lt;br /&gt;
&lt;br /&gt;
    # only when instructor does not assign rubrics and in assignment edit page will show this error message.&lt;br /&gt;
    if !empty_rubrics_list.empty? &amp;amp;&amp;amp; request.original_fullpath == &amp;quot;/assignments/#{@assignment_form.assignment.id}/edit&amp;quot;&lt;br /&gt;
      rubrics_needed = needed_rubrics(empty_rubrics_list)&lt;br /&gt;
      flash.now[:error] = &amp;quot;You did not specify all the necessary rubrics. You need &amp;quot; + rubrics_needed +&lt;br /&gt;
          &amp;quot; of assignment &amp;lt;b&amp;gt;#{@assignment_form.assignment.name}&amp;lt;/b&amp;gt; before saving the assignment. You can assign rubrics &amp;lt;a id='go_to_tabs2' style='color: blue;'&amp;gt;here&amp;lt;/a&amp;gt;.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if @assignment_form.assignment.directory_path.nil? || @assignment_form.assignment.directory_path.empty?&lt;br /&gt;
      flash.now[:error] = &amp;quot;You did not specify your submission directory.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After refactoring&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def edit&lt;br /&gt;
    handle_current_user_timezonepref_nil&lt;br /&gt;
&lt;br /&gt;
    edit_params_setting&lt;br /&gt;
&lt;br /&gt;
    assignment_form_assignment_staggered_deadline?&lt;br /&gt;
&lt;br /&gt;
    @due_date_all.each do |dd|&lt;br /&gt;
      check_due_date_nameurl_notempty(dd)&lt;br /&gt;
&lt;br /&gt;
      adjust_timezone_when_due_date_present(dd)&lt;br /&gt;
&lt;br /&gt;
      break if validate_due_date&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    check_assignment_questionnaires_usage&lt;br /&gt;
&lt;br /&gt;
    @due_date_all = update_nil_dd_deadline_name(@due_date_all)&lt;br /&gt;
    @due_date_all = update_nil_dd_description_url(@due_date_all)&lt;br /&gt;
&lt;br /&gt;
    # only when instructor does not assign rubrics and in assignment edit page will show this error message.&lt;br /&gt;
    handle_rubrics_not_assigned_case&lt;br /&gt;
&lt;br /&gt;
    handle_assignment_directory_path_nonexist_case&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here we first grouped the blocks of code according to their similarity of functions. Then we extracted simpler methods from each code block to make it more readable and reduce the complexity and coupling. It is obvious that after refactoring, this part is simpler and easier to maintain. In addition, we also replaced the magic numbers by constants according to the deadline type.&lt;br /&gt;
&lt;br /&gt;
===Refactor update method===&lt;br /&gt;
Actions: split long code block and extract specific methods&lt;br /&gt;
&lt;br /&gt;
Original&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update&lt;br /&gt;
    unless params.key?(:assignment_form)&lt;br /&gt;
      @assignment = Assignment.find(params[:id])&lt;br /&gt;
      @assignment.course_id = params[:course_id]&lt;br /&gt;
      if @assignment.save&lt;br /&gt;
        flash[:note] = 'The assignment was successfully saved.'&lt;br /&gt;
        redirect_to list_tree_display_index_path&lt;br /&gt;
      else&lt;br /&gt;
        flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment.errors.full_messages.join(' ')}&amp;quot;&lt;br /&gt;
        redirect_to edit_assignment_path @assignment.id&lt;br /&gt;
      end&lt;br /&gt;
      return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    @assignment_form = AssignmentForm.create_form_object(params[:id])&lt;br /&gt;
    @assignment_form.assignment.instructor ||= current_user&lt;br /&gt;
    params[:assignment_form][:assignment_questionnaire].reject! do |q|&lt;br /&gt;
      q[:questionnaire_id].empty?&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if current_user.timezonepref.nil?&lt;br /&gt;
      parent_id = current_user.parent_id&lt;br /&gt;
      parent_timezone = User.find(parent_id).timezonepref&lt;br /&gt;
      flash[:error] = &amp;quot;We strongly suggest that instructors specify their preferred timezone to guarantee the correct display time. For now we assume you are in &amp;quot; + parent_timezone&lt;br /&gt;
      current_user.timezonepref = parent_timezone&lt;br /&gt;
    end&lt;br /&gt;
    if @assignment_form.update_attributes(assignment_form_params, current_user)&lt;br /&gt;
      flash[:note] = 'The assignment was successfully saved....'&lt;br /&gt;
    else&lt;br /&gt;
      flash[:error] = &amp;quot;Failed to save the assignment: #{@assignment_form.errors.get(:message)}&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    redirect_to edit_assignment_path @assignment_form.assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After refactoring&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def update&lt;br /&gt;
    unless params.key?(:assignment_form)&lt;br /&gt;
      assignment_form_key_nonexist_case_handler&lt;br /&gt;
      return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    retrieve_assignment_form&lt;br /&gt;
&lt;br /&gt;
    handle_current_user_timezonepref_nil&lt;br /&gt;
&lt;br /&gt;
    feedback_assignment_form_attributes_update&lt;br /&gt;
&lt;br /&gt;
    redirect_to edit_assignment_path @assignment_form.assignment.id&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The update method was refactored in the similar way to reduce the size of codes and improve readability. The definitions of those helper methods were placed at the bottom of the assignments_controller.rb.&lt;br /&gt;
&lt;br /&gt;
===Rename existing helper methods===&lt;br /&gt;
Actions: rename for consistent Ruby code style&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  is_due_date_nameurl_notempty → due_date_nameurl_notempty?&lt;br /&gt;
  is_meta_review_allowed? → meta_review_allowed?&lt;br /&gt;
  is_drop_topic_allowed? → drop_topic_allowed? &lt;br /&gt;
  is_signup_allowed? → signup_allowed?&lt;br /&gt;
  is_team_formation_allowed? → team_formation_allowed?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After each refactoring procedure, we perform the testing to ensure the expected functionality in Rspec. For more cases, please check our GitHub project repo. The files we make change on are: app/controllers/assignments_controller.rb and app/helpers/deadline_helper.rb&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/jerry-shijieli/expertiza Github project repo]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/playlist?list=PLUHiK0P0uQKLvW-_hBDdRK3x4cFn6BJ4C Project Video Demo]&lt;br /&gt;
[https://github.com/expertiza/expertiza/pull/1024 Pull request]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[http://rspec.info/documentation/ Rspec Documentation]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.betterspecs.org/ Better Specs]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation#Welcome_to_the_Expertiza_project.21 Expertiza Wiki]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://expertiza.ncsu.edu/ Expertiza NCSU]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
[mailto:sli41@ncsu.edu Shijie Li]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:adeshmu@ncsu.edu Amey Deshmukh]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:pmusyok@ncsu.edu Philip Musyoki]&lt;/div&gt;</summary>
		<author><name>Adeshmu</name></author>
	</entry>
</feed>