From e7ab06c7648fefd7e38f5fa3b91d6e6b5f619d6e Mon Sep 17 00:00:00 2001 From: Razvan Deaconescu Date: Thu, 28 Sep 2023 16:27:39 +0300 Subject: [PATCH] infrastructure/checkers: Fill contents Update contents for "Validators and Checkers" section to the "Support Infrastructure" chapter. Signed-off-by: Razvan Deaconescu --- .../checkers/media/vmchecker-arch.png | Bin 0 -> 40139 bytes .../infrastructure/checkers/reading/read.md | 130 +++++++++++++++++- config.yaml | 2 + 3 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 chapters/infrastructure/checkers/media/vmchecker-arch.png diff --git a/chapters/infrastructure/checkers/media/vmchecker-arch.png b/chapters/infrastructure/checkers/media/vmchecker-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..d16abbd0486ce1f5f7f5cebc05351d6d285db664 GIT binary patch literal 40139 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 D5wooj literal 0 HcmV?d00001 diff --git a/chapters/infrastructure/checkers/reading/read.md b/chapters/infrastructure/checkers/reading/read.md index 1aadde0..2607581 100644 --- a/chapters/infrastructure/checkers/reading/read.md +++ b/chapters/infrastructure/checkers/reading/read.md @@ -1,12 +1,130 @@ # Validators and Checkers -Owner: Sergiu Weisz -Reviewer: Mihai Băruța +One of the greatest challenges of educators is the evaluation of submissions from learners. +They require an extensive amount of time, directly proportional with the number of learners. +Automating the evaluation process frees evaluators to work on more creative aspects and also gives the learner a templated, quick way of assessing their skills and knowledge. +As such, by using tools to validate and check submissions, we are able to scale the evaluation to a large number of learners. +Also, evaluators can now focus on content development and improvement. -definitions +For this, Open Education Hub provides [`vmchecker`](https://github.com/open-education-hub/vmchecker-next), an open source software solution for assignment evaluation. +`vmchecker` uses integrations with other tools such as Moodle user interaction, and [GitLab](https://about.gitlab.com/) for running the code in a containerized [Docker](https://www.docker.com/)-based safe environment. -roles: automation +Currently `vmchecker` is targeted and has been used for Computer Science topics. +It can be expanded to other technical topics and potentially, with specific tools for validation, to other topics as well. -`vmchecker` +## Goals -local checking, local environment (Docker-based) +`vmchecker` is built to satisfy the goals of the Open Education Hub project. +They are the same goals as the ones set [`oer-builder`](../../processing/reading/read/md), but tailored for submission checking. + +`vmchecker` is **easy to use and setup** by both infrastructure managers, educators and learners. +This can be done through automation, providing setup scripts to allow for automatic setup. +Containers are used in modern software development to use a one button solution for software deployment. +We aim to use containers to allow infrastructure administrators to start the infrastructure with needing a special environment. +Containers also allow local checking using scripts to automate the setup. + +As resource usage increases, and demand is increased, `vmchecker` is able to **scale the amount of submissions that it checks in parallel**. +A parallel approach means learners don't have to wait in long queues for assignment checking. + +`vmchecker` is **open source software** and is compatible with the [Open Educational Resources requirements](https://oercommons.org/). +Using open source solutions allows us to quickly discover issues and make updates. + +Many education institutions use e-learning platforms to manage classrooms. +These tools allow users to upload materials, evaluate learners, and grade assignments using a single application. +`vmchecker` is integrated with existing educational platforms (such as Moodle). +This makes it more appealing to integrate for institutions that already rely on these systems. +Educational institutions need a seamless process from assignment submission to grading in a shared grade book. + +## Architecture + +`vmchecker` has been built with a modular architecture, so that it fits the diverse needs of educational institutions. +The figure below displays the minimal components needed in order to have a working `vmchecker` service. + +![`vmchecker` Architecture](../media/vmchecker-arch.png) + +The three components in the figure are: + +- **frontend**: receives assignments from students, uploads them to the `vmchecker` middleware and receives the assignment run information after it has finished; +- **item middleware**: receives requests from the frontend and uploads the submission to the checking infrastructure; + the infrastructure runs the submission, waits for the result, and then uploads it to the frontend; +- **submission runner**: receives submission checking requests from the middleware service, runs the submission using a specific recipe. + +[GitLab](https://about.gitlab.com/) was chosen as a hosting platform for Git repositories, as it is a Free and Open Source Solution that can be used as an open online platform, or it can be installed at an institution. +A workflow advantage for GitLab is that learners can include educators to a private repository. +This makes it easier for learners and educators to debug faulty code together. +Because the API is open, the operation of granting educators access can be automated using scripts. + +## User Scenarios + +`vmchecker` has been built with scenarios for the user roles: + +* Infrastructure managers handle the `vmchecker` installation and ensure a service level agreement, especially during high load situations, such as submission deadlines. +* Educators configure repositories for submissions, and integrate them with `vmchecker`. +* Learners make use of the submission repositories and the `vmchecker` installation to validate submissions and receive grading. + +Each role interacts with `vmchecker` through a user-friendly interface. +This is the motivation for using GitLab that already provides the interface adapted for `vmchecker` scenarios. + +## Infrastructure Manager + +The infrastructure manager first needs to set up the `vmchecker` frontend and middleware. +The [`vmchecker` Moodle plugin](https://github.com/open-education-hub/vmchecker-next-ui) is used as a frontend that can be copied and installed on the Moodle instance. +The middleware is to be set up with all its required services using the Docker containers provided in the [`vmchecker` repository](https://github.com/open-education-hub/vmchecker-next). + +`vmchecker` doesn't have to be set up with an institutional GitLab instance, it can also use the [official public GitLab instance](https://about.gitlab.com/). +It does not require any specific features that cannot be accessed by regular users using the GitLab REST API. +An institution may want to use their own GitLab instance in order to manage per user limits, or to give users access to more resources, and connect to institutional user management. + +Detailed instructions for infrastructure managers are part of the [official `vmchecker` Moodle Admin Handbook](https://github.com/open-education-hub/vmchecker-next/wiki/Moodle-Admin-Handbook). + +## Educator + +Educators need only interact with the frontend and GitLab to create a submission repository. +The teacher must create a repository based on [the template provided by the `vmchecker` team](https://github.com/open-education-hub/vmchecker-next-assignment). +The cloned Git repository will contain a GitLab CI/CD workflow file which defines the container which will run the submission and the script to run the assignment. +The assignment repository must also contain a `src/` directory, which defines the directory in which students will write code. +The Git repository must be private, otherwise students would be able to view the code amongst themselves. + +If using Moodle, the educator must create an `Assignment` instance and a `vmchecker` assignment block, which will attach to the `vmchecker` backend. +The assignment block must be configured with the project ID of the aforementioned repository, and an access token so the middleware has permissions to work with the repositories. + +Detailed instructions for educators are part of the [official `vmchecker` Student Handbook](https://github.com/open-education-hub/vmchecker-next/wiki/Teaching-Assistant-Handbook). + +## Learner + +Learners interact with `vmchecker` in two ways: + +- a Moodle-based workflow: upload the work directly through Moodle, that sends it the GitLab backend +- a Git-based workflow: upload work through Git to GitLab, and trigger the validation + +In order to work on a submission, students must download the submission template code. +As part of the template, a script (named `local.sh`) runs the submission checker inside of the container infrastructure, mirroring the checking environment in GitLab. +The checker script can also be called locally outside of the container. + +A learner can upload their source code as part of an archive inside the Moodle assignment activity, and it will launch the checking request. +The Git-based checking flow requires learners to push changes directly to GitLab, where the changes committed trigger the GitLab CI/CD workflow. + +Detailed instructions for learners are part of the [official `vmchecker` Student Handbook](https://github.com/open-education-hub/vmchecker-next/wiki/Student-Handbook). + +## Container Infrastructure + +The issue with using the same assignment checking script for many students is that they can have different libraries and applications installed on their systems. +Different environments may lead to certain optimization inconsistencies. +To mitigate this, we recommend teachers setup the checking infrastructure in `vmchecker` so that the scripts run inside of a container. +The `vmchecker` team provides a minimal template that can be expanded based on individual class needs. + +The container infrastructure presents an easier approach than the one seen in current solutions, which either require an internet connection for remote checking, or a virtual machine, which uses more resources. +Using containers allows for easier patches to the environment, for example installing a new library, because the changes will be sent incrementally, the student not needing to download a whole new image. + +## Example `vmchecker` Deployments + +`vmchecker` has been used extensively for the Operating Systems class at the [National University of Science and Technology POLITEHNICA of Bucharest (UNSTPB)](https://upb.ro/), using the contents of [the `operating-systems` repository](https://github.com/open-education-hub/operating-systems). +The repositories used for the five assignments, plus a template repository, plus a tutorial assignment can be used as examples of repositories for `vmchecker` deployment: + +- [`Assignment: Template`](https://gitlab.cs.pub.ro/operating-systems/assignment-template) +- [`Assignment: Tutorial`](https://gitlab.cs.pub.ro/operating-systems/assignment-tutorial) +- [`Assignment: Mini Libc`](https://gitlab.cs.pub.ro/operating-systems/assignment-mini-libc) +- [`Assignment: Memory Allocator`](https://gitlab.cs.pub.ro/operating-systems/assignment-memory-allocator) +- [`Assignment: Parallel Graph`](https://gitlab.cs.pub.ro/operating-systems/assignment-parallel-graph) +- [`Assignment: Mini Shell`](https://gitlab.cs.pub.ro/operating-systems/assignment-mini-shell) +- [`Assignment: Async Web Server`](https://gitlab.cs.pub.ro/operating-systems/assignment-async-web-server) diff --git a/config.yaml b/config.yaml index 4ea78b7..63929f4 100644 --- a/config.yaml +++ b/config.yaml @@ -44,6 +44,8 @@ docusaurus: - Reading: reading/read.md - Checkers: path: chapters/infrastructure/checkers + extra: + - media/ subsections: - Reading: reading/read.md - Linters: