Различия между версиями 6 и 7
Версия 6 от 2015-02-14 14:19:29
Размер: 4396
Редактор: FrBrGeorge
Комментарий:
Версия 7 от 2015-02-14 14:59:57
Размер: 6022
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 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 для задачи

      • {1} Недоступна пользователям на запись

      • Подстранички вида /TaskName/TestName для тестов

        • {1} недоступны пользователям

        • /!\ как задаётся тестирующая программа?

      • {1) Запускающая программа
      • {2} Компилирующая программа

  • Индивидуальные странички пользователей
    • Подстранички UserName/ContestName/TaskName для решений

      • {1} недоступные другим пользователям

      • Кнопка «проверить»
        • Сгенерированная тестером страница отчёта UserName/ContestName/TaskName/Report

          • {1} неизменяемая

          • {2} с подсчётом количества запусков

        • {3} Какой-нибудь Atom Editor для редактирования кода

    • {1} Сводная страница со всеми Report-ами UserName/ContestName/Reports

      • {2} Удобно отформатированная

    • {2} пользователь в группе ContestName

  • Макросы:
    • Создание тестирования
    • Создание задачи
      • Создание теста
      • /!\ не забыть про указание/задание тестирующей программы

    • Волшебный макрос, показывающий, каких решений ещё нет, и позволяющий создать страничку с решением по шаблону
    • Страшная кнопка «Проверить»:
      1. Состояние «Не проверено» (отчёт отсутствуют, или решение новее отчёта и в очереди тестера его нет)
        • Сформировать задание-архив:
          • Выковырять исходник
            • {2} Исходники

          • {1} Определить запускающую программу

          • {2} Определить тип исходника и компилирующий набор

          • Определить тестирующую программу
          • Выковырять все тесты
        • Поставить архив в очередь тестеру
      2. Состояние «Проверяется» (решение новее отчёта и ждёт очереди тестера)
      3. Состояние «Проверено» (решение новее отчёта и проверено в очереди тестера)
        • Сформировать отчёт
      4. Состояние «Готово» (отчёт новее решения)

/!\ Тестер на другой машине (передача по ssh?)

Тестер в чруте без сети (hasher)

  • Первичное развёртывание Hasher, один раз на запуск системы

    • {2} тип окружения (что ставить в Hasher)

  • Очередь заданий-архивов
    • Управление очередью заданий:
      • поставить → ID
      • получить список ID
      • посмотреть статус ID (нету, не готово, готово, готово с ошибками)
      • снять ID
      • {2} устаревание неснятых заданий

    • Каждое задание — с перезатиранием $TEST, по всем тестам
    • Каждый тест — с перезатиранием $HOME
      • Пользовательские файлы копируются в $HOME от builder

        • Это вынутое содержимое UserName/ContestName/TaskName

      • Тесты и тестирующие программы копируются в $TEST от rooter

        • Это вынутое содержимое Contests/Name/TaskName/*

        • {1} +запускающая программа

    • Стадии теста:
      1. {2} Компиляция исходника (с ограничением по времени)

      2. Запуск тестирующей программы, на входе — первый тест (с ограничением по времени и памяти)
      3. Второй…
      4. Генерация отчёта

Дерево страниц

  • UserName0

    • ContestName0

      • TaskName0

        • Report

      • TaskName1

      • Reports

    • ContestName1

  • UserName1

  • Contest

    • Name0

      • TaskName0

        • TestName0

        • TestName1

      • TaskName1

    • Name1

FrBrGeorge/SimpleTaskTester (последним исправлял пользователь FrBrGeorge 2015-02-14 14:59:57)