Зі збільшенням кількості студентів перевірка домашніх завдань стає вузьким місцем LMS. Викладач фізично не встигає перевірити 500 робіт за 24 години, а якість перевірки страждає. Ми вирішуємо це завдання гібридним підходом: автоматична перевірка для тестів та коду, оптимізований інтерфейс для ручної перевірки есе та складних завдань. Наш досвід показує, що до 70% типових завдань можна перевіряти автоматично, скорочуючи час викладача в 3–5 разів. Наприклад, в одному проєкті для університету ми впровадили автоматичну перевірку коду на Python — викладач тепер перевіряє 200 робіт за 1 годину замість 5. Економія бюджету на перевірці сягає 40% порівняно з ручною працею. Ми забезпечуємо масштабування до 1000 одночасних перевірок та зворотний зв'язок по кожній роботі. Середній термін розробки — 2–3 тижні. У цій статті розповімо, як ми проєктуємо систему перевірки, які компоненти входять та як замовити таку розробку під ключ.
Які проблеми вирішує гібридна перевірка?
Перевантаження викладачів. Ручна перевірка 50+ робіт на день веде до вигоряння та помилок. Автоматизація знімає рутину: викладач перевіряє лише складні завдання, а тести та код оцінюються без його участі.
Різнорідність завдань. В одному курсі можуть бути тести, есе, код та файли. Універсальна система має підтримувати всі формати. Ми інтегруємо рубрики оцінювання, inline-анотації PDF та Docker-пісочницю для коду.
Плагіат. Текстові запозичення та копіювання коду — поширена проблема. Інтеграція з Unicheck та MOSS (або власний рушій на TF-IDF) виявляє підозрілі роботи до їх перевірки викладачем.
Як ми реалізуємо ручну перевірку?
Інтерфейс перевірки має мінімізувати перемикання контексту. На одному екрані: робота студента зліва, форма оцінки справа. Ключові компоненти, які ми впроваджуємо:
- Список неперевірених робіт з фільтрами за завданням, групою, датою
- Перегляд відповіді студента (текст, файл inline або посилання)
- Рубрика оцінювання з чекбоксами (якщо задані критерії)
- Поле оцінки та текстовий коментар з підтримкою Markdown
- Кнопки: «Прийняти», «Повернути на доопрацювання», «Наступна робота»
- Inline-анотації на PDF (якщо робота у форматі PDF)
Для quiz-типу завдань з правильною відповіддю ми реалізуємо пакетну перевірку: викладач бачить таблицю всіх робіт з відповідями та може проставити оцінки пачкою.
Як працює автоматична перевірка?
Quiz / тести із закритими запитаннями:
async function autoGradeQuizSubmission(submissionId) {
const submission = await db.submissions.findOne(submissionId, {
include: ['assignment.questions']
});
let totalPoints = 0;
let earnedPoints = 0;
const results = [];
for (const question of submission.assignment.questions) {
totalPoints += question.points;
const studentAnswer = submission.answers[question.id];
const isCorrect = checkAnswer(question, studentAnswer);
if (isCorrect) earnedPoints += question.points;
results.push({
questionId: question.id,
correct: isCorrect,
studentAnswer,
correctAnswer: question.correctAnswer,
});
}
const score = Math.round((earnedPoints / totalPoints) * submission.assignment.maxScore);
await db.submissions.update(submissionId, {
status: 'graded',
score,
autoGradeResults: results,
gradedAt: new Date(),
});
await notifyStudent(submission.studentId, submissionId, score);
}
Перевірка коду через тести: Для курсів програмування ми запускаємо код студента в ізольованих Docker-контейнерах проти набору тестів. Це гарантує безпеку та повторюваність.
async function runCodeTests(submissionId, code, language, testCases) {
const result = await dockerRunner.run({
image: `lms-runner-${language}:latest`, // python:3.11, node:20, etc.
code,
tests: testCases,
timeout: 10000, // 10 секунд
memoryLimit: '256m',
networkDisabled: true, // Немає мережі в sandbox
});
return {
passed: result.passedTests,
total: testCases.length,
output: result.stdout,
errors: result.stderr,
executionTime: result.durationMs,
};
}
Приклад конфігурації Docker-контейнера для перевірки Python
FROM python:3.11-slim
RUN pip install pytest
COPY tests/ /tests/
ENTRYPOINT ["pytest", "/tests/"]
Перевірка на плагіат: Для текстових робіт — інтеграція з Unicheck або MOSS (для коду). Також можлива власна реалізація на TF-IDF векторизації та cosine similarity, якщо потрібен повний контроль над даними. Плагіат-детекція дозволяє заощадити до 40% бюджету на перевірці.
Чому автоматична перевірка коду швидша за ручну?
Автоматична перевірка коду виконується за секунди, тоді як викладач витрачає 5–10 хвилин на одну роботу. Порівняйте: 200 студентів × 7 хвилин = 23 години ручної роботи проти 40 хвилин автоматичної. Виграш у часі — в 30 разів. При цьому якість перевірки не страждає: тести покривають всі крайові випадки, а sandbox гарантує безпеку.
Що входить у роботу?
- Аналітика та проєктування. Визначаємо типи завдань, вимоги до рубрик, інтеграції з Unicheck/MOSS. Складаємо сценарії використання та прототип інтерфейсу.
- Розробка ручного модуля. Інтерфейс з фільтрами, рубриками, анотаціями та пакетною перевіркою.
- Автоматична перевірка тестів та коду. Реалізація quiz-engine та Docker-runner з налаштовуваними тестами.
- Антиплагіат. Інтеграція з Unicheck/MOSS або власна система на TF-IDF.
- Сповіщення та workflow. Налаштування подій, email/in-app сповіщення, ланцюжок статусів submitted→reviewing→graded→returned.
- Документація та навчання. Технічна документація API, інструкція для викладачів, сесія навчання.
- Підтримка після деплою. Гарантійна підтримка 2 тижні, далі за договором.
Процес впровадження
- Аналітика. Визначаємо типи завдань, вимоги до рубрик, інтеграції з Unicheck/MOSS. Складаємо сценарії використання.
- Проєктування. Проєктуємо API для перевірки, інтерфейс викладача, workflow статусів. Вибираємо стек: React + TypeScript для фронту, Laravel або Node.js для беку, Docker для пісочниці.
- Розробка. Реалізуємо ручний та автоматичний модулі, підключаємо Docker-runner, налаштовуємо сповіщення.
- Тестування. Навантажувальне тестування до 1000 одночасних перевірок. Покриття unit-тестами ключових сценаріїв.
- Деплой. Розгортання на сервері (Docker-compose або Kubernetes). Навчання викладачів.
Workflow статусів
submitted
↓ (auto-grade або manual)
reviewing
↓ викладач відкрив роботу
graded → сповіщення студенту
returned → студент отримує сповіщення, може доопрацювати
↓ повторне надсилання
resubmitted → знову в reviewing
Сповіщення
| Подія | Кому | Канал |
|---|---|---|
| Роботу надіслано | Викладач | Email + in-app |
| Дедлайн через 24 год | Студенти без здачі | |
| Роботу перевірено | Студент | Email + in-app |
| Роботу повернено | Студент | Email + in-app |
| Черга > 20 робіт | Викладач | Email (digest) |
Строки
| Компонент | Строк |
|---|---|
| Інтерфейс ручної перевірки з рубриками та анотаціями | 5–7 днів |
| Автоматична перевірка quiz та тестів | 3–4 дні |
| Code sandbox з Docker-runner | 5–7 днів |
| Антиплагіат | 3–5 днів |
Ми на ринку понад 8 років, реалізували понад 100 проєктів для LMS. Вартість розробки гібридної системи варіюється залежно від складності, але в середньому окупається за 2–4 місяці. Зв'яжіться з нами для попередньої оцінки вашого проєкту — ми підготуємо індивідуальну пропозицію. Замовте консультацію зараз — ми оцінимо ваш проєкт безкоштовно.







