/grbl-grader

A grading infrastructure based on Google Apps Scripts.

Primary LanguageJavaScript

A suite of grading infrastructure scripts written in Google Apps Script designed to allow for modular, non-traditional grading systems. At the heart of the system is GRBL ("gerbil"), the grade report building language, which allows for the distribution of extremely customizable (and stylish) feedback reports.

Why GrblGrader?

  • Your course uses a grading system (such as category or bucket-based grading) that doesn't fit well into traditional grading infrastructures (such as Gradescope or Evalpig).
  • GrblGrader's templating language allows you to easily create new feedback reports with minimal scripting—especially important if your course has multiple assignments with different evaluation formats (such as major, distinct projects throughout the semester).
  • Melds grading organization with the expressive and computational power of Google Spreadsheets. "Program" your grading infrastructure the way you want it—link spreadsheets together, write formulas, etc. and let GrblGrader handle feedback distribution.
  • Host your grading infrastructure entirely in the cloud.

Why Shouldn't You Use GrblGrader?

  • Customizability is prioritized over ease-of-use. You'll need to do a bit of setup creating GRBL templates for each assignment and figuring out your Google Drive setup.

Components

The following scripts work in tandem to create GrblGrader (but can be removed or modified as necessary depending on your desired workflow):

Script Name Purpose
🎭 anonymization-script.gs After collecting uploaded files from a Google Form, anonymizes submissions with a unique identifier and creates a mapping between anonymous IDs to student emails.
🗺️ allocation-script.gs Allocates anonymized handins to TAs with respect to blocklists.
🤖 allocation-mailer.gs Small utility script for distributing lists of grading assignments to TAs.
📨 email-script.gs Distributes grade reports to students by importing feedback and comments from a spreadsheet into TA-defined templates.

Getting Started

This section of the guide walks through a standard grading workflow using the scripts mentioned above. (It goes in the general order in which you would use the scripts.) Specific usage details are delegated to the script comments, so see the script headers and arguments for more information.

anonymization-script.gs

After collecting uploaded files from a Google Form, you should run this script to anonymize submissions with a unique identifier (the "anonymous ID"). This will create a spreadsheet (the "anonymous ID mapping spreadsheet") between anonymous IDs to student emails.

Then, it will copy the uploaded files into anonymized folders in Google Drive, like in the following structure:

└─ AssignmentName
   └─ 1
      └─ code.arr
      └─ tests.arr
   └─ 2
      └─ code.arr
      └─ tests.arr
   └─ ...

allocation-script.gs

Allocates anonymized handins to TAs with respect to blocklists. You'll need the anonymous ID mapping spreadsheet generated by the anonymization-script.gs script to use this script.

Once you have your mappings, running the script against those mappings and a spreadsheet representing the blocklists for each of your TAs will create a new sheet in the anonymous ID mapping spreadsheet (the "allocations sheet") that contains the anonymous IDs allocated to each TA.

The script guarantees that all students blocklisted by a particular TA will never be assigned to that TA. This means that in some edge case scenarios, it is possible that an uneven number of handins will be assigned to each TA.

allocation-mailer.gs

Mails out the list of assigned handins to grade (from the allocations sheet) to each TA. You'll need to make sure you've generated the "Allocations" sheet using the allocation-script.gs before running this script.

The Grading Spreadsheet and Report Template

At this point, you'll want to create a "grading spreadsheet" and "report template".

More documentation TBA.

email-script.gs

The script is the heart of the grading infrastructure. It maps the anonymous ID mapping spreadsheet with the grading spreadsheet to determine which anonymized records in the grading spreadsheet correspond to a given (unanonymized) student. Then, it "builds" grade reports for each student using a "report template" (discussed more in depth below). Finally, it emails the reports to each student.

Before continuing, you'll want to make sure you have a "Control Spreadsheet". The Control Spreadsheet defines the centralizing spreadsheet for all GRBL spreadsheets–you should use it to organize your links for the anonymous ID mapping spreadsheet, the grading spreadsheet, and the report template for each assignment.

More documentation TBA.