Hello there 👋
What is Divekit?
Divekit is a command-line tool for managing individualized programming assignments at scale. It helps educators create, distribute and evaluate programming exercises for large groups of students.
Visual overview: from origin to distributed repositories
Locally:
my-assignment/
├─ .divekit/
├─ src/$Vehicle$.java # placeholder - used by individualization
├─ tests_evalrepo/ # filter - excluded from work repos
└─ README.md
Gitlab: “Individualized repositories”:
gitlab.example.com/.../my-group/ # Work repositories (work target)
├─ my-assignment-4d2c0752-f400-4690-9bac-97c927e68e17/
│ ├─ src/Car.java # $Vehicle$ → Car
│ └─ README.md
├─ my-assignment-4d243142-292b-4b95-abbb-af13f102c857/
│ ├─ src/Bike.java # $Vehicle$ → Bike
│ └─ README.md
└─ my-assignment-8153ded6-ee91-4135-b59e-ace2625f83c3/
├─ src/Plane.java # $Vehicle$ → Plane
└─ README.md
Gitlab: “Evaluation pipeline” (separate eval target)
gitlab.example.com/.../my-eval/
├─ my-assignment-4d2c0752-f400-4690-9bac-97c927e68e17/
│ ├─ src/Car.java # $Vehicle$ → Car
│ ├─ test/
│ └─ README.md
├─ my-assignment-4d243142-292b-4b95-abbb-af13f102c857/
│ ├─ src/Bike.java # $Vehicle$ → Bike
│ ├─ test/
│ └─ README.md
└─ my-assignment-8153ded6-ee91-4135-b59e-ace2625f83c3/
├─ src/Plane.java # $Vehicle$ → Plane
├─ test/
└─ README.md
See Evaluation Pipeline for the current behavior and configuration model.
Key Features
- Assignment Individualization: Generate unique variations of programming assignments for each student
- Automated Distribution: Create and manage GitLab repositories for students automatically
- Test Integration: Built-in support for automated testing and evaluation
- Bulk Operations: Efficiently manage assignments for large classes
- Access Control: Manage repository access rights and permissions
Benefits
- Prevent Plagiarism: Each student receives a slightly different version of the assignment
- Save Time: Automate repetitive tasks like repository setup and access management
- Ensure Fairness: Standardized testing and evaluation across all variations
- Scale Easily: Handle large classes with minimal additional effort
Use Cases
Divekit is primarily used in educational settings where:
- Programming assignments need to be distributed to many students
- Each student should receive an individualized version
- Automated testing and evaluation is desired
- Manual administrative overhead should be minimized
The tool consolidates functionality that was previously spread across multiple separate tools into a single, easy-to-use CLI application.
Divekit is a toolkit for managing individualized programming assignments at scale.
Who needs Divekit?
Divekit is designed for different stakeholders in programming education:
Course Instructors
Primary users who:
- Create and manage programming assignments
- Need to distribute exercises to large groups of students
- Want to prevent plagiarism through individualization
- Need efficient ways to evaluate student submissions
Benefits
- Automated repository management
- Built-in individualization system
- Integrated testing capabilities
- Bulk operations for large classes
Teaching Assistants
Support staff who:
- Help manage student repositories
- Assist with assignment evaluation
- Provide technical support to students
Benefits
- Standardized repository structure
- Automated access management
- Consistent testing environment
- Clear overview of student progress
Students
End users who:
- Receive individualized assignments
- Submit their solutions through Git
- Get automated feedback on their work
Benefits
- Personal GitLab repositories
- Immediate feedback through automated tests
- Clear assignment structure
- Consistent submission process