ORA Assessment Step Requirements
Usage
Various assessment steps can be enabled for ORA problems, and each defines its requirements slightly differently. A step's requirements are used to determine when a step has been completed, both:
by the learner (
submitter_is_finishedin code), "has the learner completed all their requirements for this step?) andfor the learner (
assessment_is_finishedin code), "has everything been done to give the user their grade"?).
Different steps may make use of one, none, or both of these definitions of "completed". These methods are defined in openassessment/assessment/api/XXX.py, where XXX is the name of the step in question. These methods are called when the workflow is trying to update, as seen in update_from_assessments in https://github.com/edx/edx-ora2/blob/master/openassessment/workflow/models.py.
Here are all of the possible steps and the requirement values they define:
Example-based (AI) grading
Defines
submitter_is_finishedas always True, since the submitter should never have to do anything for this step.Defines
assessment_is_finishedas True if an ai-graded assessment has been made. This step is decrecated(-ish), and should not be used going forward, but it exists.If you're reading this page and need to know more about AI-grading, you're probably redefining how that works anyways.
Learner Training: This step, when enabled, will force learners to complete a training step teaching them how to assess peers before they actually assess peers. This is done by having the staff user, at time of problem authoring, define one or more examples and the 'correct' assessments of those answers. The requirements for this step are calculated dynamically by getting the number of examples specified in the problem definition (https://github.com/edx/edx-ora2/blob/master/openassessment/xblock/workflow_mixin.py#L87), and are passed around the backend as a dictionary containing a key 'num_required' and an integer value.
Defines
submitter_is_finishedby checking for completed examples, and checking if that number >= thenum_requiredvalue.Does not define
assessment_is_finishedat all, but that ends up being a moot point due to our step ordering rules forcing peer and staff (the only steps for whichassessment_is_finishedis out of the learner's control) to always be after training.
Peer Grading: This step, the "classic" use case for ORA, is used to have peers grade each other.
Peer grading takes it's requirements as a dictionary with 2 keys:
must_gradeandmust_be_graded_by. Both values are integers. As one would think,must_gradeis used insubmitter_is_finished(has the learner graded #must_grade# peers yet?), andmust_be_graded_byis used inassessment_is_finished(have #must_be_graded_by# other students graded the learner, so we can calculate and show a grade?)
Staff Grading: Staff grading can occur in 2 forms - as an override on any problem, and as a required step if enabled by the course author. I'll highlight the features of each type below. Keep in mind that the only entry in a staff step's requirements (if it exists) will have
requiredas a key, and a boolean value. Also, the learner will never have to do anything for this step, sosubmitter_is_finishedis always True.Both required and override: Both steps, once completed, will serve as the “final” grade for a learner, regardless of any other types of assessments made before or after the staff assessment (a later staff assessment will override a pre-existing one). Because of this finality, either type of staff grade will make
assessment_is_finishedreturn True for all steps, as a grade exists and nothing can change that fact. Note, however, thatsubmitter_is_finishedis totally separate, and a learner may still have to complete their requirements to receive their grade.Override: As an override is always possible, staff assessment will always be an enabled step.
assessment_is_finishedwill only return True if the requirements dictionary for this step is present, said dictionary defines 'required' to be True, and a staff assessment s present. If any of those 3 clauses is False, then the function returns False. Note that if staff grading is not required (no step requirements OR 'required': False), this will not prevent the user from finishing the problem and receiving a grade.Required: If the course author defined a problem to be staff graded, then the requirements dictionary for this step will be {'required': True}. In this case,
assessment_is_finishedwill return True if a staff assessment is present for the learner, and otherwise prevent the user from finishing the problem and receiving a grade.
Definition
During execution, the requirements are all stored together in a single dictionary, with each step's specific requirements stored as a value entry keyed on the step's name. These steps are not held in-memory, but rather fetched from the assessment modules every time the workflow for a problem is updated (see workflow_requirements() in https://github.com/edx/edx-ora2/blob/master/openassessment/xblock/workflow_mixin.py). The reasoning for this is that a course author may want to change a step's requirements, and have all learners see the effect of this. (Example - a peer grading problem defines must_grade and must_be_graded_by to both be 4, but only 3 learners ever complete the problem. The course author changes this number to be 2 for both values, and the learners see their now-completed grades upon refreshing the problem page.)
Thanks to this "fetch from the assessments" nature, the requirements are defined by the course author when setting up the problem in studio, and are then serialized into the problem's XML, to be loaded by the LMS. For an example, see https://github.com/edx/edx-ora2/blob/master/openassessment/xblock/test/data/peer_only_scenario.xml#L90.