Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скорб и Макар (сборник задач в конце).doc
Скачиваний:
37
Добавлен:
09.02.2015
Размер:
856.58 Кб
Скачать
    1. Web-интерфейс системы тестирования

Взаимодействие пользователя с системой тестирования начинается с формы входа в систему, в которой пользователю предлагается ввести логин и пароль и нажать кнопку «Войти».

После входа в систему пользователь оказывается на странице «Содержание», вверху которой расположены названия учебных курсов, а ниже размещаются таблицы, в которых перечислены задачи. Каждому учебному курсу соответствует одна таблица. Каждая таблица имеет шесть столбцов: столбец «Номер» содержит порядковые номера задач; столбец «Название» содержит названия задач; в столбцах «C», «C++» и «Go» располагаются отметки об успешном прохождении решений, написанных на соответствующих языках программирования.

Названия задач являются ссылками на страницы задач. Каждая страница, посвящённая задаче, содержит условие задачи, поле редактирования, в которое можно поместить решение и кнопку «Проверить», нажатие на которую вызывает проверку решения. Вверху страницы находится ссылка «Содержание», позволяющая вернуться к спискам задач.

После выполнения проверки решения пользователь оказывается на странице «Результаты проверки», отображающей вердикт сервера тестирования. Кроме того, на этой странице располагаются поля «Сообщения компилятора», «Входные данные последнего теста», «Ожидаемые результаты» и «Полученные результаты». Вверху страницы находится кнопка «Вернуться к решению».

В отличие от рядового пользователя, преподавателю дополнительно доступна страница, отображающая статистику успеваемости студентов.

    1. Структура задачи

Задача для автоматизированной системы тестирования оформляется в виде отдельного каталога, содержащего как информацию для отображения условия задачи через Web-интерфейс, так и средства для тестирования правильности решения, а именно: наборы тестов и правильных ответов, генератор тестов, эталонное решение и программу проверки.

Генератор тестов, эталонное решение и программа проверки включаются в задачу в виде исходных текстов на одном из языков программирования, поддерживаемых системой тестирования. В настоящее время это ANSI C, C++ и Go. Язык, на котором написана та или иная программа, определяется расширением файла: «c» для ANSI C, «cpp» для C++ и «go» для языка Go.

Условие задачи находится в файле «text.html». Оно представлено в формате HTML и должно содержать три раздела: текст задачи, формат входных данных и формат результата выполнения программы. При этом название задачи в условии не указывается, а находится в отдельном файле «caption.txt».

Каждая задача должна сопровождаться хотя бы одним примером входных и выходных данных. Примеры располагаются в подкаталоге «samples» в виде файлов «01», «01.a», «02», «02.a» и т.д. Каждая пара файлов «xx», «xx.a» содержит входные данные и правильный результат работы решения задачи, соответственно.

Задача должна содержать либо набор тестов, либо генератор тестов, либо и то, и другое одновременно.

Наборы тестов и правильных ответов располагаются в подкаталоге «tests» в виде файлов «01», «01.a», «02», «02.a» и т.д. При этом правильные ответы могут отсутствовать, если задача включает эталонное решение.

Генератор тестов представляет собой исходный код программы, порождающей набор тестов и правильных ответов в виде файлов «01», «01.a», «02», «02.a» и т.д. Генератор располагается в файле с именем «generator.xxx», где расширение «xxx» указывает язык программирования, на котором он написан. Генератор может не порождать правильные ответы, если задача включает эталонное решение.

Исходный код эталонного решения располагается в файле с именем «etalon.xxx», где расширение «xxx» указывает язык программирования, на котором оно написано. Эталонное решение необязательно, если набор тестов в подкаталоге «tests» и набор тестов, порождаемый генератором, содержат правильные ответы.

Сервер тестирования имеет пять встроенных стратегий проверки правильности результата выполнения решения: стратегия побитового сравнения, стратегия сравнения текста, стратегия сравнения лексем, стратегия сравнения целых чисел и стратегия сравнения чисел с плавающей точкой.

Стратегия побитового сравнения включается, если задача содержит пустой файл с именем «BINARY». В этом случае результат выполнения решения должен побитно совпадать с правильным ответом.

Стратегия сравнения текста включается, если задача содержит пустой файл с именем «TEXT». В этом случае результат выполнения решения должен совпадать с правильным ответом с точностью до маркеров перевода строки.

Стратегия сравнения лексем включается, если задача содержит пустой файл с именем «SCAN». Сравнение осуществляется в два этапа. Сначала файл результата выполнения решения и файл с правильным ответом разбиваются на фрагменты, разделённые произвольным количеством пробельных символов (пробелы, символы табуляции и перевода строки). Затем, если количество фрагментов в обоих файлах совпадает, осуществляется побитовое сравнение соответствующих фрагментов из обоих файлов.

Стратегия сравнения целых чисел является развитием стратегии сравнения лексем. Фрагменты, на которые разбиваются результат выполнения решения и правильный ответ, дополнительно переводятся в целые числа произвольной разрядности. В случае успешного перевода происходит сравнение полученных целых чисел. Стратегия включается, если задача содержит файл с именем «INTEGER», в котором в текстовом виде записано основание системы счисления от 2 до 36.

Стратегия сравнения чисел с плавающей точкой аналогична стратегии сравнения целых чисел. Она включается, если задача содержит файл с именем «FLOAT», в котором в текстовом виде записано количество значащих десятичных разрядов. При сравнении используются 64-разрядные числа с плавающей точкой.

Если встроенные стратегии не подходят для проверки правильности результата выполнения решения, то задача должна содержать отдельную программу проверки. Исходный код программы проверки располагается в файле с именем «checker.xxx», где расширение «xxx» указывает язык программирования, на котором она написана. Программа проверки должна считывать результат выполнения решения и правильный ответ из файлов «output» и «answer», выполнять сравнение и возвращать 0 в случае, если результат удовлетворяет правильному ответу, и 1 в противном случае.