Student Progress

Course Builder’s student progress tracking feature provides visual indicators that make it easy for students to see which parts of a course they have attempted. Since not all questions have answers that are clearly right or wrong, this feature explicitly does not attempt to track correctness of the students’ answers.

Visual Presentation

A course object is a part of a course that can be completed by the student; examples include units, lessons, question groups and questions. Next to each course object, we will show a small circle. This circle will have one of three states: empty, half-full, and full.

The states that each of these circles represent are depicted in the following table:

Image Description State
Not started indicator Empty circle Not started
In progress indicator Half-full circle In progress
Completed indicator Full circle Completed

The visual indicators are language neutral. In order to satisfy accessibility requirements, they will have internationalized alt text that describes the state. This text is visible when a user’s mouse hovers over one of the images; it is also read by screen readers.

Note: There was consideration about having a progress bar with one of five different states: 0% complete, 25% complete, 50% complete, 75% complete and 100% complete. This was rejected for two reasons: user testing suggested that it was too complex, and the additional bucketing did not seem to provide a lot of added value to the student (since a student would mostly care about whether they had finished the activity or not, rather than the precise degree of completion).

Representing the State of Composite Objects

The completion status of a composite object depends directly on the completion status of its children, and is represented as either Not Started (0), In Progress (1) or Completed (2). The composite object is considered to be in state 0 if all its children are in state 0, and it is considered to be in state 2 if all its children are in state 2. In all other cases it is considered to be in state 1 (In Progress). Note that the only state transitions that can occur are from 0 to 1, and from 1 to 2.

When the state of a composite course object changes from 0 to 1, the update process calls the update method for the parent course object, which changes the parent’s state to 1 if it isn’t 1 already.

When the state of a composite course object changes from 1 to 2, the update process calls the update method for the parent course object, which checks whether all its children are completed, and, if so, changes the parent’s state to 2.

Storing the Data

The data will be stored in a generic StudentPropertyEntity object that is persisted in the Google App Engine datastore. The object will be keyed by the student id and the name of the student property. For this feature, the corresponding property will be ‘linear-course-completion’. Someone may customize different completion models for nonlinear courses, and she may also want to associate other data with individual students.

Scope

The primary logic for this is implemented as a standalone model class in models/progress.py. It will be referred to by the controller code in modules/courses/lessons.py and will refer to the StudentPropertyEntity model in models/models.py.

Courses will implement a get_progress_tracker() method that returns an instance of the progress tracking class. This means that the only access to the progress tracker is from the Course class, which ensures that the progress tracker always remains within the bounded context of a Course and is not accessible outside that context.

Privacy Considerations

The owner of the Course Builder app can turn student progress tracking on or off, in accordance with the terms under which the app owner offers his/her course. The progress tracking functionality collects and stores data on a per-student basis. This is set in the Course Data Settings under Enable Student Analytics.

Note that the Course Builder open-source package can be downloaded and run by third parties; it is up to each of these third parties to decide on the data collection and privacy policies for their courses, and they may do whatever they choose with the student data they collect using this project.