4396
Комментарий:
|
← Версия 7 от 2015-02-14 14:59:57 ⇥
6022
|
Удаления помечены так. | Добавления помечены так. |
Строка 3: | Строка 3: |
Концепция: | == Концепция == |
Строка 12: | Строка 12: |
* {1} Недоступна пользоватлеям на запись | * {1} Недоступна пользователям на запись |
Строка 15: | Строка 15: |
* /!\ как задаётся тестирующая программа? * {2} /!\ Всякие другие подстранички (например, Makefile или что-то такое) |
* /!\ как задаётся тестирующая программа? * {1) Запускающая программа * {2} Компилирующая программа |
Строка 34: | Строка 35: |
* Страшная кнопка «Проверить»: 1. Состояние «Не проверено» (отчёт отсутствуют, или решение новее отчёта и в очереди тестера его нет) * Сформировать задание-архив: * Выковырять исходник * {2} Исходник'''''и''''' * {1} Определить запускающую программу * {2} Определить тип исходника и компилирующий набор * Определить тестирующую программу * Выковырять все тесты * Поставить архив в очередь тестеру 1. Состояние «Проверяется» (решение новее отчёта и ждёт очереди тестера) 1. Состояние «Проверено» (решение новее отчёта и проверено в очереди тестера) * Сформировать отчёт 1. Состояние «Готово» (отчёт новее решения) |
|
Строка 39: | Строка 54: |
* Каждый тест — с перезатиранием $HOME и $TEST ⇒ не нужно переразворачивать [[Alt:Hasher]] * Пользовательские файлы копируются в $HOME от `builder` * Это вынутое содержимое `UserName/ContestName/TaskName` * Тесты и тестирующие программы копируются в $TEST от `rooter` * Это вынутое содержимое `Contests/Name/TaskName/*` * Стадии теста: 1.#0 {2} Компиляция исходника (с ограничением по времени) 1. Запуск тестирующей программы, на входе — первый тест (с ограничением по времени и памяти) 1. Второй… 1. … 1. Генерация отчёта |
* Очередь заданий-архивов * Управление очередью заданий: * поставить → ID * получить список ID * посмотреть статус ID (нету, не готово, готово, готово с ошибками) * снять ID * {2} устаревание неснятых заданий * Каждое задание — с перезатиранием $TEST, по всем тестам * Каждый тест — с перезатиранием $HOME * Пользовательские файлы копируются в $HOME от `builder` * Это вынутое содержимое `UserName/ContestName/TaskName` * Тесты и тестирующие программы копируются в $TEST от `rooter` * Это вынутое содержимое `Contests/Name/TaskName/*` * {1} +запускающая программа * Стадии теста: 1.#0 {2} Компиляция исходника (с ограничением по времени) 1. Запуск тестирующей программы, на входе — первый тест (с ограничением по времени и памяти) 1. Второй… 1. … 1. Генерация отчёта |
Проект простой проверялки Д/З
Концепция
- вся информация хранится в 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
- …