CSC/ECE 517 Fall 2014/OSS E1467 rsv

From Expertiza_Wiki
Revision as of 15:57, 29 October 2014 by Vjsangha (talk | contribs)
Jump to navigation Jump to search

Expertiza - Refactoring LeaderBoard model

Introduction

Expertiza<ref name="expertiza>Expertiza http://wikis.lib.ncsu.edu/index.php/Expertiza</ref> is a web application available to both students and professors. The Expertiza project is a system to create reusable learning objects through peer review. Expertiza supports team projects and the submission of almost any document type, including URLs and wiki pages. Students can keep a track of their assignments, teammates and can conduct peer reviews on diverse topics and projects. It is an open source project developed on Ruby on Rails platform. More information on Expertiza can be found here. The source code can be forked and cloned for making modifications.

As a part of the coursework of Object Oriented Design and Development, we were expected to refactor the funtionality of some modules of Expertiza. This wiki provides an insight into our contributions to the Open Source Software project 'Expertiza' by Refactoring the Users Controller.

Project Description

Classes involved: leaderboard.rb and associated other model and controllers classes. What it does: This class gets all the assignments in the course and all the participants in a course or in an assignment. It also caches all the scores of the participants in various assignments. Its responsible for calculating top 3 individuals which is to be displayed as the leaderboard for the class and generates a metric which aggregates peer review scores for all course assignments and then sorts individuals. Also it has a personal leaderboard to see a personal aggregated score. What needs to be done: Refactor getParticipantEntriesInAssignmentList method. Its very complex (Complexity=142). Seperate out computation of CS entries(metric) and refactor it to be more modular and elegant. You can even come up with a better metric to calculate an aggregate score for all peer reviews, metareviews(if any), teammate review, etc. Assign more weights to programming assignments. You will need to refactor other dependent classes. Come up with an efficient way to search for participants based on assignment ids. Refactor score hash for personal achievements. (Method: extractPersonalAchievements). Seperate out method which will rank individual personal achievements. Refactor addEntryToCSHash according to your new metric method.