<?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=Skeerth</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=Skeerth"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Skeerth"/>
	<updated>2026-09-06T06:06:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121664</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121664"/>
		<updated>2019-01-03T03:11:51Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are ten different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
:9. Plagiarism checker report&lt;br /&gt;
:10. Self review report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
:- PlagiarismCheckerReport&lt;br /&gt;
:- SelfReviewReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new module is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Complete Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Basic Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;AnswerTaggingReport&amp;quot;, we check if the correct report page is rendered or not. The report must render the participants' details, the number of taggable answers, the number of answers tagged, the number of answers not tagged and the percentage of answers tagged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Answer tagging report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:8. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
:9. When the requested report type is &amp;quot;CollusionReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
:10. When the requested report type is &amp;quot;SelfReviewReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;br /&gt;
&lt;br /&gt;
= Team =&lt;br /&gt;
&lt;br /&gt;
[mailto:rvijaya4@ncsu.edu Ramya Vijayakumar]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:skeerth@ncsu.edu Suhas Keerthiraju]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:rdange@ncsu.edu Rajat Mahesh Dange]&amp;lt;br&amp;gt;&lt;br /&gt;
[mailto:ssaluja@ncsu.edu Sahej Saluja]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121663</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121663"/>
		<updated>2019-01-03T03:06:51Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are ten different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
:9. Plagiarism checker report&lt;br /&gt;
:10. Self review report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
:- PlagiarismCheckerReport&lt;br /&gt;
:- SelfReviewReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new module is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Complete Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Basic Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;AnswerTaggingReport&amp;quot;, we check if the correct report page is rendered or not. The report must render the participants' details, the number of taggable answers, the number of answers tagged, the number of answers not tagged and the percentage of answers tagged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Answer tagging report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:8. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
:9. When the requested report type is &amp;quot;CollusionReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
:10. When the requested report type is &amp;quot;SelfReviewReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;br /&gt;
&lt;br /&gt;
= Team =&lt;br /&gt;
&lt;br /&gt;
:1. Ramya Vijayakumar&lt;br /&gt;
:2. Suhas Keerthiraju&lt;br /&gt;
:3. Rajat Mahesh Dange&lt;br /&gt;
:4. Sahej Saluja&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Complete_Report_strategy_E1868.jpg&amp;diff=121215</id>
		<title>File:Complete Report strategy E1868.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Complete_Report_strategy_E1868.jpg&amp;diff=121215"/>
		<updated>2018-12-07T22:30:58Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Added complete list of reports&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Added complete list of reports&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121214</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121214"/>
		<updated>2018-12-07T22:30:22Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Refactored Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are ten different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
:9. Plagiarism checker report&lt;br /&gt;
:10. Self review report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
:- PlagiarismCheckerReport&lt;br /&gt;
:- SelfReviewReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new module is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Complete Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Basic Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;AnswerTaggingReport&amp;quot;, we check if the correct report page is rendered or not. The report must render the participants' details, the number of taggable answers, the number of answers tagged, the number of answers not tagged and the percentage of answers tagged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Answer tagging report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:8. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
:9. When the requested report type is &amp;quot;CollusionReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
:10. When the requested report type is &amp;quot;SelfReviewReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121200</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121200"/>
		<updated>2018-12-07T21:04:54Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are ten different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
:9. Plagiarism checker report&lt;br /&gt;
:10. Self review report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
:- PlagiarismCheckerReport&lt;br /&gt;
:- SelfReviewReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new module is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Basic Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;AnswerTaggingReport&amp;quot;, we check if the correct report page is rendered or not. The report must render the participants' details, the number of taggable answers, the number of answers tagged, the number of answers not tagged and the percentage of answers tagged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Answer tagging report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:8. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
:9. When the requested report type is &amp;quot;CollusionReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
:10. When the requested report type is &amp;quot;SelfReviewReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121199</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121199"/>
		<updated>2018-12-07T21:02:36Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are ten different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
