Welcome to Auto Grader
This is an app designed by by Sam Stern, Eli Esrig, Zihao Wang, Calum Middlemiss.
To access our project website, please visit Auto-grader.
The idea behind AutoGrader came from seeing the head TA in Brandeis Computer Science intro class struggle on a week-to-week basis to push out grades and grading assignments for the TA team.Before he wrote a script to automate some work, the workflow for grading was as follows:
1.Student submits assignment to LATTE
2.A few minutes after deadline, head TA downloads zip file of all submissions from LATTE
3.Head TA unpacks zip file and puts submissions into directories
4.Head TA replaces each student’s test suite with master test suite
5.Head TA runs tests on each student’s code
6.Head TA enters score into spreadsheet
7.repeated for (student : students)
8.After all of this, grading groups assigned and sent out to grading TAs
9.Repeat process as needed for late submissions
Using our project, the grading workflow will be:
1.Student submits assignment to Auto grader
2.The server runs Junit test online
3.Assignments send to TA evenly based on Junit result after submissions are due
4.TA grades the coding style and updates on the website
5.Professor can look the grades online and export them as csv file
We maintain a central webserver that all users interact with. This contains a database of assignments, student submissions, grades, grading groups, and users. All webpages are served from this webserver, and all asynchronous actions are coordinated by this webserver.
We keep a worker server, which coordinates grading and restructuring tasks that are run in Docker containers. Docker provides a RESTful API which can be accessed through Ruby bindings, and it provides the application isolation that we specified in the second point of our desired structure.
We use persistent storage in S3 to allow for indirect and secure file transfer between the webserver, worker server, and docker containers. We chose to use a web-based service due to its availability, fault tolerance, and security.
Among the big issues that we contended against was the topological complexity of our database models. We decided early on that we had to have a single Users table, given that it makes authentication simpler and that users can have multiple roles (that is to say, a single user may be a TA for a course and a student in another course). Having three different many-to-many relations between the same pair of tables was difficult to write, and required many migrations.
- We would want to integrade Brandeis authentication and use database provided by Brandeis to update user information
- Expand test languages other than Java, such as C++, Python, Ruby, etc
- Allow TA to view codes directly on the webstie with text editor
Having trouble with Auto grader? Contact [email protected] for support and we’ll help you sort it out.