Что такое автопроверки?
Автопроверки в GitVerse SmartClass позволяют автоматически проверять и оценивать работы участников. Эта функция помогает организаторам эффективно оценивать множество работ без необходимости вручную проверять каждое решение.
Система автопроверок поддерживает различные языки программирования и форматы тестов, позволяя гибко настраивать проверку в соответствии с требованиями задания.
Настройка автопроверок
Создание автопроверки через конструктор
Для создания автопроверки через конструктор необходимо выполнить следующие шаги:
- перейти в любой модуль GitVerse SmartClass;
- начать создавать задание;
- дойти до шага «Настройка автопроверок»;
- выбрать «GitVerse конструктор»;
- в выпадающем меню выбрать тип проверки:
- ввод-вывод (Input-output) — для проверки программ, которые читают данные из stdin и выводят результат в stdout;
- команда запуска (Run command) — для проверки с помощью любой shell-команды или скрипта (результаты оцениваются по коду возврата или выводу);
- выберите язык программирования из списка: Java, Node, Python, C, Cpp и другие.
Конфигурация тестов на примере Input-output
При выборе типа «Ввод-вывод» вам будет предложено настроить следующие параметры:
- название теста — укажите понятное и простое название для теста, например,
Hello world test; - команда настройки — введите команду для подготовки окружения (опционально), например,
./setup.sh; - команда запуска — укажите команду для запуска программы, например,
./calculator.sh; - ввод — введите тестовые данные, которые будут переданы в программу, например,
2; - выход — укажите ожидаемый результат выполнения программы, например,
4; - макс. балл — установите максимальное количество баллов за данный тест, например,
100; - тайм-аут — укажите время выполнения теста в секундах, например,
10.
Вы можете добавить несколько тестов для одного задания, нажав на кнопку «Добавить тест». Это позволит проверить различные аспекты работы программы.
Настройка YAML для автопроверок
Для более сложных сценариев проверки вы можете вручную настроить YAML-конфигурацию:
- в интерфейсе автопроверок нажать кнопку «Настроить YAML»;
- откроется редактор с готовым шаблоном YAML-файла, который вы можете изменить;
- настроить workflow в соответствии с вашими требованиями.
Базовый YAML-файл для автопроверок имеет следующую структуру:
name: Autograding Tests
on:
- pull_request
jobs:
run-autograding-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
# Здесь вы размещаете свои тесты для автоматической оценки
# Дополнительную информацию об этом средстве оценки можно найти в документации по адресу: https://gitverse.ru/actions/autograding-io-grader
#
# Например, вы можете запустить набор тестов следующим образом:
# - name: Run tests
# uses: https://gitverse.ru/actions/autograding-io-grader@v2
# with:
# test-name: Addition Test
# id: addition-test
# command: "./bin/add.sh"
# input: 1 2
# expected-output: 3
# comparison-method: exact
# timeout: 10
- name: Autograding Reporter
uses: https://gitverse.ru/actions/autograding-grading-reporter@v2
# Дополнительную информацию об этом действии можно найти в документации по адресу https://gitverse.ru/actions/autograding-grading-reporter
# Чтобы вывести результаты тестов, вы можете использовать действие autograding-grading-reporter следующим образом:
# env:
# ADDITION_TEST_RESULTS: "${{ steps.addition-test.outputs.result }}"
# with:
# runners: addition-testПример конфигурации автопроверок
В этом примере скрипт startCheck.sh запускает JS-файл calc.js, который должен реализовать функцию возведения в квадрат. Поэтому для входа 2 ожидается выход 4.
Все описанные ниже файлы собраны в репозитории.
.gitverse/workflows/smartclass.yml
name: Autograding Tests
on:
- pull_request
jobs:
run-autograding-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- id: test1
name: calc_test
uses: https://gitverse.ru/actions/autograding-io-grader@v2
with:
test-name: calc_test
command: bash startCheck.sh
input: "2"
expected-output: "4"
comparison-method: exact
timeout: 1
max-score: 100
- name: Autograding Reporter
uses: https://gitverse.ru/actions/autograding-grading-reporter@v2
env:
TEST1_RESULTS: ${{ steps.test1.outputs.result }}
with:
runners: test1README.md
# Задание: Реализовать умножение числа на себя
В файле `calc.js` реализуйте функцию `calculateSquare`:
```javascript
function calculateSquare(number) {
// Верните число, умноженное на само себя
return number;
}
startCheck.sh
#!/bin/bash
# Проверяем Node.js
if ! command -v node &> /dev/null; then
echo "Node.js not installed"
exit 1
fi
# Запускаем calc.js с входными данными
read INPUT
NODE_NO_WARNINGS=1 node -e "
const calculateSquare = require('./calc.js');
const number = parseFloat('$INPUT');
console.log(String(calculateSquare(number)));
" 2>/dev/nullcalc.js
function calculateSquare(number) {
// TODO: добавьте свой код здесь
return number;
}
module.exports = calculateSquare;Результаты автопроверок
После того как участник отправит свою работу на проверку (создаст запрос на слияние в ветку master своего репозитория):
- GitVerse автоматически запустит настроенные тесты;
- участник сможет увидеть результаты во вкладке CI/CD;
- результаты проверки будут доступны в интерфейсе задания для организатора;
- организатор сможет увидеть подробный отчет о выполнении тестов, включая время выполнения и полученные баллы.
Если тест не прошел, участник сможет увидеть причину ошибки и исправить свою работу.
Чтобы участники не могли изменить условия проверки, рекомендуется включить защиту веток, в частности, заблокировать изменения файла
smartclass.yml. Важно: включив защиту всех веток, вы запретите использовать force push.
Советы по эффективному использованию автопроверок
- Тесты должны покрывать основные и граничные случаи.
- Тайм-ауты должны учитывать сложность задачи.
- Примеры входных/выходных данных помогают участникам понять формат.
- Используйте описательные названия тестов для облегчения отладки.
- Регулярно обновляйте тесты в соответствии с изменениями в требованиях к заданию.
Автопроверки значительно упрощают процесс оценки работ и позволяют участникам получать быструю обратную связь по своим решениям.