:9. Plagiarism checker report&lt;br /&gt;
:10. Self review report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
:- PlagiarismCheckerReport&lt;br /&gt;
:- SelfReviewReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new module is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Basic Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
:8. When the requested report type is &amp;quot;AnswerTaggingReport&amp;quot;, we check if the correct report page is rendered or not. The report must render the participants' details, the number of taggable answers, the number of answers tagged, the number of answers not tagged and the percentage of answers tagged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Answer tagging report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Answer_tagging_report.jpg&amp;diff=121198</id>
		<title>File:Answer tagging report.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Answer_tagging_report.jpg&amp;diff=121198"/>
		<updated>2018-12-07T20:58:11Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Sample answer tagging report&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample answer tagging report&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121197</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121197"/>
		<updated>2018-12-07T20:57:02Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are ten different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
:9. Plagiarism checker report&lt;br /&gt;
:10. Self review report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
:- PlagiarismCheckerReport&lt;br /&gt;
:- SelfReviewReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new module is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Basic Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
:8. When the requested report type is &amp;quot;AnswerTaggingReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Answer tagging report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Basic_Use_case_for_reports.jpg&amp;diff=121196</id>
		<title>File:Basic Use case for reports.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Basic_Use_case_for_reports.jpg&amp;diff=121196"/>
		<updated>2018-12-07T20:54:20Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: uploaded a new version of &amp;amp;quot;File:Basic Use case for reports.jpg&amp;amp;quot;: Accommodated complete list of reports&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;New report types added&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Basic_Use_case_for_reports.jpg&amp;diff=121192</id>
		<title>File:Basic Use case for reports.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Basic_Use_case_for_reports.jpg&amp;diff=121192"/>
		<updated>2018-12-07T20:40:29Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: New report types added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;New report types added&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121191</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121191"/>
		<updated>2018-12-07T20:40:05Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are ten different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
:9. Plagiarism checker report&lt;br /&gt;
:10. Self review report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
:- PlagiarismCheckerReport&lt;br /&gt;
:- SelfReviewReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new module is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Basic Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Use_case_for_reports.jpg&amp;diff=121190</id>
		<title>File:Use case for reports.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Use_case_for_reports.jpg&amp;diff=121190"/>
		<updated>2018-12-07T20:39:12Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: uploaded a new version of &amp;amp;quot;File:Use case for reports.jpg&amp;amp;quot;: Added new reports&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Updated use case representation for reports&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121189</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121189"/>
		<updated>2018-12-07T20:23:44Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Refactored Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are ten different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
