Contrib: Gradebook2
  1. Contrib: Gradebook2
  2. GRBK-486

Provide for pluggable grading schemes - e.g., drop lowest of 2 scores and double the remaining

    Details

    • Type: Feature Request Feature Request
    • Status: Closed Closed
    • Priority: Minor Minor
    • Resolution: Won't Fix
    • Affects Version/s: trunk
    • Fix Version/s: None
    • Component/s: GWT Client, Services
    • Labels:
      None
    • Previous Issue Keys:

      Description

      This is a placeholder for work to provide a mechanism for plugging in oddball grading schemes. For example, in a category of Tests with 2 assessments, allow dropping the first assessment if it is lower than the 2nd and if dropped, double the 2nd test score. This particular scheme is (probably) unique to UM and we wouldn't expect it to be in the release (unless property controlled and defaulted off), but having the ability to plug such a scheme in would be beneficial to the community.

        Issue Links

          Activity

          Hide
          James Renfro added a comment -
          This will require refactoring the current calculations classes somewhat, and will be a fairly extensive piece of work in terms of regression testing.

          But as a jumping off point, we may want to make the bean discovery of the org.sakaiproject.gradebook.gwt.sakai.GradeCalculations interface work in the same manner as org.sakaiproject.gradebook.gwt.sakai.InstitutionalAdvisor -- to take the current bean as the default and to allow any institution to inject an alternative bean (that implements the interface) into the Spring application context of Sakai as a whole, and have GB2 preferentially choose the second bean.

          This would allow institutions to rework calculations in a somewhat heavyweight way -- probably not ideal overall, but it would at least be better than our current situation where such changes require local modification of the gradebook2 project itself.
          Show
          James Renfro added a comment - This will require refactoring the current calculations classes somewhat, and will be a fairly extensive piece of work in terms of regression testing. But as a jumping off point, we may want to make the bean discovery of the org.sakaiproject.gradebook.gwt.sakai.GradeCalculations interface work in the same manner as org.sakaiproject.gradebook.gwt.sakai.InstitutionalAdvisor -- to take the current bean as the default and to allow any institution to inject an alternative bean (that implements the interface) into the Spring application context of Sakai as a whole, and have GB2 preferentially choose the second bean. This would allow institutions to rework calculations in a somewhat heavyweight way -- probably not ideal overall, but it would at least be better than our current situation where such changes require local modification of the gradebook2 project itself.
          Hide
          David Pang added a comment -
          In specific, LSA Chem 130 requires a grading scheme for an exam category which holds two exams: Drop the first exam scores and double the second exam, when the second score is greater then the first. This is also can be re-written as ' Drop up to 1 exam score (at exam category) to make most the category achievement, and second exam is undroppable.

          Now, if we can add an additional check box 'undroppable' at the item settings, and replace 'drop lowest' with 'drop item up to [ ]' (to make the most) at the category, this will be more useful to other classes. I recall one of the enhancement from Physics, they want to drop one lowest score from 6 midterms while final is undroppable.

          Let's assumed here to develop an modified version based on (1-N) algorithm on weighted items/categories (as you mentioned it will be a done deal on GB2), James, can you give us some guide on the work ahead?

          Show
          David Pang added a comment - In specific, LSA Chem 130 requires a grading scheme for an exam category which holds two exams: Drop the first exam scores and double the second exam, when the second score is greater then the first. This is also can be re-written as ' Drop up to 1 exam score (at exam category) to make most the category achievement, and second exam is undroppable. Now, if we can add an additional check box 'undroppable' at the item settings, and replace 'drop lowest' with 'drop item up to [ ]' (to make the most) at the category, this will be more useful to other classes. I recall one of the enhancement from Physics, they want to drop one lowest score from 6 midterms while final is undroppable. Let's assumed here to develop an modified version based on (1-N) algorithm on weighted items/categories (as you mentioned it will be a done deal on GB2), James, can you give us some guide on the work ahead?
          Hide
          James Renfro added a comment - - edited
          Thanks David, that makes a lot of sense as a general case -- adding the "undroppable" flag.

          I'm wondering if this eliminates the need for the "double the second exam" part, since if we make the second exam undroppable, but allow the first exam to be dropped if it is the lowest one, then the normal projecting of course grades would be in effect, so if the first exam is dropped the second exam would be scaled up to be worth the entire category... would this satisfy the instructors of LSA Chem 130?

          I believe the effect would be the same, but it would eliminate the need for screwy instance-specific code. We could simply add the undroppable feature and turn it on/off with a sakai.properties flag.

          Okay, so assuming we modify to use the w(1-x) as described in GRBK-480, then I see the work involved for this one as the following:

          (1) create a new table with the new boolean param (see GRBK-479 for why this is necessary -- we can use the same table for both tickets)
          (2) modify the queries in GradebookToolService.java so they join against this table whenever we're bringing back Assignments
          (3) add a new enum value IS_UNDROPPABLE to org.sakaiproject.gradebook.gwt.client.model.key.ItemKey
          (4) modify the interface org.sakaiproject.gradebook.gwt.client.model.Item (and it's two implementation classes) to include the accessors for this new enum
          (5) in the client code, modify org.sakaiproject.gradebook.gwt.client.gxt.view.panel.ItemFormPanel.java by adding a new Field for the undroppable enum value, add a call to initField (in initState) for that new column -- wire in turning this on/off using the SCALED_EXTRA_CREDIT enum as an example -- requires changes in Gradebook2ComponentServiceImpl as well.
          (6) in org.sakaiproject.gradebook.gwt.sakai.Gradebook2ComponentServiceImpl.java, modify the following methods to take into account the new param
          - doCreateItem()
          - updateItem()
          - getGradeItem()
          (7) modify org.sakaiproject.gradebook.gwt.sakai.calculations.GradeRecordCalculationUnit (and its constructor) to include a boolean for this value
          (8) in org.sakaiproject.gradebook.gwt.sakai.calculations.CategoryCalculationUnit, modify the for loop at the bottom of the calculate() method to check to see if the GradeRecordCalculationUnit is undroppable... if it is I think you just want to skip that drop logic and add it to the units to count, but you'll need to figure out a sensible way to break out of that loop under the condition where you have more items to drop but none of them as droppable... this is the biggest complexity of the work.
          (9) You'll need to do something similar in org.sakaiproject.gradebook.gwt.sakai.calculations.GradebookCalculationUnit.sumPoints() to handle the points-based gradebooks.



          Show
          James Renfro added a comment - - edited Thanks David, that makes a lot of sense as a general case -- adding the "undroppable" flag. I'm wondering if this eliminates the need for the "double the second exam" part, since if we make the second exam undroppable, but allow the first exam to be dropped if it is the lowest one, then the normal projecting of course grades would be in effect, so if the first exam is dropped the second exam would be scaled up to be worth the entire category... would this satisfy the instructors of LSA Chem 130? I believe the effect would be the same, but it would eliminate the need for screwy instance-specific code. We could simply add the undroppable feature and turn it on/off with a sakai.properties flag. Okay, so assuming we modify to use the w(1-x) as described in GRBK-480 , then I see the work involved for this one as the following: (1) create a new table with the new boolean param (see GRBK-479 for why this is necessary -- we can use the same table for both tickets) (2) modify the queries in GradebookToolService.java so they join against this table whenever we're bringing back Assignments (3) add a new enum value IS_UNDROPPABLE to org.sakaiproject.gradebook.gwt.client.model.key.ItemKey (4) modify the interface org.sakaiproject.gradebook.gwt.client.model.Item (and it's two implementation classes) to include the accessors for this new enum (5) in the client code, modify org.sakaiproject.gradebook.gwt.client.gxt.view.panel.ItemFormPanel.java by adding a new Field for the undroppable enum value, add a call to initField (in initState) for that new column -- wire in turning this on/off using the SCALED_EXTRA_CREDIT enum as an example -- requires changes in Gradebook2ComponentServiceImpl as well. (6) in org.sakaiproject.gradebook.gwt.sakai.Gradebook2ComponentServiceImpl.java, modify the following methods to take into account the new param - doCreateItem() - updateItem() - getGradeItem() (7) modify org.sakaiproject.gradebook.gwt.sakai.calculations.GradeRecordCalculationUnit (and its constructor) to include a boolean for this value (8) in org.sakaiproject.gradebook.gwt.sakai.calculations.CategoryCalculationUnit, modify the for loop at the bottom of the calculate() method to check to see if the GradeRecordCalculationUnit is undroppable... if it is I think you just want to skip that drop logic and add it to the units to count, but you'll need to figure out a sensible way to break out of that loop under the condition where you have more items to drop but none of them as droppable... this is the biggest complexity of the work. (9) You'll need to do something similar in org.sakaiproject.gradebook.gwt.sakai.calculations.GradebookCalculationUnit.sumPoints() to handle the points-based gradebooks.
          Hide
          Beth Kirschner added a comment -
          Downgrade priority to Minor (this indicates a lowered priority for this and is not indicative of the effort, which is likely large)
          Show
          Beth Kirschner added a comment - Downgrade priority to Minor (this indicates a lowered priority for this and is not indicative of the effort, which is likely large)
          Hide
          Beth Kirschner added a comment -
          UM is no longer interested in this feature
          Show
          Beth Kirschner added a comment - UM is no longer interested in this feature

            People

            • Assignee:
              Unassigned
              Reporter:
              Susan E McDowell
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: