Classy helps automate the distribution and grading of assignments. Classy integrates with GitHub to create an environment where students can gain real-world and practical hands-on experience with Git version control while getting real-time feedback on the quality of their code.
Classy's front-end consists of a front-end JavaScript framework and supporting a REST-based API called Portal. Portal helps instructors manage course administration by automating tasks, such as setting up assignments, grading, and grade management for instructors. Classy has another REST-based API to manage complex back-end GitHub and grading logic called AutoTest. AutoTest integrates with GitHub to create an interactive grading experience.
AutoTest's features include automated feedback to grade requests from students that they request on commit
comments on GitHub. Grade feedback is completely customizable and developed by an instructor to meet the requirements of their course. Feedback can be produced where a student code builds, fails to build, reaches a grade threshold, etc. and allows for additional reports to be included.
- Dashboard to view grading results and logs
- Automatically mark course assignments using Docker containers
- 1-to-1 or 1-to-many Docker container to assignment grading capabilities
- Manage when assignments are automatically graded with open and close dates
- Distribute private repositories to students
- Distribute private repositories to teams of students
- View/export grades in CSV format
- Import/update Classlist information directly through API
- Implement custom features using JavaScript MVC and REST-based APIs
- Students receive grade feedback and build failure notifications when new commits are pushed to GitHub.
- Student grade feedback customizable time delays
- Custom build Docker containers to grade code how you prefer
- Access to container logs and grades by TAs get help support students
- Docker containers can mark 1-to-many assignments and 1-to-1 assignments
- Supports regression testing
In the following scenarios, an instructor has configured the lab2
deliverable to be marked by a custom-built AutoGrade container. AutoTest runs the AutoGrade container each time a student pushes code to GitHub and marks the latest commit. The expected behaviour of AutoTest is demonstrated based on the student actions.
A student pushes code to a repository and requests feedback for the commit displayed in the view. Students request grading by commenting, @autobot #deliverableName
. AutoBot begins to grade the assignment and gives the student a notification to wait for the grade result. Once the assignment is graded, the computed message programmed by the instructor in the Docker container is output in the commit SHA comment area.
A student pushes code to the repository that does not compile and requests a grade for it. The container has been programmed to output a computed message that includes a compilation failure. The instructor does not explicitly say that the grade feedback is 0% for this commit, but a 0% grade has been recorded in the Portal Admin Dashboard, included in a report.json
file output to AutoTest from the container.
A student pushes code to a repository and requests feedback for the commit displayed in the view. The request for feedback is too soon, as a longer time period was configured by the instructor in the Deliverable Admin Configuration Panel. AutoBot
tells the student to wait for the remaining time period.
A student pushes code to a repository but cannot request grade feedback because of the grade feedback delay. In any such case, an admin or staff may override the delay and request feedback.
A student may request that pushed code is re-graded if an error is suspected with the grade result. An admin or staff may force the re-grade of a commit. If a prior grade result exists, it will be purged and replaced by the new result.
If there is a known error with a grade result, but the grade results should still be kept secret, an admin or staff may request a silent re-grade of a commit. If a prior grade result exists, it will be purged and replaced by the new result.