:9. Plagiarism checker report&lt;br /&gt;
:10. Self review report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
:- PlagiarismCheckerReport&lt;br /&gt;
:- SelfReviewReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new module is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Use_case_for_reports.jpg&amp;diff=121164</id>
		<title>File:Use case for reports.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Use_case_for_reports.jpg&amp;diff=121164"/>
		<updated>2018-12-07T17:43:52Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Updated use case representation for reports&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Updated use case representation for reports&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121163</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121163"/>
		<updated>2018-12-07T17:42:38Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Use case for reports.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_use_case.jpg&amp;diff=121162</id>
		<title>File:Report use case.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_use_case.jpg&amp;diff=121162"/>
		<updated>2018-12-07T17:41:47Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: uploaded a new version of &amp;amp;quot;File:Report use case.jpg&amp;amp;quot;: View privileges updated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;use case for reports&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121161</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121161"/>
		<updated>2018-12-07T17:40:12Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Modified UI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121160</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121160"/>
		<updated>2018-12-07T17:38:57Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data related to feedback i.e. number of feedbacks done, last feedback status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. The report must return participant information, the number of reviews completed, teammates reviewed, the last review status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant is not empty we check if the correct report is rendered or not. The report must return the calibrated values of the participants' response to the given assignment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Calibration_report.jpg&amp;diff=121159</id>
		<title>File:Calibration report.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Calibration_report.jpg&amp;diff=121159"/>
		<updated>2018-12-07T17:28:10Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Sample &amp;quot;Calibration report&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample &amp;quot;Calibration report&amp;quot;&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Teammate_review_report.jpg&amp;diff=121158</id>
		<title>File:Teammate review report.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Teammate_review_report.jpg&amp;diff=121158"/>
		<updated>2018-12-07T17:27:42Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Sample &amp;quot;Teammate review report&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample &amp;quot;Teammate review report&amp;quot;&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Feedback_report.jpg&amp;diff=121157</id>
		<title>File:Feedback report.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Feedback_report.jpg&amp;diff=121157"/>
		<updated>2018-12-07T17:27:13Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Sample &amp;quot;Author feedback report&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample &amp;quot;Author feedback report&amp;quot;&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_report.jpg&amp;diff=121156</id>
		<title>File:Review report.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_report.jpg&amp;diff=121156"/>
		<updated>2018-12-07T17:26:43Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Sample &amp;quot;Review report&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample &amp;quot;Review report&amp;quot;&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_summary_report.jpg&amp;diff=121155</id>
		<title>File:Review summary report.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Review_summary_report.jpg&amp;diff=121155"/>
		<updated>2018-12-07T17:26:21Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Sample &amp;quot;Review summary report&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample &amp;quot;Review summary report&amp;quot;&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Reviewee_summary_report.jpg&amp;diff=121154</id>
		<title>File:Reviewee summary report.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Reviewee_summary_report.jpg&amp;diff=121154"/>
		<updated>2018-12-07T17:25:32Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: Sample &amp;quot;Reviewee summary report&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sample &amp;quot;Reviewee summary report&amp;quot;&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_use_case.jpg&amp;diff=121153</id>
		<title>File:Report use case.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_use_case.jpg&amp;diff=121153"/>
		<updated>2018-12-07T17:23:59Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: uploaded a new version of &amp;amp;quot;File:Report use case.jpg&amp;amp;quot;: Update on previleges&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;use case for reports&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121152</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121152"/>
		<updated>2018-12-07T17:23:04Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows(sample reports screenshot included)&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Reviewee summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review summary report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:4A. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data is rendered.&lt;br /&gt;
:4B. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data is rendered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Feedback report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:5. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Teammate review report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:6. When the requested report type is &amp;quot;Calibration&amp;quot; and participant variable is not nil we check if the correct report is rendered or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Calibration report.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:7. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121151</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=121151"/>
		<updated>2018-12-07T16:23:45Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Modified UI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different functionalities which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This always forces the user to initially view the review report and only then choose the required report. We intend to modify this implementation such that the user is not forced to view the review report but can directly select the required report.&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
