Проект простой проверялки Д/З
Концепция
- вся информация хранится в Moin, код просто вставляется в страницу
- вставка специально оформляется (например, вход и выход в тесте)
запуск тестов в статически развернутом Hasher-е (без сети) с переписыванием только тестирующей и пользовательской частей
Можно ли сделать из страницы ?форму?, т. е. проверять исходник на наличие каких-то обязательных частей и вообще синтаксическую правильность, и не давать записывать, если испорчено?
Интерфейс/база на основе MoinMoin
Одна страничка вида Contests/Name на каждое тестирование
Подстраничка вида /TaskName для задачи
Недоступна пользователям на запись
Подстранички вида /TaskName/TestName для тестов
недоступны пользователям
как задается тестирующая программа?
- {1) Запускающая программа
Компилирующая программа
- Индивидуальные странички пользователей
Подстранички UserName/ContestName/TaskName для решений
недоступные другим пользователям
- Кнопка ?проверить?
Сгенерированная тестером страница отчета UserName/ContestName/TaskName/Report
неизменяемая
с подсчетом количества запусков
Какой-нибудь Atom Editor для редактирования кода
Сводная страница со всеми Report-ами UserName/ContestName/Reports
Удобно отформатированная
пользователь в группе ContestName
- Макросы:
- Создание тестирования
- Создание задачи
- Создание теста
не забыть про указание/задание тестирующей программы
- Волшебный макрос, показывающий, каких решений еще нет, и позволяющий создать страничку с решением по шаблону
- Страшная кнопка ?Проверить?:
- Состояние ?Не проверено? (отчет отсутствуют, или решение новее отчета и в очереди тестера его нет)
- Сформировать задание-архив:
- Выковырять исходник
Исходники
Определить запускающую программу
Определить тип исходника и компилирующий набор
- Определить тестирующую программу
- Выковырять все тесты
- Выковырять исходник
- Поставить архив в очередь тестеру
- Сформировать задание-архив:
- Состояние ?Проверяется? (решение новее отчета и ждет очереди тестера)
- Состояние ?Проверено? (решение новее отчета и проверено в очереди тестера)
- Сформировать отчет
- Состояние ?Готово? (отчет новее решения)
- Состояние ?Не проверено? (отчет отсутствуют, или решение новее отчета и в очереди тестера его нет)
Тестер на другой машине (передача по ssh?)
Тестер в чруте без сети (hasher)
Первичное развертывание Hasher, один раз на запуск системы
тип окружения (что ставить в Hasher)
- Очередь заданий-архивов
- Управление очередью заданий:
- поставить ? ID
- получить список ID
- посмотреть статус ID (нету, не готово, готово, готово с ошибками)
- снять ID
устаревание неснятых заданий
- Каждое задание ? с перезатиранием $TEST, по всем тестам
- Каждый тест ? с перезатиранием $HOME
Пользовательские файлы копируются в $HOME от builder
Это вынутое содержимое UserName/ContestName/TaskName
Тесты и тестирующие программы копируются в $TEST от rooter
Это вынутое содержимое Contests/Name/TaskName/*
+запускающая программа
- Стадии теста:
Компиляция исходника (с ограничением по времени)
- Запуск тестирующей программы, на входе ? первый тест (с ограничением по времени и памяти)
- Второй?
- ?
- Генерация отчета
- Управление очередью заданий:
Дерево страниц
UserName0
ContestName0
TaskName0
Report
TaskName1
- ?
Reports
ContestName1
- ?
UserName1
- ?
Contest
Name0
TaskName0
TestName0
TestName1
- ?
TaskName1
- ?
Name1
- ?