Documentation

The documentation is in a very early stage and some parts might be outdated.

Functionality

The Divekit supports a testing concept which is based on the following components:

Gitlab is the platform where all exercises are managed. By uploading solutions on Gitlab, learners can solve exercises. Gitlab CI is also used to automatically execute tests. Exercises of specific milestones can be managed in the form of Gitlab groups. The Origin project is a normal project whose structure depends on the programming language used in the exercises. In addition to predefined program fragments the project can also contain unit tests, solutions for exercises and configuration files for involved tools. Based on this project a code project and a test project are generated for each learner. With this procedure files are filtered, which are not supposed to be seen by learners (e.g.: solutions). The Code Project is generated from the Origin Project. It contains everything needed for a learner to complete the exercise. When a learner has completed an exercise or wants to save an intermediate state, the learner can upload the progress using Git. Usually the test project contains all the files that the code project contains. Furthermore, additional files which are not intended for learners (e.g. hidden files) can be stored here. So the main task of the test project is therefore to encapsulate these files. In addition, the test project executes automatic tests using Gitlab CI and generates a test page afterwards. For modularization reasons, all reusable program code of automatic tests is maintained within a test library. The library depends on a certain programming language and is referenced by the code project and the test project. The test page is generated by the test project individually for each learner and displays the test results of each learner in the form of a static page. Since each learner has a separate code project, test project and test page per milestone within Gitlab an overview page is generated that assigns each learner accordingly. Within Gitlab there exists no automatism which generates the appropriate repositories for each learner. To meet these requirements the Divekit was developed. The Divekit generates the appropriate projects for each learner based on configuration files using the Gitlab API. Afterwards an overview page is generated.

Of course the most important role in this concept is played by the learners and teachers who interact with the above components. When a new milestone should be prepared an instructor creates a new exercise in the form of an Origin Project. He uses the Divekit to automatically generate the projects for the learners. To test automations provided by the Divekit in advance, the instructor can use the file system instead of the Gitlab API. After the projects are generated for the learners they can solve the exercises which are located in the code projects. After each upload they get quick feedback generated by automatic tests which are executed. Afterwards the results are summarized on the test page. During and also after a milestone teachers can look up the results of specific learners using the overview page. Furthermore, by looking at a specific learners test page they can see how many tests have been successfully completed.

In addition to these main tasks of the Divekit toolset, there is a lot of optional tooling. An overview of all available tools can be found in the following list:


Getting Started

Access Manager

Manages repository rights for students and supervisors on Gitlab repositories.

Access Manager 2.0

Rewritten (in python) and improved version of the original access manager. Used to change the access rights of repository members in a GitLab group based on a whitelist.

Automated Repo Setup

The automated-repo-setup is the heath of divekit. It implements the core set of features which are used to automatically provide programming exercises in terms of repositories on the platform Gitlab. Optionally, exercises can be individualized using the integrated mechanism for individualization.

cli

CLI to simplify and orchestrate the usage of multiple divekit tools.

Divekit Language Plugin

Supports Code-Completion for Divekit generated individualization variables

Divekit Language Server

Supports Code-Completion for Divekit generated individualization variables

Evaluation Processor

Counts points of detailed evaluation schemes and generates a file which includes the points per exercise and the total points.

Operator

UI-Tooling to simplify user interaction for manual testing of milestones or exams.

Passchecker

Tool to determine who has passed / failed a given milestone.

Plagiarism Detector

Detects variations of defined variables which should not be contained in specific student repositories.

Repo Editor

Tooling to allow multi-edit for a batch of specified repositories.

Report Mapper

The report-mapper is an integral part of the GitLab-CI/CD-pipeline for all test repositories. The report-mapper ensures that various inputs from Surefire-Reports, PMD and Checkstyle codestyle checks are converted into a uniform format. The produced result is an XML file and subsequently used by the report-visualizer for a readable output.

Report Visualizer

The divekit-report-visualizer creates a website based on a xml file, which visually prepares the content or the report and can be made available via GitHub/Lab-Pages, for example.

Test Library

Library which contains a set of generic tests for different testing purposes.

Test page generator

Old version of the report-visualizer. Working based only on provided surefire-reports.

Contribution Guidelines

Contribution Guidelines

Glossary

Last modified September 8, 2022: add divekit-cli (6012e38)