In order to avoid the user to be redirected to review reports page every time the user wants to view a specific report, the following changes have been made to the implementation:&lt;br /&gt;
&lt;br /&gt;
:1. The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
[[File:assignment_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. On clicking the &amp;quot;view reports&amp;quot; icon, the user is directed to a new page that has the drop-down to select the required report.&lt;br /&gt;
&lt;br /&gt;
[[File:reports_view.jpg | frame | center]]&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
:4. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data is rendered.&lt;br /&gt;
:5. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data is rendered.&lt;br /&gt;
:6. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7. When the requested report type is &amp;quot;Calibration&amp;quot; and participant variable is not nil we check if the correct report is rendered or not.&lt;br /&gt;
:8. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Modified_Report_strategy_E1868.jpg&amp;diff=120874</id>
		<title>File:Modified Report strategy E1868.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Modified_Report_strategy_E1868.jpg&amp;diff=120874"/>
		<updated>2018-11-28T00:51:52Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: UML changes to represent module and method interactions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UML changes to represent module and method interactions&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120873</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120873"/>
		<updated>2018-11-28T00:50:41Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Refactored Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportFormatter module with following methods&lt;br /&gt;
:- ReviewReport&lt;br /&gt;
:- AuthorFeedbackReport&lt;br /&gt;
:- TeammateReviewReport&lt;br /&gt;
:- RubricQuestionReport&lt;br /&gt;
:- RevieweeCommentReport&lt;br /&gt;
:- CollusionReport&lt;br /&gt;
:- AnswerTagReport&lt;br /&gt;
:- CalibrationReport&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Modified Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
The major drawback in the above proposed methods is that the user needs to return to the &amp;quot;view assignments&amp;quot; page each time a different report must be viewed. This repeats in a loop every time the user wants to view different reports for the same assignment.&lt;br /&gt;
&lt;br /&gt;
'''***HENCE, THE ABOVE PROPOSED UI CHANGES ARE DEFERRED****'''&lt;br /&gt;
&lt;br /&gt;
The icon in view assignments page has been renamed from &amp;quot;view review report&amp;quot; to &amp;quot;view reports&amp;quot; to generalize.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
:4. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data is rendered.&lt;br /&gt;
:5. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data is rendered.&lt;br /&gt;
:6. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7. When the requested report type is &amp;quot;Calibration&amp;quot; and participant variable is not nil we check if the correct report is rendered or not.&lt;br /&gt;
:8. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_strategy_E1868.jpg&amp;diff=120872</id>
		<title>File:Report strategy E1868.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_strategy_E1868.jpg&amp;diff=120872"/>
		<updated>2018-11-28T00:48:35Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: uploaded a new version of &amp;amp;quot;File:Report strategy E1868.jpg&amp;amp;quot;: New implementation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;report strategy new&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_strategy_E1868.jpg&amp;diff=120871</id>
		<title>File:Report strategy E1868.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_strategy_E1868.jpg&amp;diff=120871"/>
		<updated>2018-11-28T00:46:47Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: uploaded a new version of &amp;amp;quot;File:Report strategy E1868.jpg&amp;amp;quot;: New implementation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;report strategy new&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120651</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120651"/>
		<updated>2018-11-21T03:23:16Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include a summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
:4. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants' data is rendered.&lt;br /&gt;
:5. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when the assignment does not have varying rubrics by round feature, we check the corresponding participants' data is rendered.&lt;br /&gt;
:6. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7. When the requested report type is &amp;quot;Calibration&amp;quot; and participant variable is not nil we check if the correct report is rendered or not.&lt;br /&gt;
:8. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;br /&gt;
&lt;br /&gt;
Since this refactoring project includes a new controller, the idea from the test perspective is to cover the basic scenarios of the feature. Complete feature coverage including corner case scenarios shall be committed based on the schedule for the project.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120647</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120647"/>
		<updated>2018-11-21T03:17:00Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework in the project. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows&lt;br /&gt;
&lt;br /&gt;
:1. When the requested report type is &amp;quot;SummaryByRevieweeAndCriteria&amp;quot;, we check that the corresponding data is rendered. This report should contain summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2. When the requested report type is &amp;quot;SummaryByCriteria&amp;quot;, we check that the corresponding data is rendered. This report should include summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3. When the requested report type is &amp;quot;ReviewResponseMap&amp;quot;, we check the corresponding report data is rendered. This reports participants, average and range.&lt;br /&gt;
:4. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and assignment has varying rubrics by round feature, we check the corresponding participants data is rendered.&lt;br /&gt;
:5. When the requested report type is &amp;quot;FeedbackResponseMap&amp;quot; and when assignment does not have varying rubrics by round feature, we check the corresponding participants data is rendered..&lt;br /&gt;
:6. When the requested report type is &amp;quot;TeammateReviewResponseMap&amp;quot;, we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7. When the requested report type is &amp;quot;Calibration&amp;quot; and participant variable is not nil we check if the correct report is rendered or not.&lt;br /&gt;
:8. When the requested report type is &amp;quot;PlagiarismCheckerReport&amp;quot;, we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120627</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120627"/>
		<updated>2018-11-21T02:47:20Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework for review mapping controller. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows  &lt;br /&gt;
:1. When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2. When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3. When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4. When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5. When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6. When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7. When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8. When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120625</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120625"/>
		<updated>2018-11-21T02:45:32Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Implementation specifics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework for review mapping controller. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows  &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120624</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120624"/>
		<updated>2018-11-21T02:44:50Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Refactored Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework for review mapping controller. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows  &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120623</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120623"/>
		<updated>2018-11-21T02:44:36Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Refactored Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
UML representation of the new classes is provided below&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework for review mapping controller. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows  &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120622</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120622"/>
		<updated>2018-11-21T02:43:35Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework for review mapping controller. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows  &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120621</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120621"/>
		<updated>2018-11-21T02:43:16Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
The use case of reports gives a broad overview of the functionality. It also provides the preliminary tests to be written to ensure the proper working of the feature. Below use case diagram represents the intent of reports functionality.&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
RSpec is the preferred testing framework for review mapping controller. The first set of test cases deal with the retrieval of different reports for assignments and validating the fields returned by the reports. The details are as follows  &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120612</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120612"/>
		<updated>2018-11-21T02:34:07Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Refactored Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
We are using RSpec testing framework to test our review mapping controller. We are planning to implement the following test cases: &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120611</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120611"/>
		<updated>2018-11-21T02:33:07Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Refactored Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Example.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
We are using RSpec testing framework to test our review mapping controller. We are planning to implement the following test cases: &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_strategy_E1868.jpg&amp;diff=120609</id>
		<title>File:Report strategy E1868.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_strategy_E1868.jpg&amp;diff=120609"/>
		<updated>2018-11-21T02:32:23Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: report strategy new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;report strategy new&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_strategy.jpg&amp;diff=120608</id>
		<title>File:Report strategy.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_strategy.jpg&amp;diff=120608"/>
		<updated>2018-11-21T02:31:17Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: uploaded a new version of &amp;amp;quot;File:Report strategy.jpg&amp;amp;quot;: report strategy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UML diagram for designing strategy gor reports&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120606</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120606"/>
		<updated>2018-11-21T02:29:35Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy compressed 85 keerthi.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
We are using RSpec testing framework to test our review mapping controller. We are planning to implement the following test cases: &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_use_case.jpg&amp;diff=120605</id>
		<title>File:Report use case.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Report_use_case.jpg&amp;diff=120605"/>
		<updated>2018-11-21T02:28:21Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: use case for reports&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;use case for reports&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120601</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120601"/>
		<updated>2018-11-21T02:26:02Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy compressed 85 keerthi.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case 75 compressed E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
We are using RSpec testing framework to test our review mapping controller. We are planning to implement the following test cases: &lt;br /&gt;
:1 When the type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When the type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When the type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants, average and range.&lt;br /&gt;
:4 When the type is FeedbackResponseMap and assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When the type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When the type is TeammateReviewResponseMap we check that there is a correct mapping between the participant and its response. We will return participant for the corresponding response.&lt;br /&gt;
:7 When the type is Calibration and participant variable is nil we check if the correct report is rendered or not.&lt;br /&gt;
:8 When the type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120598</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120598"/>
		<updated>2018-11-21T02:24:36Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy compressed 85 keerthi.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case 75 compressed E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
We are using RSpec testing framework to test our review mapping controller. We are planning to implement the following test cases: &lt;br /&gt;
:1 When type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants , average and range.&lt;br /&gt;
:4 When type is FeedbackResponseMap and  assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When type is TeammateReviewResponseMap we check that there is correct mapping between the participant and its response. We will return participant for corresponding response.&lt;br /&gt;
:7 When type is Calibration and participant variable is nil we check if correct report is rendered or not.&lt;br /&gt;
:8 When type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120597</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120597"/>
		<updated>2018-11-21T02:23:51Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy compressed 85 keerthi.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
[[Report use case 75 compressed E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
We are using RSpec testing framework to test our review mapping controller. We are planning to implement the following test cases: &lt;br /&gt;
:1 When type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants , average and range.&lt;br /&gt;
:4 When type is FeedbackResponseMap and  assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When type is TeammateReviewResponseMap we check that there is correct mapping between the participant and its response. We will return participant for corresponding response.&lt;br /&gt;
:7 When type is Calibration and participant variable is nil we check if correct report is rendered or not.&lt;br /&gt;
:8 When type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120596</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120596"/>
		<updated>2018-11-21T02:23:36Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy compressed 85 keerthi.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
[[Report use case 75 compressed E1868|frame|center]]&lt;br /&gt;
&lt;br /&gt;
We are using RSpec testing framework to test our review mapping controller. We are planning to implement the following test cases: &lt;br /&gt;
:1 When type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants , average and range.&lt;br /&gt;
:4 When type is FeedbackResponseMap and  assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When type is TeammateReviewResponseMap we check that there is correct mapping between the participant and its response. We will return participant for corresponding response.&lt;br /&gt;
:7 When type is Calibration and participant variable is nil we check if correct report is rendered or not.&lt;br /&gt;
:8 When type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120594</id>
		<title>E1868 remove reports from review mapping controller</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=E1868_remove_reports_from_review_mapping_controller&amp;diff=120594"/>
		<updated>2018-11-21T02:20:27Z</updated>

		<summary type="html">&lt;p&gt;Skeerth: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Background =&lt;br /&gt;
review_mapping_controller is the largest controller in Expertiza with 614 lines of code. The basic functionality of this controller is to assign reviewers to review artefacts or submissions by other participants or teams. But this controller includes a major chunk of code for generating and rendering several reports to the instructors. As part of the project E1837[http://wiki.expertiza.ncsu.edu/index.php/E1837_refactor_review_mapping_controller], the review_mapping_controller.rb file has been significantly modified to improve maintainability, code quality and code readability. To summarize, the review_mapping_controller was modified by separating the report generation functionality into a new helper named report_formatter_helper. This helper serves the logic for rendering different reports as per the instructor's request, thus segregating the controller specific code from the code for rendering the reports.&lt;br /&gt;
&lt;br /&gt;
Refactoring from E1837 served as one of the primary design improvements to achieve scalability with different reports. But, this improvement contradicts with the single responsibility Object-Oriented Design Principles. The aim of this project is to extrapolate the report_formatter_helper code into a reports_controller.&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
:- Separation of concerns&lt;br /&gt;
:- Generalize code to render reports&lt;br /&gt;
:- Modify the UI to list reports&lt;br /&gt;
:- Testing the newly introduced reports_controller&lt;br /&gt;
&lt;br /&gt;
=== Separation of Concerns ===&lt;br /&gt;
The reports and reviews are two different components which should not be clubbed. As part of this refactoring, the existing design of review_mapping_controller handles the following two different functionalities: &lt;br /&gt;
:1. Manage various reviewers&lt;br /&gt;
:2. Display and manage different reports&lt;br /&gt;
&lt;br /&gt;
This violates the single responsibility principle[https://en.wikipedia.org/wiki/Single_responsibility_principle] by handling two different functionalities. This project aims to segregate these functionalities into the following two controllers:&lt;br /&gt;
:1. review_mapping_controller to manage the functionalities of reviewers&lt;br /&gt;
:2. reports_controller to handle the reports functionalities&lt;br /&gt;
&lt;br /&gt;
=== Generalize code to display reports ===&lt;br /&gt;
The reports provide functionality such as presenting reviews for grading, showing author feedback (rejoinders), showing a table of all teammate reviews, showing a calibration report in an assignment where students rate the same work that has been previously rated by an instructor, and showing how many answers students have tagged.&lt;br /&gt;
&lt;br /&gt;
Every report boils down to one single idea i.e. loop through either participants or teams. This loop can be generalized so that the layout (includes headers, footers etc) can be consistent across reports while delivering the desired content.&lt;br /&gt;
&lt;br /&gt;
=== Modify the UI to list reports ===&lt;br /&gt;
In the current implementation, the reports are accessed by clicking on the “view review report” button in the buttons tray of an assignment, which leads into the review report page. This page contains a drop-down menu listing various reports to navigate to. &lt;br /&gt;
&lt;br /&gt;
This two-step navigation to view the reports can be converted into a single step. There are two ways of doing so:&lt;br /&gt;
:1. Introduce a new ‘...’ icon in the buttons tray, which on hovering on it, would show the menu of various reports&lt;br /&gt;
:2. Rename the &amp;quot;view review report&amp;quot; button to reports with a drop down menu listing all the report types&lt;br /&gt;
&lt;br /&gt;
=== Testing the new controller ===&lt;br /&gt;
Since the logic for report generation has been abstracted into a new controller, existing tests for report generation must be verified for regression and also check for improving the code coverage statistics.&lt;br /&gt;
&lt;br /&gt;
= Implementation specifics =&lt;br /&gt;
&lt;br /&gt;
=== Refactored Design ===&lt;br /&gt;
In order to follow good design practices, the logic to differentiate reports will be implemented using Strategy Pattern[https://en.wikipedia.org/wiki/Strategy_pattern]. &lt;br /&gt;
&lt;br /&gt;
Currently, there are eight different reports&lt;br /&gt;
:1. Review report&lt;br /&gt;
:2. Author feedback report&lt;br /&gt;
:3. Teammate review report&lt;br /&gt;
:4. Aggregated comments by rubric question&lt;br /&gt;
:5. Comment summary by reviewee (team)&lt;br /&gt;
:6. Potential collusion report&lt;br /&gt;
:7. Answer tagging report&lt;br /&gt;
:8. Calibration report&lt;br /&gt;
&lt;br /&gt;
The new implementation will have ReportStrategy class with following subclasses&lt;br /&gt;
:- ReviewReportStrategy&lt;br /&gt;
:- AuthorFeedbackReportStrategy&lt;br /&gt;
:- TeammateReviewReportStrategy&lt;br /&gt;
:- RubricQuestionReportStrategy&lt;br /&gt;
:- RevieweeCommentReportStrategy&lt;br /&gt;
:- CollusionReportStrategy&lt;br /&gt;
:- AnswerTagReportStrategy&lt;br /&gt;
:- CalibrationReportStrategy&lt;br /&gt;
&lt;br /&gt;
Below is a simple UML diagram of these new classes&lt;br /&gt;
&lt;br /&gt;
[[File:Report strategy compressed 85 keerthi.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=== Modified UI ===&lt;br /&gt;
:1. One of the proposed changes to existing UI involves adding a new button to the buttons tray. For the assignment ‘Final Project (and Design Document)’ below, hovering over the ‘...’ icon (highlighted in the red box) should bring up the menu of additional reports. The image is only an illustration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Reports icon.jpg|frame|centre]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:2. Another proposed change is to modify &amp;quot;view review report&amp;quot; button to &amp;quot;view reports&amp;quot; drop-down menu listing all the available reports for the respective assignment.&lt;br /&gt;
&lt;br /&gt;
= Test Plan =&lt;br /&gt;
&lt;br /&gt;
[[File:Report use case 80 compressed E1868.jpg|frame|center]]&lt;br /&gt;
&lt;br /&gt;
We are using RSpec testing framework to test our review mapping controller. We are planning to implement the following test cases: &lt;br /&gt;
:1 When type is SummaryByRevieweeAndCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:2 When type is SummaryByCriteria we check that the corresponding data is rendered. This method should return summary, reviewers, average scores by reviewee, average score by round and average score by criterion.&lt;br /&gt;
:3 When type is ReviewResponseMap we check the corresponding report data is rendered. This returns participants , average and range.&lt;br /&gt;
:4 When type is FeedbackResponseMap and  assignment has varying_rubrics_by_round feature we check the corresponding report data is rendered. It should return participants.&lt;br /&gt;
:5 When type is FeedbackResponseMap and when assignment does not have varying_rubrics_by_round feature we check the corresponding page to report is rendered and participants are rendered.&lt;br /&gt;
:6 When type is TeammateReviewResponseMap we check that there is correct mapping between the participant and its response. We will return participant for corresponding response.&lt;br /&gt;
:7 When type is Calibration and participant variable is nil we check if correct report is rendered or not.&lt;br /&gt;
:8 When type is PlagiarismCheckerReport we check if the correct report page is rendered or not.&lt;/div&gt;</summary>
		<author><name>Skeerth</name></author>
	</entry>
</feed>