Рабочий стол > DL Руководство пользователя > ... > Вспомогательные средства установки задач по программированию > Интерфейс тестирования задач с интерактивным вводом-выводом > Просмотр
Интерфейс тестирования задач с интерактивным вводом-выводом Войти | Зарегистрироваться   Просмотр версии для печати текущей страницы.

Добавлено Гуленко Алексей, последний раз изменено Гуленко Алексей Apr 07, 2013  (просмотр изменений)
Метки: 
(нет)

StdSwp: интерфейс тестирования задач с интерактивным вводом-выводом

Применение

Применение. Приложение StdSwp (Standard Swap) запускается тестирующей системой для задач, которые в task.cfg отмечены как имеющие интерактивный тип (type=interactive). В качестве параметров ей передаются имена файлов player'а и тестируемой программы. Файл player'а должен находиться в папке задачи (файл player.exe); также для корректной обработки вывода player'а желательно наличие чекера.

Поведение. StdSwp работает следующим образом:

  • считывается и обрабатывается файл конфигурации (см. Конфигурация);
  • запускаются указанные в параметрах файлы (player и тестируемая программа), стандартные потоки ввода-вывода (Input/Output в Pascal, stdin/stdout в C/C++) этих программ перенаправляются в буфер StdSwp;
  • пока работают обе программы, StdSwp продолжает работу, выполняя обмен данными между программами;
  • когда одна из программ завершает работу, StdSwp перенаправляет её оставшийся вывод на вход другой программе и (по умолчанию) ожидает её завершения.

Настройка

Конфигурация. Детали поведения StdSwp можно задавать, поместив в рабочую папку файл stdswp.cfg; для этого следует поместить его
в папку задачи и сделать в task.cfg пометку о необходимости его копирования в директорию тестирования:

task.cfg
checksubject=file
checkfiles={stdswp.cfg}

Файл stdswp.cfg обрабатывается по следующим правилам:

  • каждая строка обрабатывается отдельно;
  • если в строке есть символ <#>, все символы в строке начиная с него игнорируются (комментарий);
  • если в строке (вне комментария) отсутствует символ <=>, она игнорируется (не соответствует формату);
  • оставшиеся строки считаются представленными в следующем формате:
    ИмяОпции=Значение

Распознаваемые опции:

  • KillSolution (возможные значения Yes и No) - при значении Yes работа тестируемой программы завершается принудительно после завершения работы player'а, значение по умолчанию - No;
  • KillPlayer (возможные значения Yes и No) - при значении Yes работа player'а завершается принудительно после завершения работы тестируемой программы, значение по умолчанию - No;
  • ListenError (возможные значения Yes и No) - при значении Yes тестирование прерывается принудительно, если player делает вывод в stderr (предназначена для прерывания тестирования при некорректном выводе тестируемой программы, также ловит ошибки player'а), значение по умолчанию - Yes.

Дополнительно

Примеры. Пример файла stdswp.cfg:

stdswp.cfg
# завершить программу после остановки player'а
KillSolution=yes
# раскомментировать для завершения player'а
# после остановки программы
#KillPlayer=YES

Важные моменты. Существуют некоторые особенности, которые следует учитывать при тестировании интерактивных задач с помощью программы StdSwp:

  • поскольку стандартные потоки ввода-вывода перенаправляются системными средствами (pipe'ами) в буфер другой программы, для работы с файлами их использовать нельзя - вместо них нужно использовать файловые переменные (в Pascal) или файловые потоки (в C/C++);
  • размер буфера ограничен, поэтому, если одна из программ делает многократный вывод, а другая этот вывод не читает, рано или поздно буфер будет переполнен, и обмен данными прекратится (обе программы, скорее всего, <зависнут> в ожидании ввода);
  • похожая ситуация может произойти при неправильно написанном player'е или решении - каждая из двух программ будет ожидать вывода от другой (зачастую причиной ошибки может быть отсутствие Flush(Output)/flush(stdout) после операций вывода: если не принуждать программу к завершению вывода перед чтением, другая программа будет ожидать завершения вывода);
  • операции ввода-вывода сами по себе занимают сравнительно длительное время, поэтому оценка длительности работы программы при множественном обмене данными вырастает на пару порядков;
  • если тестируемая программа делает некорректный вывод, player'у следует отразить это в файле вывода, и вывести что-нибудь в stderr (см. ListenError); если этого не сделать, то программа, скорее всего, будет ожидать ввода, пока тестирующая система не завершит её работу (в этом случае система <Дистанционного обучения> игнорирует файл вывода и сообщает, что программа была снята с выполнения по превышении лимита времени);
  • если тестируемая программа завершила работу, а player продолжает ждать вывода, он будет снят с выполнения по превышении лимита времени с выдачей соответствующего сообщения;
  • при групповом тестировании интерактивных задач сообщения чекера игнорируются (при реализации интерактивного типа возможность группового тестирования не учитывалась).

Исходный код программы содержится здесь.

Примеры установленных задач: [].

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: http://www.atlassian.com/software/confluence Build:#2.6.1 916) - Ошибка/новая особенность - Свяжитесь с Администраторами